现象:后台编辑新闻时,由于新闻内容很多,在保存的时候报“系统异常”,然后查看日志发现报“ora-01704”错误,然后网上查询后,发现是因为执行的sql语句字符串长度超过最大长度导致的。
原因:一般为包含有对CLOB字段的数据操作。如果CLOB字段的内容非常大的时候,会导致SQL语句过长。隐式转换:oracle默认把字符串转换成varchar2类型,而这个字符串的长度,又比4000大,所以会报ora-01704错误。说得通俗一点,就是两个单引号之间的字符不能超过4000。
解决办法:
1.限制输入长度。
2可以使用PL/SQL语法,采取绑定变量的方式解决,而不是直接拼接SQL,例如:
DECLARE
clobValue 表名.字段名%TYPE;
BEGIN
clobValue := 'XXX'; --字段内容
UPDATE 表名 T SET T.字段名 = clobValue WHERE 条件;
COMMIT;
END;
/
注:END;末尾加“/”的意思是执行这段PL/SQL代码,如果多个PL/SQL代码需要同时执行,末尾必须加上该符号。
参考网址:
https://www.cnblogs.com/loong-hon/p/10820361.html
https://cloud.tencent.com/developer/article/1414730