【问题标题】:Trigger to Add Newly Inserted Rows in Another Table触发器在另一个表中添加新插入的行
【发布时间】:2013-12-26 07:28:25
【问题描述】:

我正致力于在 oracle SQL 开发人员中开发一个触发器,它将特定表 X 中每个新插入的行复制到另一个表 Y。X 和 Y 表中的属性数量不匹配。这就是为什么我只取表 X 中的一部分属性并填写表 Y 这是我编写的代码,但它不起作用:

CREATE OR REPLACE TRIGGER ESURUSAGE
AFTER INSERT
ON X
FOR EACH ROW 
DECLARE
  user_ID   Varchar(10);
BEGIN 
  Select user_name INTO user_ID
    From X A
    Where A.user_name = :new.user_name;
  INSERT INTO Y 
  ('DSS', SYSDATE, upper(user_ID) , null , null, upper(user_ID), upper(user_ID), SYSDATE, SYSDATE); 
END;

【问题讨论】:

  • 两个逗号之间没有值:upper(user_ID), , upper(user_ID),这会导致语法错误。
  • 你确定MySQL标签吗?

标签: mysql sql database oracle triggers


【解决方案1】:

您不需要从表 X 中选择 user_name,因为您已经拥有此信息。您的插入语句中还有一个备用的“,”。试试这样的

CREATE OR REPLACE TRIGGER ESURUSAGE
AFTER INSERT
ON X
FOR EACH ROW 
BEGIN 
  INSERT INTO Y VALUES
  ('DSS', SYSDATE, upper(:new.user_name) , null , null, upper(:new.user_name), upper(:new.user_name), SYSDATE, SYSDATE); 
END;

【讨论】:

  • 现在它给了我这个错误:Error(3,4): PL/SQL: ORA-00928: missing SELECT keyword
  • 您在插入查询中错过了VALUES 关键字。 INSERT INTO Y VALUES (.
  • @Dba 这次它给了我不同的错误,即:错误(2,15):PL/SQL:ORA-00942:表或视图不存在它没有意义,因为 X 和 Y 都存在,我可以从他们两个中选择 *!
  • @shaklasah,检查表 X 是否存在于 user_tables 视图中。 SELECT * FROM user_tables WHERE table_name = 'X;
  • @shaklasah,所以它可能是同义词。用户可能没有足够的权限在该表上插入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
  • 2020-04-07
相关资源
最近更新 更多