2013-04-24 26 views
0

我期待在Oracle中創建一個函數,我可以將值作爲字符串傳遞並返回一個列表。例如,我想有一個功能,我可以給它一本書的標題,並返回擁有該書的用戶列表。創建一個函數,可以返回列表項使用Oracle sql

我已經創建了下面的函數,其中包含我不確定如何解決的警告以及是否正確的解決方法。

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

這是不正確的,但如果您告訴我們警告是什麼,以及在您打電話時得到了什麼輸出,將會有所幫助。 – 2013-04-24 22:39:30

+0

Oracle沒有「列表」。你想要返回什麼,一個分隔字符串? – eaolson 2013-04-24 23:27:02

+0

我正在有效地嘗試返回擁有某本書的用戶表。基本上我想要一個函數,其中一個值可以傳遞給SELECT語句,並返回這個select語句的結果,在這種情況下,這將是一個用戶表 – 2013-04-25 08:56:21

回答

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。

您不僅僅在實際的變量聲明中指定參數列表中變量的大小。

+0

謝謝託德。該函數似乎構建正確,但運行查詢SELECT * FROM UsersForBooks('達芬奇密碼');出現了一個錯誤,說明我顯然沒有選擇sql。 – 2013-04-24 23:12:43

+0

請提供確切的錯誤。我必須現在走,但也許別人可以從這裏拿走它。 – 2013-04-24 23:14:38

+0

非常感謝所有幫助,這是我的錯誤:錯誤:ORA-00933:SQL命令不能正確地結束 SQLSTATE:42000 錯誤碼:933 – 2013-04-25 08:36:54

相關問題