首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ı怎么能得到我试过的,但是我有错误

ı怎么能得到我试过的,但是我有错误
EN

Stack Overflow用户
提问于 2021-07-08 13:07:20
回答 3查看 39关注 0票数 0
代码语言:javascript
运行
复制
 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:不存在表或视图

EN

回答 3

Stack Overflow用户

发布于 2021-07-08 13:12:12

这是不对的

代码语言:javascript
运行
复制
WHERE a =:old.a and b := old.b

分号放错地方了。你需要这样

代码语言:javascript
运行
复制
WHERE a =:old.a and b = :old.b
票数 0
EN

Stack Overflow用户

发布于 2021-07-08 13:16:14

你会打字。错误告诉你在哪里..。

代码语言:javascript
运行
复制
 INSERT INTO table_backup (a,b) VALUES (:NEW.a,NEW.b);  

有一个丢失的:,应该是

代码语言:javascript
运行
复制
 INSERT INTO table_backup (a,b) VALUES (:NEW.a, :NEW.b);

而这两个例子

代码语言:javascript
运行
复制
WHERE a =:old.a and b := old.b;

有=和:错误的方式,应该是

代码语言:javascript
运行
复制
WHERE a = :old.a and b = :old.b;
票数 0
EN

Stack Overflow用户

发布于 2021-07-08 13:16:57

我在你的一些台词里加了几个分号,我相信它会给你提供更少的不。错误。你可以调试更多,一旦你没有。误差减少

代码语言:javascript
运行
复制
 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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68302263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档