通过SQL脚本运行时Oracle用户定义的字符串聚合函数创建问题

时间:2016-09-23 09:02:29

标签: oracle

我有一个用于字符串聚合的Oracle用户定义函数

CREATE OR REPLACE TYPE StringAggType AS OBJECT 
    (
   theString VARCHAR2(4000),
   STATIC FUNCTION ODCIAggregateInitialize
  (sctx IN OUT StringAggType) RETURN NUMBER,
  MEMBER FUNCTION ODCIAggregateIterate(self IN OUT StringAggType , inputValue IN VARCHAR2) RETURN NUMBER,
  MEMBER FUNCTION ODCIAggregateTerminate(self IN StringAggType, returnValue OUT VARCHAR2, flags IN NUMBER) RETURN NUMBER,
  MEMBER FUNCTION ODCIAggregateMerge(self IN OUT StringAggType, ctx2 IN StringAggType) RETURN NUMBER
   );
   /

  CREATE OR REPLACE TYPE BODY StringAggType IS
    STATIC FUNCTION ODCIAggregateInitialize(sctx IN OUT StringAggType)
    RETURN NUMBER IS
    BEGIN
        sctx := StringAggType(NULL);
        RETURN ODCIConst.Success;
   END;

   MEMBER FUNCTION ODCIAggregateIterate(self IN OUT StringAggType, inputValue IN VARCHAR2)
   RETURN NUMBER IS
   BEGIN
       self.theString := self.theString || ',' || inputValue;
       RETURN ODCIConst.Success;
   END;

   MEMBER FUNCTION ODCIAggregateTerminate(self IN StringAggType, returnValue OUT VARCHAR2, flags IN NUMBER)
   RETURN NUMBER IS
   BEGIN
       returnValue := RTRIM( LTRIM( self.theString, ',' ), ',' );
       RETURN ODCIConst.Success;
   END;

   MEMBER FUNCTION ODCIAggregateMerge(self IN OUT StringAggType, ctx2 IN StringAggType) 
   RETURN NUMBER IS
   BEGIN
       self.theString := self.theString || ',' || ctx2.theString;
       RETURN ODCIConst.Success;
   END;
   END;
   /

  CREATE OR REPLACE FUNCTION StringAgg(inputString VARCHAR2)
  RETURN VARCHAR2
  PARALLEL_ENABLE AGGREGATE USING StringAggType;
  /

它完美编译并且从SQL Developer IDE运行时创建UDF,但是当它通过执行脚本的Java程序的SQL脚本运行时,它会出现如下错误:

ORA-00900:Instlid SQL语句对于第一行遇到的

RETURN ODCIConst.Success;

唯一的区别是我正在替换/用于SQL语句执行的分隔符。 从SQL Script内部运行时出现这种情况的原因是什么?

0 个答案:

没有答案