【问题标题】:Trigger to output value based on condition not working根据条件触发输出值不工作
【发布时间】: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 界面中运行此代码时,会有一个输出。我必须修复它以获得正确的输出,但有一个。

标签: sql triggers sqlplus


【解决方案1】:

毕竟我检测到我的代码有什么问题。看来DBMS_OUTPUT.PUT()不够打印,我需要DBMS_OUTPUT.PUT_LINE()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 2023-03-17
    • 1970-01-01
    • 2019-06-11
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多