Как сделать триггер, чтобы «увидеть» какое-то значение по умолчанию, даже если оно еще не вставлено в таблицу? - PullRequest
0 голосов
/ 07 октября 2019

Возможно ли и как сделать, чтобы триггер Oracle «увидел» какое-то значение по умолчанию в столбце, даже если оно еще не вставлено? Значит, если: old для обновления и: new для вставки, и в этом случае мне нужно «обмануть» триггер, чтобы поверить, что что-то было вставлено (: new), хотя я просто хочу обновить (: old) запись.

Версия Oracle настолько новая, что приветствуются даже экзотические идеи. Также это может быть комбинация другого механизма, если это необходимо для достижения этого.

1 Ответ

1 голос
/ 07 октября 2019

Не так экзотично;user_tab_columns - это то, что вы можете использовать.

SQL> create table car
  2    (name  varchar2(20),
  3     color varchar2(10) default 'RED');

Table created.

SQL> select data_default
  2  from user_tab_columns
  3  where table_name = 'CAR'
  4    and column_name = 'COLOR';

DATA_DEFAULT
--------------------------------------------------------
'RED'

SQL> create or replace trigger trg_biu_car
  2    before insert or update on car
  3    for each row
  4  declare
  5    l_def_color car.color%type;
  6  begin
  7    select data_default
  8      into l_def_color
  9      from user_tab_columns
 10      where table_name = 'CAR'
 11        and column_name = 'COLOR';
 12
 13    -- your code now goes here
 14  end;
 15  /

Trigger created.

SQL>
...