0

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

1 回答 1

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。

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

于 2013-04-24T22:54:42.887 回答