CREATE TABLE table_orjinal as select 1 a,2 b from dual
select * from table_orjinal
CREATE TABLE table_backup as select * from table_orjinal where 1=2;
select * from table_backup
CREATE or REPLACE trigger t_backup
BEFORE INSERT OR DELETE OR UPDATE ON table_orjinal
FOR EACH ROW
ENABLE
BEGIN
IF INSERTING THEN
INSERT INTO table_backup (a,b) VALUES (:NEW.a,:NEW.b);
ELSIF DELETING THEN
DELETE FROM table_backup WHERE a =:old.a and b =: old.b;
ELSIF UPDATING THEN
UPDATE table_backup
SET a =:new.a WHERE a =:old.a and b =: old.b;
END IF;
END;
输出
错误:触发T_BACKUP
行/Col: 4/5 PL/ SQL : SQL语句被忽略
Line/Col: 4/17 PL/SQL: ORA-00942: table或view不存在
行/Col: 8/5 PL/ SQL : SQL语句被忽略
Line/Col: 8/17 PL/SQL: ORA-00942: table或view不存在
行/Col: 12/5 PL/ SQL : SQL语句被忽略
行/Col: 12/12 PL/SQL: ORA-00942:不存在表或视图
发布于 2021-07-08 13:12:12
这是不对的
WHERE a =:old.a and b := old.b
分号放错地方了。你需要这样
WHERE a =:old.a and b = :old.b
发布于 2021-07-08 13:16:14
你会打字。错误告诉你在哪里..。
INSERT INTO table_backup (a,b) VALUES (:NEW.a,NEW.b);
有一个丢失的:
,应该是
INSERT INTO table_backup (a,b) VALUES (:NEW.a, :NEW.b);
而这两个例子
WHERE a =:old.a and b := old.b;
有=和:错误的方式,应该是
WHERE a = :old.a and b = :old.b;
发布于 2021-07-08 13:16:57
我在你的一些台词里加了几个分号,我相信它会给你提供更少的不。错误。你可以调试更多,一旦你没有。误差减少
CREATE TABLE table_orjinal as select 1 a,2 b from dual;
select * from table_orjinal;
CREATE TABLE table_backup as select * from table_orjinal where 1=2;
select * from table_backup;
CREATE or REPLACE trigger t_backup
BEFORE INSERT OR DELETE OR UPDATE ON table_orjinal
FOR EACH ROW
ENABLE
BEGIN
IF INSERTING THEN
INSERT INTO table_backup (a,b) VALUES (:NEW.a,NEW.b);
ELSIF DELETING THEN
DELETE FROM table_backup WHERE a =:old.a and b := old.b;
ELSIF UPDATING THEN
UPDATE table_backup
SET a =:new.a WHERE a =:old.a and b := old.b;
END IF;
END;
https://stackoverflow.com/questions/68302263
复制相似问题