一个关于触发器的问题

[复制链接]
查看11 | 回复8 | 2012-1-4 11:56:01 | 显示全部楼层 |阅读模式
菜鸟级问题。
这是我建的触发器
create trigger my_trigger--trigger
before insert or update of deptno,dname on dept1
for each row
when(new.dname = 'DEP') --触发条件
DECLARE
--触发体
dept_id dept1.deptno%type;
INSERT_EXIST_DEPT1 EXCEPTION;
BEGIN
select deptno into dept_id
from dept1
where dname=new.dname;
raiseINSERT_EXIST_DEPT1;
EXCEPTION
when INSERT_EXIST_DEPT1 then
insert into ERROR(deptno,err)
values(dept_id,'the dept already exists');
END my_trigger;
创建完后 ,警告: 创建的触发器带有编译错误。
然后 添加
insert into dept1 values(50,'DEP','SH');
ORA-04098: 触发器 'SCOTT.MY_TRIGGER' 无效且未通过重新验证
show err:
LINE/COL ERROR
-------- ------------------------------------------------
5/5PL/SQL: SQL Statement ignored
7/17 PL/SQL: ORA-00904: "NEW"."DNAME": 标识符无效
11/5 PL/SQL: SQL Statement ignored
11/17PL/SQL: ORA-00942: 表或视图不存在
求助,各位。

回复

使用道具 举报

千问 | 2012-1-4 11:56:01 | 显示全部楼层
:new.dname啊
回复

使用道具 举报

千问 | 2012-1-4 11:56:01 | 显示全部楼层
11/17PL/SQL: ORA-00942: 表或视图不存在

回复

使用道具 举报

千问 | 2012-1-4 11:56:01 | 显示全部楼层
dingjun123 发表于 2012-2-3 09:53
:new.dname啊

when(:new.dname = 'DEP') --触发条件
*
4 行出现错误:
-25000: 在触发器 WHEN 子句中, 连接变量的使用无效
回复

使用道具 举报

千问 | 2012-1-4 11:56:01 | 显示全部楼层
不是这里
SQL> CREATE OR REPLACE trigger my_trigger--trigger
2before insert or update of deptno,dname on dept1
3for each row
4when(new.dname = 'DEP') --触发条件
5DECLARE
--触发体
6dept_id dept1.deptno%type;
7INSERT_EXIST_DEPT1 EXCEPTION;
8BEGIN
9select deptno into dept_id
10from dept1
11where dname=:new.dname;
12raiseINSERT_EXIST_DEPT1;
13EXCEPTION
14when INSERT_EXIST_DEPT1 then
15insert into ERROR(deptno,err)
16values(dept_id,'the dept already exists');
17END my_trigger;
18/

Trigger created
回复

使用道具 举报

千问 | 2012-1-4 11:56:01 | 显示全部楼层
用触发器不是很好,也可以建个unique索引
CREATE UNIQUE INDEX idx_dept1 ON dept1(decode(dname,'DEP','DEP'));
回复

使用道具 举报

千问 | 2012-1-4 11:56:01 | 显示全部楼层
dingjun123 发表于 2012-2-3 09:53
:new.dname啊

还是不行呀。那个dept1表存在。
回复

使用道具 举报

千问 | 2012-1-4 11:56:01 | 显示全部楼层
dingjun123 发表于 2012-2-3 10:04
不是这里
SQL> CREATE OR REPLACE trigger my_trigger--trigger

谢谢啦。
回复

使用道具 举报

千问 | 2012-1-4 11:56:01 | 显示全部楼层
dingjun123 发表于 2012-2-3 10:12
用触发器不是很好,也可以建个unique索引
CREATE UNIQUE INDEX idx_dept1 ON dept1(decode(dname,'DEP','D ...

TRIGGER MY_TRIGGER 出现错误:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/6PLS-00103: 出现符号 "INSERT_EXIST_DEPT1"在需要下列之一时:
:= ( ; not
null range default character
这是个什么错误啊。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行