如何查看其插入触发触发器的表?

时间:2016-12-15 03:34:52

标签: oracle plsql

我有一个出价表,每次在竞价中添加出价我想为该竞价中的每个出价人创建新的通知。因为这是一类数据库我虽然做了一个触发器来显示oracle pl / sql的一些技巧。 我的触发器是这样的:

CREATE OR REPLACE TRIGGER create_notifs
AFTER INSERT ON bid
FOR EACH ROW
BEGIN
  INSERT INTO notification(id_notif, id_auction, username, time, seen_state)
  SELECT notif_id_seq.NEXTVAL, :NEW.id_auction, username, SYSDATE, 0
  FROM bid
  WHERE bid.id_auction = :NEW.id_leilao;
END;
/

现在这个触发器无效,因为它正在访问触发它的表。这不是问题,因为我没有改变它并且它确实需要在插入之后因为我需要查看它是否通过了约束。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

你不能从声明了行触发器的表中执行SELECT,或者你得到可怕的“mutating table”错误,但它并不像我需要选择任何东西。尝试重写您的触发器:

CREATE OR REPLACE TRIGGER create_notifs
  AFTER INSERT ON bid
  FOR EACH ROW
BEGIN
  INSERT INTO notification
    (id_notif, id_auction, username, time, seen_state)
  VALUES
    (notif_id_seq.NEXTVAL, :NEW.id_auction, username, SYSDATE, 0);
END;

祝你好运。