【发布时间】:2014-04-04 14:54:49
【问题描述】:
首先,让我先说一下下面的代码对于所讨论的输出来说不一定是一个好的选择,但这不是现实生活中的情况,它只是一个学校练习。
我应该创建一个触发器,当emp_id 和salary 超过100,000 时输出它。触发器创建时没有错误但没有打印任何内容(即 DBMS_OUTPUT),这让我认为触发器的条件设置不正确,但我看不出问题出在哪里。
我正在使用 SQLPLUS。
这是桌子:
Name Null? Type
----------------------------------------- -------- -------------
EMP_ID NOT NULL NUMBER(10)
FNAME NVARCHAR2(20)
LNAME NVARCHAR2(20)
MANAGER_EMP_ID NUMBER(10)
SALARY NUMBER(38)
这是我的触发器:
CREATE OR REPLACE TRIGGER check_salary
AFTER INSERT OR UPDATE OF SALARY ON EMPLOYEE
FOR EACH ROW
WHEN (NEW.SALARY > 100000)
BEGIN
DBMS_OUTPUT.PUT('Salary value for ' || :OLD.EMP_ID || ' IS ' || :NEW.SALARY);
END;
/
这是我正在使用的插入,它不会关闭触发器:
INSERT INTO EMPLOYEE(FNAME,LNAME,SALARY) VALUES ('Mary','Jane',100001);
(OBS:EMP_ID 正在被上一个练习中的另一个触发器自动插入)。
该行已成功添加,但是没有 DBMS_OUTPUT。
谢谢。
【问题讨论】:
-
似乎命令行中有一些错误阻止了 DBMS_OUTPUT 工作(即使在
SET SERVEROUTPUT ON之后)。在 Oracle Web 界面中运行此代码时,会有一个输出。我必须修复它以获得正确的输出,但有一个。