在Oracle 10g中,通过触发器在两个数据库之间传递数据,但是程序中总是抛出如下错误:
ORA-01438: value larger than specified precision allowed for this column
提示某一列精度不对,但是却没有提示出是那一列,经过仔细检查,始终没有发现问题原因,于是尝试直接在PL/SQL中执行一次插入命令,看看触发器是否正常工作,但是这次依然不成功,报错ORA-06592, 提示缺少CASE。
经过不断的搜索,终于在网上找到了解决办法,CASE语句中添加上ELSE语句即可。
CASE
WHEN ...
ELSE
NULL;
END CASE;
修改触发器之后,从PLSQL中插入成功,又试了一下通过此程序插入,竟然也成功了!
简单case语句与搜索式case语句的异同
--相同点:两者都用于根据不同的条件,来执行与之对应的语句或完成特定的任务,甚至某些情况下可以互换替换。
--不同点:
--简单case语句提供一个selector选择器,且EXPRESSION的数据类型一定与selector的数据类型匹配,否则报错。
--搜索case语句没有selector选择器,且when子句之后得到的结果一定是一个布尔型值(NULL,TRUR,FALSE)
不知道之间有什么关联,对Oracle没什么研究,就此记录一下,以后遇到类似问题以便解决。