创建一个可以使用Oracle sql返回列表项的函数

时间:2013-04-24 22:24:53

标签: sql oracle function

我希望在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');

1 个答案:

答案 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。

您不在参数列表中指定变量的大小,仅在实际变量声明中指定。