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,是否在另一个表中出现过,如果有,然后再进行触发!
如果大神能帮忙想到另外更好的办法,小弟可以加分,万分感激!
------解决方案--------------------
触发器 语法错误,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;
------解决方案--------------------
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;