oracle - 我可以使用 Oracle 触发器来强制 varchar 列适应列宽吗?

标签 oracle oracle11g triggers

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

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

我已经尝试过“插入前”触发器(将其从 1500 到 1000 个字符截断时效果很好),但我发现数据超过 2000 个字符(即超过列长度​​)插入仍然失败并出现 ORA-12899。

除了将数据库列更改为 CLOB 之外,还有其他解决方法吗?

最佳答案

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

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

关于oracle - 我可以使用 Oracle 触发器来强制 varchar 列适应列宽吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38871100/

相关文章:

javascript - 触发 "onchange"事件

sql - 如何重新键入表中的层次结构?

php - 当 session 时间戳已过 90 分钟时发送电子邮件

java - sql2o 无法在 oracle DB 上删除

oracle - ORA-00947全局声明类型时值不足

sql - Oracle 从 BLOB 获取 XML

oracle - 在表创建脚本中使用变量

wpf - 在样式的名称范围中找不到 Storyboard

oracle - 使用pl/sql更新序列

sql - 使用 ORDER BY 对数据进行排序