gpt4 book ai didi

database - PL/SQL : SQL Statement ignored?

转载 作者:搜寻专家 更新时间:2023-10-30 22:14:27 25 4
gpt4 key购买 nike

大家好,在尝试创建触发器时收到此错误消息,这让我有点难过。这是我的触发代码。

CREATE OR REPLACE TRIGGER CUSTOMER_AD
AFTER DELETE ON CUSTOMER
REFERENCING OLD AS OLD
FOR EACH ROW
DECLARE
nPlaced_order_count NUMBER;
BEGIN
SELECT COUNT(*)
INTO nPlaced_order_count
FROM PLACED_ORDERS p
WHERE p.FK1_CUSTOMER_ID = OLD.CUSTOMER_ID;
IF nPlaced_order_count > 0 THEN
INSERT into previous_customer
(customer_id,
first_name,
last_name,
address,
AUDIT_USER,
AUDIT_DATE)
VALUES
(:old.customer_id,
:old.first_name,
:old.last_name,
:old.address,
UPPER(v('APP_USER')),
SYSDATE);
END IF;
END CUSTOMER_AD;

我得到的错误是“第 4 行出错:PL/SQL:SQL 语句被忽略 0.10 秒”

有人猜到原因了吗?

感谢帮助

最佳答案

显示的错误只是最高级别。根据您运行它的位置,您应该能够看到堆栈跟踪。客户将决定具体如何做; SQL*Plus 或 SQL Developer 无论如何都会向您展示更多,但我真的不知道其他客户端。如果您在客户端中看不到详细信息,则可以通过以下方式查询它们:

select * from user_errors where name = 'CUSTOMER_AD' and type = 'TRIGGER'

假设表都存在,可能是这一行:

WHERE p.FK1_CUSTOMER_ID = OLD.CUSTOMER_ID;

应该是:

WHERE p.FK1_CUSTOMER_ID = :OLD.CUSTOMER_ID;

当从表中引用旧(或新)值时,referencing 子句中指定的名称前面有一个冒号,因此 :OLD 在这个案件。正如您在 insert ... values() 子句中所做的那样。

(从评论来看,我的假设被证明是错误的 - 以及缺少冒号的问题,表名实际上是 placed_order,没有 s)。

您似乎从上一个问题的两个答案中复制了代码,但并未真正理解它们在做什么。你可能想看看 trigger design guidelines (特别是关于不复制数据库功能的那个)和 syntax for create trigger其中引入了 referencing 子句。

关于database - PL/SQL : SQL Statement ignored?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16509335/

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