我希望在Oracle中创建一个函数,我可以将值作为字符串传递并返回一个列表。例如,我希望有一个函数,我给它一本书的标题,它返回一个拥有该书的用户列表。
我创建了下面的函数,其中包含我不确定如何修复的警告以及是否是正确的方法。
CREATE OR REPLACE Function UsersForBooks
( name_in IN varchar(250) )
RETURN varchar(250)
IS
listToReturn varchar(250);
cursor c1 is
SELECT username
FROM (GC_User NATURAL JOIN GC_Books)
NATURAL JOIN GC_BookOwnership
WHERE GC_Books.title = name_in
;
BEGIN
open c1;
fetch c1 into listToReturn;
close c1;
RETURN listToReturn;
END;
/
我以下列方式调用我的函数,但不确定它是否正确。
SELECT * FROM UsersForBooks('The Da Vinci Code');
答案 0 :(得分:0)
你想做这样的事情:
CREATE OR REPLACE FUNCTION UsersForBooks (name_in IN varchar2)
RETURN SYS_REFCURSOR
IS
c SYS_REFCURSOR;
BEGIN
OPEN c FOR
SELECT...;
RETURN c;
END;
/
在Oracle中,始终使用VARCHAR2而不是VARCHAR。
您不在参数列表中指定变量的大小,仅在实际变量声明中指定。