对于长度小于4000的字符串直接执行insert语句正常,但对于超过4000的就不能直接执行了,会报字符串长度过长的错。

通过一阵百度,我认可网上的这个说法:隐式转换,oracle默认把字符串转换成varchar2类型,而这个字符串的长度,又比4000大,所以会报ora-01704错误。说得通俗一点,就是两个单引号之间的字符不能超过4000。

解决方案,对于过长的sql定义一个Clob变量,然后在sql中直接引用这个变量即可:

DECLARE
EXPSTR CLOB:='你的超长字符串';
BEGIN
INSERT INTO "MMS_EXECUTION_RULE" VALUES ('1001', '1001', '跟随模板', 'strategy', 'template', 'normal', '1',EXPSTR , 'system', '1', '0', TO_DATE('2020-06-02 11:36:36', 'YYYY-MM-DD HH24:MI:SS'), null, null, null, null, null, null, 'groovy');
END;
/

注意的是:如果只执行单条语句,最后的 "/" 符号 可以不加,如果后面还有DECLARE语句,"/"符号必须要加上。

使用这种方式,亲测通过,祝好运!