【发布时间】:2020-05-01 16:56:05
【问题描述】:
我需要编写一个触发器,输出工资已被修改的员工的名字和姓氏。当员工的旧工资小于 10,000 并且修改后大于 10,000 时,此触发器将起作用。此触发器必须是行触发器
我写了这个:
CREATE OR REPLACE TRIGGER print_info
AFTER UPDATE OF salary ON employees
FOR EACH ROW
DECLARE fname employees.first_name%type; lname employees.last_name%type;
BEGIN
IF(:OLD.salary < 10000 AND :NEW.salary > 10000) THEN
dbms_output.put('fname, lname');
END IF;
END;
/
此代码编译成功,触发器创建成功,但是当我更新员工的工资时,在触发器要求内,触发器不执行或不显示任何内容。
我在这里做错了吗?
感谢您的帮助。
【问题讨论】:
-
触发器不能“显示任何东西”。触发器在服务器中执行,服务器无法在任何人的屏幕上显示任何内容。它可以做的是写入缓冲区(使用 DBMS_OUTPUT),然后客户端程序可以获取并显示缓冲区的内容。你的客户程序是什么? SQL*Plus?
-
是的,我正在使用 sqlplus
-
在更新员工工资之前使用
SET SERVEROUT ON -
显示静态字符串的目的是什么?
-
在 SQL*Plus 中,在运行块后立即键入
show errors以查看编译错误。