编写 PLSQL Oracle 函数来查询表
Posted
技术标签:
【中文标题】编写 PLSQL Oracle 函数来查询表【英文标题】:Writing a PLSQL Oracle function to query a table 【发布时间】:2013-10-01 08:07:55 【问题描述】:我有下表
CREATE TABLE Book
(
book_id INTEGER NOT NULL ,
isbn VARCHAR2 (20) NOT NULL,
tittle VARCHAR2 (100) NOT NULL ,
shelf_letter CHAR (1) NOT NULL ,
call_number INTEGER ,
no_of_copies INTEGER NOT NULL ,
) ;
我需要编写一个函数来检索给定 isbn
的 book_id, title,call_number, shelf_letter, no_of_copies
。
输入参数:isbn
输出参数:title, no_of_copies,call_number,shelf_letter.
如果查询成功则返回book_id
,否则返回-1。
如何正确编写这个函数?
【问题讨论】:
我是 plsql 的新手,我正在尝试解决这个问题。我不明白输出参数的含义。我知道什么是传统函数(在 C 和 Java 中),它接受 0 个或多个输入参数并返回一个值或只是 void。但我试图了解 PLSQL 函数。谢谢! 也许这可以帮助你开始docs.oracle.com/cd/E11882_01/appdev.112/e25519/…。当您遇到特定问题时,我们都很乐意提供帮助 【参考方案1】:create OR replace FUNCTION get_book_id
(
p_isbn IN VARCHAR2
, po_title OUT VARCHAR2
, po_no_of_copies OUT NUMBER
, po_call_number OUT NUMBER
, po_shelf_letter OUT NUMBER
)
RETURN NUMBER
IS
v_book_id NUMBER;
BEGIN
BEGIN
SELECT
book_id
, title
, no_of_copies
, call_number
, shelf_letter
INTO
v_book_id
, po_title
, po_no_of_copies
, po_call_number
, po_shelf_letter
FROM book
WHERE isbn = 'p_isbn'
;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_book_id := -1;
END;
RETURN v_book_id;
END;
/
【讨论】:
"函数参数不要使用 OUT 和 IN OUT。" Oracle 数据库 PL/SQL 语言参考:docs.oracle.com/cd/E11882_01/appdev.112/e25519/… @schurik,它不是“那么糟糕”,但这是一个函数的含义 - “获取一些输入并返回一个”。这允许它在 sql 语句中被调用,例如,如果你添加一个 OUT 参数它不能 sqlfiddle.com/#!4/a62d7/1 。但是,您可以在过程中执行此操作【参考方案2】:DECLARE
TYPE book_info_rec IS RECORD
(
book_id NUMBER(1)
, title VARCHAR2(30)
, call_number NUMBER(1)
, shelf_letter VARCHAR2(30)
, no_of_copies NUMBER(1)
);
l_book book_info_rec;
FUNCTION get_book_info(isbn_in IN VARCHAR2) RETURN book_info_rec
AS
l_book_info book_info_rec;
BEGIN
SELECT 1
, 'A Book'
, 2
, 'A'
, 3
INTO l_book_info
FROM DUAL
WHERE dummy = isbn_in;
RETURN l_book_info;
END;
BEGIN
l_book := get_book_info('X');
DBMS_OUTPUT.PUT_LINE
(
l_book.book_id
|| ' ' || l_book.title
|| ' ' || l_book.call_number
|| ' ' || l_book.shelf_letter
|| ' ' || l_book.no_of_copies
);
END;
【讨论】:
以上是关于编写 PLSQL Oracle 函数来查询表的主要内容,如果未能解决你的问题,请参考以下文章
在函数 Oracle PLSQL 中带最高薪水员工 id 的查询?
如何在 PLSQL Developer 中测试包含 DML 的 Oracle 函数?
Oracle-4 - :超级适合初学者的入门级笔记:plsql,基本语法,记录类型,循环,游标,异常处理,存储过程,存储函数,触发器