You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PL/SQL触发DML语句时,如何获取行条目到变量并打印更新书籍名称

解决方案:在Oracle触发器中获取并打印被更新的行数据

在Oracle的行级触发器中,你可以通过**伪记录:OLD和:NEW**访问DML操作前后的行数据,进而将行条目存入变量或直接使用。针对你的需求,具体实现步骤如下:

  1. 理解伪记录的作用

    • :OLD:代表DML操作执行前的行记录
    • :NEW:代表DML操作执行后的行记录
      由于你仅更新STATUS字段,BOOK_NAME未被修改,因此:OLD.BOOK_NAME和:NEW.BOOK_NAME的值完全一致,任选其一即可获取目标书籍名称。
  2. 修改触发器代码
    你可以将目标行的BOOK_NAME存入声明的aud_bookname变量,再通过dbms_output打印。修改后的完整代码如下:

    CREATE OR REPLACE TRIGGER trigger_1 
    BEFORE UPDATE OR DELETE ON lib_tab FOR EACH ROW
    ENABLE
        DECLARE
            aud_bookname lib_tab.book_name%TYPE;
        BEGIN
            IF UPDATING THEN
                -- 将被更新的书籍名称存入变量
                aud_bookname := :OLD.BOOK_NAME;
                dbms_output.put_line('updating... 书籍名称: ' || aud_bookname);
            END IF;
        END;
    /
    
  3. 简化实现(可选)
    若无需额外变量,也可直接使用伪记录打印,省去变量声明步骤:

    CREATE OR REPLACE TRIGGER trigger_1 
    BEFORE UPDATE OR DELETE ON lib_tab FOR EACH ROW
    ENABLE
        BEGIN
            IF UPDATING THEN
                dbms_output.put_line('updating... 书籍名称: ' || :OLD.BOOK_NAME);
            END IF;
        END;
    /
    
  4. 验证执行效果
    当执行你的UPDATE语句:

    UPDATE lib_tab SET status = 'AVAILABLE' WHERE book_name = 'SILENT HILL';
    

    开启DBMS输出后,会得到如下结果:

    updating... 书籍名称: SILENT HILL
    

内容的提问来源于stack exchange,提问作者Aryan Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:20:16