DBMS_OUTPUT.PUT_LINE не показывает сообщение пользователю - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь создать триггер, который проверил бы нулевое значение в столбце namesdreservation_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
/

Значение изменяется на «не зарезервировано», если оно пустое, но сообщение «статус резервирования недействителен, установлен по умолчанию» не отображается. Помощь.

1 Ответ

2 голосов
/ 07 ноября 2019

Триггеры ничего не делают, пока они на самом деле не сработают - в данном случае на 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 -

enter image description here

И если мы проверим таблицу, вы увидите наш триггер «сработало».

enter image description here

...