[英]Pypika: Is it possible to dynamically change the operator in where clause
[英]Is it possible to change a where clause dynamically in a trigger (Oracle)?
Select...某事...来自...某处... where condition1 和(如果更新则 condition2 elsif 删除则 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;
/
UPDATING 和 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)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.