我可以使用Oracle触发器强制varchar列适合列宽吗?

时间:2016-08-10 10:40:02

标签: oracle oracle11g triggers

我有一个应用程序偶尔被传递数据导致它失败,ORA-12899错误试图将记录插入到Oracle 11g数据库的varchar(2000)列中。 )在某些情况下,它试图插入超过4000个字符的字段。)

从长远来看,我会请求更改应用程序以防止这种情况发生,但同时我需要一个短期修复程序来保存记录,将数据截断为2000个字符。

我已经尝试过“插入前”触发器(当它从1500到1000个字符截断时工作正常),但我发现的是数据超过2000个字符(即超过2000个字符)列长度​​)插入仍然失败,使用ORA-12899。

除了将数据库列更改为CLOB之外,还有什么办法吗?

1 个答案:

答案 0 :(得分:-1)

在insert命令中包含类似于以下代码的case语句

insert into test_table
  (column1)
values
(  
  (case when length('ablekkkkkkkkkkkh') > 2000 then substr('ablekkkkkkkkh',1,2000)
   else 'ablekkkkkkkkkkkh' end )
);