oracle 9i删除触发器

xiaojin2881 2010-07-25 05:42:16

create table test(name varchar2(60),id number null);
create table test1(name varchar2(60),id number null,tel number null);

我想创建一个触发器,当删除test表中记录时,调用触发器来删除test1表中具有相同id的记录,
下面sql语句创建触发器有什么问题?为什么创建不成功?(环境oracle 9i)
CREATE or replace trigger test_trigger before delete on test
begin
delete from test1 where deleted.id =id;
end;
...全文
1077 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnwz 2010-07-25
  • 打赏
  • 举报
回复
语句级触发器不允许使用:NEW和:OLD,行级触发器允许
:NEW和:OLD名称可以改,在触发器定义中
REFERENCING OLD AS DELETED NEW AS INSERTED
FOR EACH ROW

但,还是得在前面加冒号:
duanzhi1984 2010-07-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiaojin2881 的回复:]
能不能单独导入或导出一个触发器?用什么命令?

加不加‘行级触发’有什么区别?
[/Quote]
行级和语句级触发器
触发器声明为行级触发器(此情况下,它在每行修改之前或之后执行)或语句级触发器(此情况下,它在整个触发器语句完成后执行)。

可以定义行级触发器在插入、更新或删除之前 (BEFORE) 或之后 (AFTER) 执行。语句级触发器在语句后 (AFTER) 执行。RESOLVE 触发器事件用于 SQL Remote:它仅在行级 UPDATE 或 UPDATE OF column-lists 之前触发。

要将触发器声明为行级触发器,请使用 FOR EACH ROW 子句。要将触发器声明为语句级触发器,可以使用 FOR EACH STATEMENT 子句或忽略 FOR EACH 子句。为清楚起见,建议在声明语句级触发器时输入 FOR EACH STATEMENT 子句。


好好看看基础。。。 在ORACLE中没有DELETED这个关键字,

xiaojin2881 2010-07-25
  • 打赏
  • 举报
回复
能不能单独导入或导出一个触发器?用什么命令?

加不加‘行级触发’有什么区别?



tangren 2010-07-25
  • 打赏
  • 举报
回复
CREATE or replace trigger test_trigger 
before delete on test
for each row --行级触发
begin
delete from test1 where test1.id =:old.id;
end;

不要把SQLServer与Oracle搞混了
huangdh12 2010-07-25
  • 打赏
  • 举报
回复
CREATE or replace trigger test_trigger before delete on test
begin
delete from test1 where deleted.id =:ole.id;
end;

好像把or replace 可以去掉
nitaiyoucala 2010-07-25
  • 打赏
  • 举报
回复
delete from test1 where deleted.id =id;
改为
delete from test1 where deleted.id =:old.id;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧