Mo *_*osa 3 sql database oracle triggers
谢谢阅读.我目前正在为一家假想商店开发一个大约10个实体的数据库.因此,主要实体是Customer_Order,此触发器的目的是在Customer_order中插入或更新行时检查客户的邮政编码是否为空.如果为null,则触发器应该发出警告.
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
Run Code Online (Sandbox Code Playgroud)
我知道没有"Else",但除了更新它所做的表之外,我没有任何其他行动.不要担心ShipAddress,我尝试使用更简单的属性,它根本不会触发.所有发生的事情是该行将被插入或更新,因此它不符合条件.我已经尝试了各种各样的方法,例如"if(Payment_No ='PAYM0001')也不起作用.是不是因为我使用的是每个而不是语句级触发器?
Oracle静默地将空字符串(即长度为零的字符串)转换为NULL.因此'',您的专栏中永远不会有任何价值.因此IF语句永远不会成立.您需要在该触发器中检查NULL:
IF (ShipAddress IS NULL) then
RAISE_APPLICATION_ERROR(-20103, 'Shipping Address is empty');
END IF;
Run Code Online (Sandbox Code Playgroud)
但是你真的应该遵循Ben的建议并简单地将该列声明为NOT NULL,而不是使用触发器来检查它.
编辑
您可以使用表格上的检查约束执行非空检查:
CREATE TABLE FOO
(
shipping_address ship_addres,
CONSTRAINT check_post_code CHECK (shipping_address.post_code IS NOT NULL)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6532 次 |
| 最近记录: |