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

Oracle 如何查看其插入触发触发器的表?,oracle,plsql,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_s

我有一个出价表,每次在拍卖中添加出价时,我都希望为该拍卖中的每个出价人创建新的通知。因为这是针对一类数据库的,所以我想做一个触发器来展示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;
/

现在此触发器无法工作,因为它正在访问触发它的表。但这不是问题,因为我没有更改它,它确实需要在插入之后,因为我需要查看它是否通过约束。我该怎么做呢?

您不能从声明了行触发器的表中进行选择,或者您会遇到可怕的“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;

祝您好运。

您无法从声明了行触发器的表中进行选择,或者出现可怕的“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;

祝你好运。

但是我需要通过出价表与拍卖相关联的用户名。然后正确的做法是在程序逻辑中找到用户名,并在插入时输入正确的用户名。这有点像放人的味道,无论如何这是个坏主意。@JoaquimFerrer使用USER获取连接会话的用户名,但我需要通过出价表与拍卖关联的用户名。然后正确的做法是在程序逻辑中找到用户名,并在插入时输入正确的用户名。这有点像放电话的味道,无论如何这是个坏主意。@JoaquimFerrer使用USER获取所连接会话的用户名