gpt4 book ai didi

sql - Oracle Trigger If 语句条件以某种方式未被满足?

转载 作者:太空狗 更新时间:2023-10-30 02:00:53 24 4
gpt4 key购买 nike

感谢阅读。我目前正在为一家假设的商店开发一个包含大约 10 个实体的数据库。因此,主要实体是 Customer_Order,此触发器的目的是在 Customer_order 中插入或更新行时检查客户的邮政编码是否为空。如果它为空,则触发器应发出警告。

CREATE OR REPLACE TRIGGER Check_Order  
BEFORE INSERT OR UPDATE ON Customer_Order
for each row
DECLARE ShipAddress customer.ship_address.post_code%TYPE;
BEGIN
IF (ShipAddress = '') then
RAISE_APPLICATION_ERROR(-20103, 'Shipping Address is empty');
END IF;
END;
.
run

我知道没有“Else”,但除了更新它所做的表格之外,我没有任何其他操作。不要担心 ShipAddress,我已经用更简单的属性尝试过它,但它根本不会触发。所发生的只是该行将被插入或更新,因此它不满足条件。我已经尝试了各种方法,例如“if(Payment_No='PAYM0001')”,但它也不起作用。是因为我使用的是 for each 而不是语句级触发器吗?

最佳答案

Oracle 静默地将空字符串(即长度为零的字符串)转换为 NULL。因此,您的列中永远不会有 '' 值。因此 IF 语句永远不会为真。您需要检查该触发器中的 NULL:

IF (ShipAddress IS NULL) then 
RAISE_APPLICATION_ERROR(-20103, 'Shipping Address is empty');
END IF;

但您应该真的、真的听从 Ben 的建议,简单地将该列声明为 NOT NULL,而不是使用触发器来检查它。

编辑

您可以在表上使用检查约束进行非空检查:

 CREATE TABLE FOO
(
shipping_address ship_addres,
CONSTRAINT check_post_code CHECK (shipping_address.post_code IS NOT NULL)
)

关于sql - Oracle Trigger If 语句条件以某种方式未被满足?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8377441/

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