即使尚未在表中插入触发器,也要如何使其“看到”某些默认值?

问题描述 投票:0回答:1

即使没有插入一个默认值,Oracle也会触发Oracle触发器以“查看”该列中的某些默认值吗?意思是,如果:old用于更新,而:new用于插入,在这种情况下,尽管我只想更新(:old)记录,但我需要“欺骗”触发器以相信已插入某些内容(:new)。

Oracle版本太新了,甚至欢迎异国情调的想法。如果需要达到此目的,它也可以是不同机制的组合。

oracle function triggers cursor procedure
1个回答
1
投票

不那么异国情调; 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>
© www.soinside.com 2019 - 2024. All rights reserved.