SQL 我不明白我的触发器出了什么问题
SQL I don't understand what is wrong with my trigger
我很难理解这个错误:
Error at line 3: PLS-00103: Encountered the symbol "&" when expecting one of the following:
) , * & - + / at mod remainder rem and or
as || multiset
- 创建或替换触发器class_trigger
- 在为每一行插入 Class 之前
- 开始
- IF(类型 = 'vl' && 质量 < 15000)THEN
- 质量 := 15000;
代码为:
CREATE OR REPLACE TRIGGER class_trigger
BEFORE INSERT ON Class FOR EACH ROW
BEGIN
IF (type = 'vl' && mass < 15000) THEN
mass := 15000;
END IF;
END;
我的代码有什么问题?我正在使用 Oracle 的 APEX。谢谢
你有两个问题:
PL/SQL 使用 AND
作为布尔 AND 运算的逻辑运算符,而不是 &&
.
访问传递给触发器的字段时,必须使用 :OLD
或 :NEW
伪行名称对其进行限定。
因此,您需要将触发器重写为:
CREATE OR REPLACE TRIGGER class_trigger
BEFORE INSERT ON Class
FOR EACH ROW
BEGIN
IF :NEW.TYPE = 'vl' AND
:NEW.mass < 15000
THEN
:NEW.MASS := 15000;
END IF;
END class_trigger;
我很难理解这个错误:
Error at line 3: PLS-00103: Encountered the symbol "&" when expecting one of the following:
) , * & - + / at mod remainder rem and or as || multiset
- 创建或替换触发器class_trigger
- 在为每一行插入 Class 之前
- 开始
- IF(类型 = 'vl' && 质量 < 15000)THEN
- 质量 := 15000;
代码为:
CREATE OR REPLACE TRIGGER class_trigger
BEFORE INSERT ON Class FOR EACH ROW
BEGIN
IF (type = 'vl' && mass < 15000) THEN
mass := 15000;
END IF;
END;
我的代码有什么问题?我正在使用 Oracle 的 APEX。谢谢
你有两个问题:
PL/SQL 使用
AND
作为布尔 AND 运算的逻辑运算符,而不是&&
.访问传递给触发器的字段时,必须使用
:OLD
或:NEW
伪行名称对其进行限定。
因此,您需要将触发器重写为:
CREATE OR REPLACE TRIGGER class_trigger
BEFORE INSERT ON Class
FOR EACH ROW
BEGIN
IF :NEW.TYPE = 'vl' AND
:NEW.mass < 15000
THEN
:NEW.MASS := 15000;
END IF;
END class_trigger;