2011-12-16 54 views
0

功能我試圖創建下面的函數:錯誤在PL/SQL

CREATE OR REPLACE 
function CATEGORYTEST(n in number) return VARCHAR(200) 
IS 
    catname VARCHAR(200); 
    BEGIN 
    SELECT NAME AS PARENTCAT INTO CATNAME FROM CATEGORY_LANGUAGE WHERE CATEGORY_ID = (
     SELECT PARENT_ID 
     FROM CATEGORY 
     WHERE ID  = N 
     AND CAT_TYPE_ID = 7 
     AND IS_ACTIVE = 1 
     AND IS_DELETED = 0 
    ) 
     AND IS_ACTIVE = 1 
     AND IS_DELETED = 0; 
    RETURN CATNAME; 
end; 

我收到以下錯誤:

Error(2,51): PLS-00103: Encountered the symbol "(" when expecting one of the following:  . @ % ; is authid as cluster order using external character deterministic parallel_enable pipelined aggregate 

我曾試圖VARCHAR2還,但得到同樣的錯誤。

+0

也刪除此varchar替換VARCHAR(200)。現在得到錯誤:錯誤(3,1):PLS-00103:遇到符號「IS」 – Ankit 2011-12-16 12:09:51

+0

從RETURN VARCHAR(200)中刪除(200)並添加一個「2」 - RETURN VARCHAR2。同時聲明你的catname變量爲VARCHAR2(200)而不是VARCHAR(200) – Ollie 2011-12-16 12:10:46

回答

3

試試這個:

CREATE OR REPLACE 
FUNCTION CATEGORYTEST(
    n IN NUMBER 
) 
    RETURN VARCHAR2 
IS 
    catname VARCHAR2(200); 
BEGIN 
    SELECT NAME AS PARENTCAT 
    INTO CATNAME 
    FROM CATEGORY_LANGUAGE 
    WHERE CATEGORY_ID = (SELECT PARENT_ID 
          FROM CATEGORY 
          WHERE ID = 'N' 
          AND CAT_TYPE_ID = 7 
          AND IS_ACTIVE = 1 
          AND IS_DELETED = 0) 
     AND IS_ACTIVE = 1 
     AND IS_DELETED = 0; 

    RETURN CATNAME; 
end CATEGORYTEST; 

你需要在你的字符串字面單引號,VARCHAR改爲VARCHAR2和其他一些小的變化。

順便說一句,你catname變量將得到更好的聲明爲:

catname CATEGORY_LANGUAGE.NAME%TYPE; 

您可能還需要尋找到返回類型的功能也被靈活地宣佈如:

RETURN CATEGORY_LANGUAGE.NAME%TYPE 

希望它幫助...

2

使用此頭:

CREATE OR REPLACE function CATEGORYTEST(n in number) return VARCHAR 

(返回類型沒有長度規格)