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


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数据:链接(

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 个元素,例如删除一些元素。 这工作正常。

在第一行declare stmt clob := 'INWARDPKG.MACHINEINWARD_VALIDATING...中,您正在定义您的 CLOB。由于您使用字符串文本来定义 CLOB,因此您将面临字符串文本的限制(请参阅 Oracle 12c 文档(。

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

基本思想:

DECLARE
  C CLOB := TO_CLOB('First 4000 bytes');
  V VARCHAR2(4000);
BEGIN
  V := 'Next 4000 bytes';
  DBMS_LOB.WRITEAPPEND(C, LENGTH(V), V);
  -- more WRITEAPPEND calls until C is complete
  DBMS_OUTPUT.PUT_LINE('CLOB-Length: ' || DBMS_LOB.GETLENGTH(C));
END;

相关内容

  • 没有找到相关文章

最新更新