作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
感谢阅读。我目前正在为一家假设的商店开发一个包含大约 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/
我是一名优秀的程序员,十分优秀!