关于触发器的if exists的问题,求大神帮忙看下,在线等

SLX_Angel 2013-03-08 11:00:19
CREATE OR REPLACE TRIGGER tr_reg_cou
AFTER
INSERT
on testa
FOR EACH ROW
--when (new.cid in (6,7,8))
BEGIN
if exists(select 1 from testa where cid =:new.cid)
BEGIN
insert into testb (bid,nameb,xbb) values(:new.cid,:new.name,:new.xb);
commit;
end;
end if;
END;
我写了这个触发器,结果报错
Compilation errors for TRIGGER GISAP.TR_REG_COU
Error: PLS-00103: 出现符号 "BEGIN"在需要下列之一时:
then and or
符号 "then" 被替换为 "BEGIN" 后继续。
Line: 9
Text: BEGIN

我参考的例子写法是:http://bbs.csdn.net/topics/300082250
希望大神帮忙看下,小弟万分感谢!

其实小弟的需求是这样的:
在A表中每次插入一条数据,去判断下新插入的那条数据的某个字段的值,就比如CID,是否在另一个表中出现过,如果有,然后再进行触发!
如果大神能帮忙想到另外更好的办法,小弟可以加分,万分感激!
...全文
593 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
SLX_Angel 2013-03-08
  • 打赏
  • 举报
回复
引用 3 楼 jxjinfocus 的回复:
SQL code?1234567891011121314CREATE OR REPLACE TRIGGER tr_reg_cou AFTER INSERT ON testa FOR EACH ROWDECLARE v_exist_count INTEGER := 0;BEGIN SELECT COUNT(0) INTO v_exist_count FROM te……
大神,这个好像还是会报错的啊
老焦 2013-03-08
  • 打赏
  • 举报
回复

CREATE OR REPLACE TRIGGER tr_reg_cou
 AFTER INSERT ON testa FOR EACH ROW
DECLARE
  v_exist_count INTEGER := 0;
BEGIN
  SELECT COUNT(0) INTO v_exist_count
    FROM testa 
   WHERE cid =:new.cid;
   
  IF v_exist_count > 0 THEN
    insert into testb (bid,nameb,xbb) values(:new.cid,:new.name,:new.xb);
    COMMIT;
  END IF;
END tr_reg_cou;
老焦 2013-03-08
  • 打赏
  • 举报
回复 1
触发器 语法错误,IF 需要THEN 匹配成对的,少了个 THEN

CREATE OR REPLACE TRIGGER tr_reg_cou
 AFTER 
 INSERT 
 on  testa 
 FOR EACH ROW
 --when (new.cid in (6,7,8))
 BEGIN
 if exists(select 1 from testa where cid =:new.cid) then
 BEGIN
 insert into testb (bid,nameb,xbb) values(:new.cid,:new.name,:new.xb);
 commit;
 end;
 end if;
 END;
SLX_Angel 2013-03-08
  • 打赏
  • 举报
回复
顶顶顶顶顶顶顶顶顶
js_ning_cn 2013-03-08
  • 打赏
  • 举报
回复
CREATE OR REPLACE TRIGGER tr_reg_cou  AFTER INSERT ON testa FOR EACH ROW DECLARE   v_exist_count INTEGER := 0; BEGIN   SELECT COUNT(0) INTO v_exist_count     FROM testa     WHERE cid =:new.cid;        IF v_exist_count > 0 THEN     insert into testb (bid,nameb,xbb) values(:new.cid,:new.name,:new.xb);     COMMIT;--把这个commit去掉就可以了。触发器中不能使用commit   END IF; END tr_reg_cou;

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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