我对PL / SQL很陌生,如果问题很明显,很抱歉
根据TRIGGER documentation,触发器有一个WHEN(条件)。我想使用exists condition,这需要子查询,但是,我有以下错误:
ORA-02251
- 00000 - "此处不允许使用子查询"
醇>*原因:声明中不允许使用子查询。
*操作:从语句中删除子查询。
我错过了什么?
我的情况如下:
CREATE OR REPLACE TRIGGER mytrigger AFTER UPDATE OF column ON THIS_TABLE
FOR EACH ROW
WHEN (NEW.status = 'approved' AND EXISTS (
SELECT * FROM JUNCTION_TABLE WHERE THIS_TABLE_ID=NEW.this_table_id AND OTHER_TABLE_ID = 'SOMETHING'))
DECLARE
BEGIN
END;
我想检查该行是否与给定值相关联,我只能在联结表中找到该值。
我肯定可以在触发器的PL / SQL部分执行此操作,但是:
如果另一种情况可能会这样做,我也感兴趣。
答案 0 :(得分:0)
我会用触发器本身的条件元素来写这个,比如
CREATE OR REPLACE TRIGGER mytrigger AFTER UPDATE OF column ON THIS_TABLE
FOR EACH ROW
WHEN (NEW.status = 'approved')
DECLARE
BEGIN
IF EXISTS (
SELECT * FROM JUNCTION_TABLE WHERE THIS_TABLE_ID=NEW.this_table_id AND OTHER_TABLE_ID = 'SOMETHING'))
...
END;
答案 1 :(得分:0)
我不知道使用了哪些Oracle文档。虽然Oracle 10.2文档没有提到这一点,但在Oracle 11.1 documentation中提到了限制:
WHEN子句中的表达式必须是SQL表达式,不能包含子查询。您不能在WHEN子句中使用PL / SQL表达式(包括用户定义的函数)。
如上所述,我现在无法想到检查触发器代码中的条件。