您好我有一个存储过程接受字符串作为参数,它被分配给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;
任何有助于解决此问题的帮助都将受到赞赏。
答案 0 :(得分:0)
以上注释均有效,具体取决于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。