今天帮其他项目组同事写触发器。
由于本人以前未接触过触发器,周末去书城翻翻书看了下。
现把出现的问题记录如下。
ORA-04098 触发器无效或未通过重新验证
此处问题主要是触发器语法、语句写的又问题。
如声明变量
DECLARE ISA13 VARCHAR2(1); SELECT E1307 INTO ISA13 from USRA13 WHERE A0100 = :NEW.A0100;
此处 E1307 在数据库中为 VARCHAR2,一开始为图简便 把ISA13 声明为 NUMBER 类型。
总结:ORA-04098主要是语法不正确或者变量声明赋值类型不正确等问题
ORA-01403 no data found 数据未找到
当时sql如下
SELECT E1307 INTO ISA13 from USRA13 WHERE A0100 = :NEW.A0100;
看错误楼主就明白是啥问题。so,当时sql 修改如下
SELECT nvl(E1307 ,3)INTO ISA13 from USRA13 WHERE A0100 = :NEW.A0100;
执行之后还是报错 ORA-01403,囧了~,上网搜之
先给出帮我解决问题的连接:http://blog.csdn.net/aiouwen521/article/details/5858841
修改代码如下,问题解决
begin SELECT E1307 INTO ISA13 from USRA13 WHERE A0100 = :NEW.A0100; exception when no_data_found then ISA13 := 3; end;
如此,完成触发器之初体验。这种事果然比整理历史数据有成就感~哈哈!