想知道为什么我的SQL语句忽略了我的SET符号

时间:2015-12-01 02:00:26

标签: sql oracle if-statement triggers

这是我的SQL触发器,并且假设将重新排序值更改为Y或N,具体取决于ON_HAND是否小于或大于MINIMUM。问题是它完全忽略了set语句。我必须以不同的方式安排这些吗?

CREATE OR REPLACE TRIGGER TRG_REORDER 
AFTER UPDATE OF ON_HAND, MINIMUM ON PART

BEGIN

IF ON_HAND <= MINIMUM THEN
   SET REORDER = 'Y';
ELSE ON_HAND > MINIMUM
   SET REORDER = 'N';

END IF;
END;

2 个答案:

答案 0 :(得分:1)

我不知道Oracle触发器,但我怀疑你想要一个 BEFORE 触发器和一个类似于此的赋值。

:new.REORDER := case when :new.ON_HAND <= :new.MINIMUM then 'Y' else 'N' end;

点击此处开始: http://www.techonthenet.com/oracle/triggers/before_update.php

答案 1 :(得分:1)

触发器主体使用PL / SQL语法,而不是SQL。因此,对于作业,您需要:=而不是set

您的代码有一些其他语法错误。

  • 您需要参考列的:new值。
  • 您不需要ELSE子句中的条件。
  • 为了修改触发器中列的值,它必须是BEFORE触发器并触发FOR EACH ROW。

所以解决所有问题,现在应该适用于你(警告:未经测试的代码)。

CREATE OR REPLACE TRIGGER TRG_REORDER 
before UPDATE OF ON_HAND, MINIMUM ON PART
for each row
BEGIN

   IF :new.ON_HAND <= :new.MINIMUM THEN
       :new.REORDER = 'Y';
   ELSE 
       :new.REORDER = 'N';
    END IF;
END;