gpt4 book ai didi

sql - Oracle:在触发器中使用子查询

转载 作者:行者123 更新时间:2023-12-04 21:55:17 24 4
gpt4 key购买 nike

我如何解决 Oracle 不允许在触发器中使用子查询的限制。

这是我尝试创建的示例触发器,但无法创建,因为我无法使用子查询。

CREATE OR REPLACE TRIGGER trigger_w_subquery
AFTER UPDATE OR INSERT ON project_archiving
FOR EACH ROW WHEN (old.archiving_status <> new.archiving_status
AND new.archiving_status = 1
AND (SELECT offer FROM projects WHERE projnum = :new.projnum) IS NULL
)
BEGIN
INSERT INTO offer_log (offer, status, date)
VALUES (null, 9, sysdate);
END;

最佳答案

这个触发器会这样做:

CREATE OR REPLACE TRIGGER trigger_w_subquery
AFTER UPDATE OR INSERT ON project_archiving
FOR EACH ROW WHEN (old.archiving_status <> new.archiving_status
AND new.archiving_status = 1
)
DECLARE
l_offer projects.offer%TYPE;
BEGIN
SELECT offer INTO l_offer
FROM projects
WHERE projnum = :new.projnum;

IF l_offer IS NULL THEN
INSERT INTO offer_log (offer, status, date)
VALUES (null, 9, sysdate);
END IF;
END;

我假设从项目中选择总是会找到一行;如果不是,它将引发您可能需要处理的 NO_DATA_FOUND 异常。

关于sql - Oracle:在触发器中使用子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/909156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com