我有一个用于字符串聚合的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内部运行时出现这种情况的原因是什么?