触发器的错误,找了半天没发现?急

ruanwxh 2010-03-25 09:35:46

create or replace trigger tgr_bulletin_add
after insert on bulletin
for each row
declare
-- local variables here
i_count number(10);
begin
delete from bulletin_to_user where bulletin_id=:new.id_num;
for i_count in (select id from sys_user) loop
insert into bulletin_to_user(id_num,bulletin_id,user_id,readed) values(bulletin_to_user_seq.nextval,:new.id_num,i_count,0);
end loop;
end tgr_bulletin_add;

求高手帮忙看下这个触发器哪里有错?
提示
LINE/COL ERROR
-------- -------------------------
7/119 PLS-00382: 表达式类型错误
...全文
134 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruanwxh 2010-03-25
  • 打赏
  • 举报
回复
多谢谢上面的高手们
分不多,大家见谅了.
fxianxian 2010-03-25
  • 打赏
  • 举报
回复
values(bulletin_to_user_seq.nextval,:new.id_num,i_count.id,0);
这个你要好好看看游标的用法啊
Raul_Gonzalez 2010-03-25
  • 打赏
  • 举报
回复
CREATE OR REPLACE TRIGGER tgr_bulletin_add
AFTER INSERT
ON bulletin
FOR EACH ROW
DECLARE
-- local variables here
i_count NUMBER (10); --这里是声明变量
BEGIN
DELETE FROM bulletin_to_user
WHERE bulletin_id = :NEW.id_num;

FOR rec IN (SELECT ID --这里是游标结果集
FROM sys_user)
LOOP
INSERT INTO bulletin_to_user
(id_num, bulletin_id, user_id, readed
)
VALUES (bulletin_to_user_seq.NEXTVAL, :NEW.id_num, rec.id, 0
);
END LOOP;
END tgr_bulletin_add;
ORHCLE 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ruanwxh 的回复:]
引用 3 楼 orhcle 的回复:
SQL code
for i_count in (select id from sys_user) loop
insert into bulletin_to_user(id_num,bulletin_id,user_id,readed) values(bulletin_to_user_seq.nextval,:new.id_num,i_count.id,……
[/Quote]
此处调用的是游标,它是可见的对这块。
Phoenix_99 2010-03-25
  • 打赏
  • 举报
回复
你的i_count也没有附初值啊,也没有增值
fxianxian 2010-03-25
  • 打赏
  • 举报
回复
把declare
-- local variables here
i_count number(10);
去掉
这段是多余的
ruanwxh 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 orhcle 的回复:]
SQL code
for i_count in (select id from sys_user) loop
insert into bulletin_to_user(id_num,bulletin_id,user_id,readed) values(bulletin_to_user_seq.nextval,:new.id_num,i_count.id,0);
end loo……
[/Quote]
为什么改成i_count.id就可以了。i_count我不是声明为number(10)呢?
ruanwxh 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 phoenix_99 的回复:]
把(select id from sys_user)改成10呢
[/Quote]
改成10也不行
Phoenix_99 2010-03-25
  • 打赏
  • 举报
回复
把(select id from sys_user)改成10呢
ORHCLE 2010-03-25
  • 打赏
  • 举报
回复
for i_count in (select id from sys_user) loop
insert into bulletin_to_user(id_num,bulletin_id,user_id,readed) values(bulletin_to_user_seq.nextval,:new.id_num,i_count.id,0);
end loop;

这样子了
ruanwxh 2010-03-25
  • 打赏
  • 举报
回复
select id from sys_user我改成select 1 from dual也是错的。

insert into bulletin_to_user(id_num,bulletin_id,user_id,readed) values(bulletin_to_user_seq.nextval,:new.id_num,i_count,0);i_count改成1就没报错.
Phoenix_99 2010-03-25
  • 打赏
  • 举报
回复
建议还是先看一下各个对应的类型是否正确,然后(select id from sys_user) 改为常量,再试一下

17,382

社区成员

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

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