Oracle 如何查看其插入触发触发器的表?
我有一个出价表,每次在拍卖中添加出价时,我都希望为该拍卖中的每个出价人创建新的通知。因为这是针对一类数据库的,所以我想做一个触发器来展示oracle pl/sql中的一些技能。 我的触发器是这样的: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
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获取所连接会话的用户名