选择。。。某物从…起在某处其中condition1和(如果更新则condition2,如果删除则condition3(。这当然只是伪代码。有可能发表这样的声明吗?当我尝试时,它在updating
下面加下划线。我应该用什么?案例逻辑运算符?一切似乎都被禁止了。这是在触发器中刚开始的。
CREATE OR REPLACE TRIGGER FIX_UPD_LIMITS
BEFORE UPDATE OR DELETE ON LIMITS
FOR EACH ROW
DECLARE
is_deleted_dependant VARCHAR2(1 BYTE);
is_editable_dependant VARCHAR2(1 BYTE);
BEGIN
SELECT IS_DELETE, IS_EDITABLE
INTO is_deleted_dependant, is_editable_dependant
FROM MAP_CALCULATION MC
INNER JOIN map_calculation_group MG ON MC.ID_CALC = MG.ID_CALC
WHERE MG.ID_CALC = MC.ID_CALC
AND ((UPDATING AND mg.id_group = :new.id_group)
OR (DELETING AND :old.id_group = mg.id_group)
);
IF UPDATING AND (is_editable_dependant = 'F' OR is_deleted_dependant = 'T') THEN
...
ELSIF DELETING AND (is_editable_dependant = 'F' OR is_deleted_dependant = 'T') THEN
...
END IF;
END;
/
UPDATE和DELETING是PL/SQL关键字,仅在触发器体中有效。SQL引擎无法理解它们。因此出现了编译错误。
:NEW.GROUP_ID将在更新时填充,在删除时为null。所以这应该对你有效:
SELECT IS_DELETE, IS_EDITABLE
INTO is_deleted_dependant, is_editable_dependant
FROM MAP_CALCULATION MC
INNER JOIN map_calculation_group MG ON MC.ID_CALC = MG.ID_CALC
WHERE MG.ID_CALC = MC.ID_CALC
AND mg.id_group = coalesce(:new.id_group, :old.id_group)
);