Oracle 12c CLOB数据类型未按预期工作

时间:2014-10-20 09:42:55

标签: oracle clob oracle12c

I have This Oracle 12c Procedure

CREATE OR REPLACE PROCEDURE LOGINCHECK(SQLQRY IN CLOB)
AS
    C INTEGER;
    N INTEGER;
    RC SYS_REFCURSOR;
  stmt clob:= To_Clob('begin ' || sqlqry || '; end;');
BEGIN
    C := SYS.DBMS_SQL.OPEN_CURSOR;
    SYS.DBMS_SQL.PARSE(C,stmt ,DBMS_SQL.native);
    N := SYS.DBMS_SQL.EXECUTE(C);
    SYS.DBMS_SQL.GET_NEXT_RESULT(C,RC);
    SYS.DBMS_SQL.RETURN_RESULT(RC);
EXCEPTION
WHEN NO_DATA_FOUND THEN
    NULL;
when OTHERS then
    RAISE;
END LOGINCHECK;

我在匿名阻止中调用此过程(从此处下载XML数据:Link

declare stmt clob := 'INWARDPKG.MACHINEINWARD_VALIDATING(XMLDOC => XMLTYPE.CREATEXML(paste xml from link))'; --The parameter value is a xml you can download it from above link
begin
LOGINCHECK(SQLQRY => STMT);
end;

但是我收到错误PLS-00172:字符串文字太长了。

如果我将xml大小减少到40-50个元素,比如删除一些元素。这很好。

1 个答案:

答案 0 :(得分:0)

在第一行 angular.copy(source, [destination]); 中,您正在定义CLOB。由于您使用字符串文字来定义CLOB,因此您将面临字符串文字的限制(请参阅Oracle 12c Documenation)。

要解决您的问题,您必须逐步构建CLOB,使用DBMS_LOB package并附加不超过4000字节的字符串,直到您的CLOB完成。

基本理念:

declare stmt clob := 'INWARDPKG.MACHINEINWARD_VALIDATING...
相关问题