PL/SQL触发DML语句时,如何获取行条目到变量并打印更新书籍名称
解决方案:在Oracle触发器中获取并打印被更新的行数据
在Oracle的行级触发器中,你可以通过**伪记录:OLD和:NEW**访问DML操作前后的行数据,进而将行条目存入变量或直接使用。针对你的需求,具体实现步骤如下:
理解伪记录的作用
:OLD:代表DML操作执行前的行记录:NEW:代表DML操作执行后的行记录
由于你仅更新STATUS字段,BOOK_NAME未被修改,因此:OLD.BOOK_NAME和:NEW.BOOK_NAME的值完全一致,任选其一即可获取目标书籍名称。
修改触发器代码
你可以将目标行的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; /简化实现(可选)
若无需额外变量,也可直接使用伪记录打印,省去变量声明步骤: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; /验证执行效果
当执行你的UPDATE语句:UPDATE lib_tab SET status = 'AVAILABLE' WHERE book_name = 'SILENT HILL';开启DBMS输出后,会得到如下结果:
updating... 书籍名称: SILENT HILL
内容的提问来源于stack exchange,提问作者Aryan Sharma
相关产品推荐
相关产品推荐

