【问题标题】:DBMS_OUTPUT.PUT_LINE not showing message to userDBMS_OUTPUT.PUT_LINE 未向用户显示消息
【发布时间】:2020-03-04 01:55:19
【问题描述】:

我正在尝试创建一个触发器,该触发器将从我的表乘客中检查列名 dreservation_status 中的空值,如果它为空,则将其设置为默认值,并向用户显示将其设置为默认值的消息。

触发器已创建并可以正常设置默认值,但不会向用户显示任何消息。

create or replace trigger mytrigger
    before insert or update on passenger
    for each row
    when (new.reservation_status IS NULL)
begin
    IF :new.reservation_status IS NULL THEN
        :new.reservation_status := 'not reserved';
        dbms_output.put_line('reservation status invalid, set to default');
    end IF;
end mytrigger
/

如果值为空,则该值将更改为“未保留”,但未显示“保留状态无效,设置为默认值”消息。帮助。

【问题讨论】:

  • 你是从 sqlplus 运行的吗?你需要执行“set serveroutput on”
  • 是的,我正在使用 sqlplus。我确实将 serveroutput 设置为在触发器之外它没有做任何事情。

标签: oracle plsql sqlplus dbms-output


【解决方案1】:

在实际触发之前,触发器不会执行任何操作 - 在本例中,是在 INSERT 上。

clear screen
set serveroutput on

drop table passenger;
create table passenger (id integer, reservation_status varchar2(25));

create or replace trigger mytrigger
    before insert or update on passenger
    for each row
    when (new.reservation_status IS NULL)
begin
    IF :new.reservation_status IS NULL THEN
        :new.reservation_status := 'not reserved';
        dbms_output.put_line('reservation status invalid, set to default');
    end IF;
end mytrigger;
/

insert into passenger values (1, null);
commit;

如果我在 SQLPlus、SQLcl 或 SQL Developer 中运行它 -

如果我们检查表格,您可以看到我们的触发器“工作”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 2015-10-15
    • 2013-05-22
    • 2011-08-10
    • 2012-01-20
    • 2019-02-16
    相关资源
    最近更新 更多