2011-12-16 27 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 

(返回类型没有长度规格)