sql - 插入或更新的值过高或过低时的 SQL 触发器
问题描述
我正在尝试创建一个触发器,该触发器在插入或更新的汽车价格过高或过低时运行。在尝试编译时,它只是说必须在我使用或看到的其他类似方法使用相同方法的地方声明标识符。
CREATE OR REPLACE TRIGGER carlistprice_insert_update
BEFORE INSERT OR UPDATE ON car
FOR EACH ROW
WHEN (NEW.carlistprice < 0 OR NEW.carlistprice > 250000)
BEGIN
IF NEW.carlistprice < 0 THEN
:NEW.carlistprice := 0;
END IF;
IF NEW.carlistprice > 250000 THEN
:NEW.carlistprice := 250000;
END IF;
END;
/
我将这个程序基于这个代码块,它可以工作并且不需要声明标识符。
CREATE OR REPLACE TRIGGER cust_before_insert
BEFORE INSERT ON customer
FOR EACH ROW
WHEN(NEW.custname != UPPER(NEW.custname))
BEGIN
:NEW.custname := UPPER(:NEW.custname);
END;
/
carlistprice 是我的一张表中的有效列
解决方案
- in
WHEN
子句,NEW
(以及OLD
)没有冒号。 - 在其他地方,它必须以冒号开头
所以:
CREATE OR REPLACE TRIGGER carlistprice_insert_update
BEFORE INSERT OR UPDATE ON car
FOR EACH ROW
WHEN (NEW.carlistprice < 0 OR NEW.carlistprice > 250000) -- no colon here
BEGIN
IF :NEW.carlistprice < 0 THEN -- colon here
:NEW.carlistprice := 0; -- and here
END IF;
IF :NEW.carlistprice > 250000 THEN -- and here
:NEW.carlistprice := 250000; -- and here
END IF;
END;
/
推荐阅读
- android - Cordova - Android - 为什么 Android 操作系统会删除 WebSQL 和本地存储数据?
- javascript - 将输入 ID 更改为错误地更新状态
- go - 反向代理意外 EOF 读取请求正文
- java - Why sendKeys() in Windows IE 11 no longer persists after upgrading to Selenium Java 3.14.0?
- android - 如何使用 animatorSet 更改视图的背景颜色
- swift - 如何使用 Vapor 3 在 PostgreSQL 中存储 Swift 类型(日期、字典等)?
- c# - 参数异常 - 路径不是合法形式?
- sql - 通过外键进行冗余以允许更简单的常见查询?
- regex - 正则表达式将匹配字符串中的所有单词
- c# - MQTTnet 客户端发布