Oracle: Using subquery in a trigger

前端 未结 3 1254
梦毁少年i
梦毁少年i 2021-01-13 16:14

How can I work around the Oracle\'s limitation of not allowing subqueries in triggers.

Here\'s an example trigger I\'m trying to create, but am unable to because I c

相关标签:
3条回答
  • 2021-01-13 16:54

    This trigger would do it:

    CREATE OR REPLACE TRIGGER trigger_w_subquery
    AFTER UPDATE OR INSERT ON project_archiving
    FOR EACH ROW WHEN (old.archiving_status <> new.archiving_status
      AND new.archiving_status = 1
    )
    DECLARE
      l_offer projects.offer%TYPE;
    BEGIN
      SELECT offer INTO l_offer 
      FROM projects 
      WHERE projnum = :new.projnum;
    
      IF l_offer IS NULL THEN
        INSERT INTO offer_log (offer, status, date)
        VALUES (null, 9, sysdate);
      END IF;
    END;
    

    I have assumed that the select from projects will always find a row; if not it will raise a NO_DATA_FOUND exception that you may need to handle.

    0 讨论(0)
  • 2021-01-13 17:09

    I expect that you want something like

    CREATE OR REPLACE TRIGGER trigger_w_subquery
    AFTER UPDATE OR INSERT ON project_archiving
    FOR EACH ROW 
    WHEN (old.archiving_status <> new.archiving_status
      AND new.archiving_status = 1)
    DECLARE
      l_offer projects.offer%TYPE;
    BEGIN
      SELECT offer 
        INTO l_offer
        FROM projects 
       WHERE projnum = :new.projnum;
    
      IF( l_offer IS NULL )
      THEN
        INSERT INTO offer_log (offer, status, date)
          VALUES (null, 9, sysdate);
      END IF;
    END;
    
    0 讨论(0)
  • 2021-01-13 17:09

    Can you put the condition into the action (between BEGIN and END) instead of in the 'whether it fires'? Yes, it means that the trigger body might be fired more often - but if it gets you around the problem...

    0 讨论(0)
提交回复
热议问题