【问题标题】:Query triggered on delete of a row from a table从表中删除行时触发的查询
【发布时间】:2014-01-19 14:43:52
【问题描述】:

我正在使用以下查询从表 PER_PREVIOUS_EMPLOYERS 中找出已更新/插入的行。现在我希望在从表 PER_PREVIOUS_EMPLOYERS 中删除任何行时触发查询。任何帮助将不胜感激。

SELECT 
papf.full_name,
papf.email_address
FROM PER_PREVIOUS_EMPLOYERS PPEV,
per_all_people_F papf
WHERE PPEV.ROWID = :ROWID
and PPEV.BUSINESS_GROUP_ID= 81
and papf.person_ID=ppev.person_id
and trunc(sysdate) between papf.effective_start_date and papf.effective_end_date

我在 oracle Alert 中使用它,所以我不能在删除触发器上使用创建或替换。

【问题讨论】:

    标签: sql oracle11g oracle-sqldeveloper plsqldeveloper


    【解决方案1】:

    您可以使用触发器:

    CREATE or REPLACE TRIGGER trigger_name
    AFTER DELETE
       ON PER_PREVIOUS_EMPLOYERS
       FOR EACH ROW
    
    DECLARE
       name varchar2;
       email varchar2;
    
    BEGIN
       SELECT 
       papf.full_name,
       papf.email_address
       INTO name, email
       FROM PER_PREVIOUS_EMPLOYERS PPEV,
       per_all_people_F papf
       WHERE PPEV.ROWID = :ROWID
       and PPEV.BUSINESS_GROUP_ID= 81
       and papf.person_ID=ppev.person_id
       and trunc(sysdate) between papf.effective_start_date and papf.effective_end_date;
    
       --store the result somewhere
    EXCEPTION
       WHEN ...
       -- exception handling
    
    END;
    

    【讨论】:

    • 我无法使用创建或替换触发器,因为我正在使用 Oracle 警报。我只能使用 pl/sql 查询
    • 看看 Oracle 警报事件,看起来可能会有所帮助。
    • 没有在指南中只给出“插入后”n“更新后”。我需要的是删除后
    【解决方案2】:

    您可以在早上将所有数据插入到 all_data 这样的表中,而在一天结束时,您可以在 all_data_end_day 这样的表中插入所有数据 通过比较 all_data 和 all_data_end_morning 你可以找出哪些行被删除了, 所有行都存在于 all_data 中,而不存在于 all_data_end_day

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      相关资源
      最近更新 更多