Ошибка на функции в PL / SQL - PullRequest
       47

Ошибка на функции в PL / SQL

0 голосов
/ 16 декабря 2011

Я пытался создать следующую функцию:

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, но получаю ту же ошибку.

Ответы [ 2 ]

3 голосов
/ 16 декабря 2011

Попробуйте это:

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 голосов
/ 16 декабря 2011

Используйте этот заголовок:

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

(без указания длины для типа возвращаемого значения)

...