Stored procedures Oracle XMLAGG没有';当字符数超过32K时无法工作

Stored procedures Oracle XMLAGG没有';当字符数超过32K时无法工作,stored-procedures,plsql,oracle11g,clob,Stored Procedures,Plsql,Oracle11g,Clob,为存储过程中声明的clob变量赋值时出现以下错误。当我在SQLDeveloper上运行查询时,同样的事情也会发生 这是我当前在存储过程中使用的查询: SELECT RTRIM(XMLAGG(XMLELEMENT(E, col1, chr(10)).EXTRACT('//text()')).GetClobVal(),',') INTO CLOB_VAR FROM Table1** create or replace PROCEDURE TMP_STORE_PROC

为存储过程中声明的clob变量赋值时出现以下错误。当我在SQLDeveloper上运行查询时,同样的事情也会发生

这是我当前在存储过程中使用的查询:

SELECT 
    RTRIM(XMLAGG(XMLELEMENT(E, col1, chr(10)).EXTRACT('//text()')).GetClobVal(),',') 
        INTO CLOB_VAR 
FROM Table1**
create or replace PROCEDURE TMP_STORE_PROC  () IS
    CLOB_TEXT CLOB;
    start_timestamp TIMESTAMP WITH TIME ZONE := SYSTIMESTAMP;
    ERR_CODE VARCHAR2(20);
    ERR_MSG VARCHAR2(500);
    BEGIN
        SAVEPOINT startTransaction;

        SELECT RTRIM(XMLAGG(XMLELEMENT(E, col1, chr(10)).EXTRACT('//text()')).GetClobVal(),',') INTO CLOB_TEXT FROM Table1

        DBMS_OUTPUT.PUT_LINE('################ String length -- '||TO_CHAR(CLOB_TEXT));

        COMMIT;
      NULL;
     EXCEPTION 
        WHEN OTHERS THEN
            ERR_CODE := SQLCODE;
            ERR_MSG := SQLERRM;
            DBMS_OUTPUT.PUT_LINE('Stored procedure failed in execution. Error Message : '||ERR_CODE||' -- MSG --  '||ERR_MSG);
            ROLLBACK TO startTransaction;
            RAISE;
    END;
我不明白为什么它会导致像数字或值错误这样的错误

错误报告-

ORA-06502:PL/SQL:数字或值错误
ORA-06512:在“XXXXXX.TMP存储过程”第39行
ORA-06512:在第1行
650200000-“PL/SQL:数字或值错误%s”
*原因:算术、数字、字符串、转换或约束错误 发生。例如,如果尝试执行以下操作,则会发生此错误: 将值NULL赋给声明为NOT NULL的变量,或者 试图将大于99的整数分配给变量 声明编号(2)。
*操作:更改数据、如何操作数据或如何声明数据 该值不违反约束

存储过程:

SELECT 
    RTRIM(XMLAGG(XMLELEMENT(E, col1, chr(10)).EXTRACT('//text()')).GetClobVal(),',') 
        INTO CLOB_VAR 
FROM Table1**
create or replace PROCEDURE TMP_STORE_PROC  () IS
    CLOB_TEXT CLOB;
    start_timestamp TIMESTAMP WITH TIME ZONE := SYSTIMESTAMP;
    ERR_CODE VARCHAR2(20);
    ERR_MSG VARCHAR2(500);
    BEGIN
        SAVEPOINT startTransaction;

        SELECT RTRIM(XMLAGG(XMLELEMENT(E, col1, chr(10)).EXTRACT('//text()')).GetClobVal(),',') INTO CLOB_TEXT FROM Table1

        DBMS_OUTPUT.PUT_LINE('################ String length -- '||TO_CHAR(CLOB_TEXT));

        COMMIT;
      NULL;
     EXCEPTION 
        WHEN OTHERS THEN
            ERR_CODE := SQLCODE;
            ERR_MSG := SQLERRM;
            DBMS_OUTPUT.PUT_LINE('Stored procedure failed in execution. Error Message : '||ERR_CODE||' -- MSG --  '||ERR_MSG);
            ROLLBACK TO startTransaction;
            RAISE;
    END;
替换

DBMS_OUTPUT.PUT_LINE('################ String length -- '||TO_CHAR(CLOB_TEXT));
有以下几点

DBMS_OUTPUT.put_line ( '################ String length -- ' || length(clob_text)); 
程序

CREATE OR REPLACE PROCEDURE tmp_store_proc
IS
   clob_text         CLOB;
   start_timestamp   TIMESTAMP WITH TIME ZONE := SYSTIMESTAMP;
   err_code          VARCHAR2 (20);
   err_msg           VARCHAR2 (500);
BEGIN
   SAVEPOINT starttransaction;

   SELECT RTRIM (
             XMLAGG (XMLELEMENT (e, col1, CHR (10)).EXTRACT ('//text()')).getclobval (),
             ',')
     INTO clob_text
     FROM table1;


   DBMS_OUTPUT.put_line (
      '################ String length -- ' || LENGTH (clob_text));

   COMMIT;
   NULL;
EXCEPTION
   WHEN OTHERS
   THEN
      err_code := SQLCODE;
      err_msg := SQLERRM;
      DBMS_OUTPUT.put_line (
            'Stored procedure failed in execution. Error Message : '
         || err_code
         || ' -- MSG --  '
         || err_msg);
      ROLLBACK TO starttransaction;
      RAISE;
END;
通过以下方式执行该过程:

exec tmp_store_proc
输出

##########字符串长度——18224744
如果您想打印CLOB,请查看

我无法使用一些虚拟数据进行复制。你能提供一个MCVE来演示这个问题吗?或者至少是您的过程代码。我添加了store proc代码。我希望这能帮助您确定第39行实际是哪一行,但由于这似乎是您实际代码的一小部分,它不知道什么是
APP\u id
?如果这是真正的CLOB变量,那么
dbms\u输出
行可能是真正的罪魁祸首;消息文本意味着您想要的是长度,而不是整个字符串,不管它是什么。APP_IDS——输入错误。它是CLOB_文本即使我删除了DBMS_输出,错误仍然保持不变。@AshishMishra我能够在11g数据库中重现相同的错误。正如Alex提到的,删除
DBMS\u输出
,错误已经消失。