【发布时间】:2019-01-09 21:13:02
【问题描述】:
在为存储过程中声明的 clob 变量赋值时出现以下错误。当我在 SQL Developer 上运行查询时,同样的事情。
这是我目前在存储过程中使用的查询:
SELECT
RTRIM(XMLAGG(XMLELEMENT(E, col1, chr(10)).EXTRACT('//text()')).GetClobVal(),',')
INTO CLOB_VAR
FROM Table1**
我不明白为什么它会导致诸如数字或值错误之类的错误。
错误报告-
ORA-06502:PL/SQL:数字或值错误
ORA-06512:在“XXXXXX.TMP_STORED_PROC”,第 39 行
ORA-06512:在第 1 行
06502. 00000 - “PL/SQL:数值或数值错误%s”
*原因:算术、数字、字符串、转换或约束错误 发生了。例如,如果尝试 将值 NULL 分配给声明为 NOT NULL 的变量,或者如果 尝试将大于 99 的整数分配给变量 声明为 NUMBER(2)。
*行动:改变数据,它是如何被操纵的,或者它是如何声明的 值不违反约束。
存储过程:
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;
【问题讨论】:
-
我无法使用一些虚拟数据进行复制。您能否包含一个演示该问题的 MCVE?或者至少是你的程序代码。
-
我已经添加了商店过程代码。
-
嗯,我希望这将有助于确定第 39 行实际上是哪一行,但由于这似乎是您实际代码的一小部分,所以它不是
APP_IDS是什么?如果那是真正的 CLOB 变量,那么dbms_output行可能是真正的罪魁祸首;消息文本暗示您想要长度,而不是整个字符串,不管它是什么。 -
APP_IDS -- 拼写错误。它是 CLOB_TEXT 即使我删除了 DBMS_OUTPUT,错误仍然存在。
-
@AshishMishra 我能够在 11g 数据库中重现相同的错误。正如Alex所说,删除
DBMS_OUTPUT,错误就消失了。
标签: stored-procedures plsql oracle11g clob