在 PL/SQL 中插入 clob 数据时出错
Posted
技术标签:
【中文标题】在 PL/SQL 中插入 clob 数据时出错【英文标题】:Error while inserting a clob data in PL/SQL 【发布时间】:2017-04-28 20:02:51 【问题描述】:我有一个存储过程,它接受字符串作为参数,并将它分配给一个 clob 变量并在插入查询中使用它。
存储过程-
CREATE OR REPLACE PROCEDURE INSERTPROC(my_data VARCHAR2)
AS
my_clob clob;
BEGIN
my_clob := my_data;
INSERT INTO MYTABLE(MYCLOBCOL) values (my_clob);
COMMIT;
END;
但是在插入大量数据时,它会抛出以下错误。
java.sql.SQLException: ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 1
我将程序更改为以下,但我仍然觉得它有效,
CREATE OR REPLACE PROCEDURE INSERTPROC(my_data VARCHAR2)
AS
my_clob clob;
BEGIN
--my_clob := my_data;
SELECT CONCAT(my_clob, my_data) INTO my_clob FROM DUAL;
INSERT INTO MYTABLE(MYCLOBCOL) values (my_clob);
COMMIT;
END;
【问题讨论】:
对于大块(即 > 32k),您应该使用 dbms_lob 包,过程 dbms_lob.append。 错误不是来自程序内部的代码;它来自调用 to 过程,因为您传递的字符串值(希望作为绑定变量)大于 varchar2 参数允许的 32k。 【参考方案1】:上述两个 cmets 是否有效取决于 Oracle 的版本和用于调用该过程的编程语言。我使用 VB.NET (VS 2013) 进行编码,在存储大型文本数据时,我使用 CLOB 作为调用存储过程和存储过程本身的参数类型。假设java调用可以使用CLOB类型,把过程改成:
CREATE OR REPLACE PROCEDURE INSERTPROC(my_data CLOB)
AS
BEGIN
INSERT INTO MYTABLE(MYCLOBCOL) values (my_data);
COMMIT;
END;
Varchar2 限制为 4000 个字符,CLOB 限制为 2gb,具体取决于数据库版本。
【讨论】:
以上是关于在 PL/SQL 中插入 clob 数据时出错的主要内容,如果未能解决你的问题,请参考以下文章