我们有一个api操作,它将report_type=5的行输入到表中,是否有某种操作可以应用到表中以使其无论何时输入或提取记录对于report_id=12,它将report_type返回为4?
如前所述,触发器即可。下面是一个示例。
样品表:
SQL> create table test
2 (report_id number,
3 report_type number);
Table created.
触发器:
SQL> create or replace trigger trg_bi_test
2 before insert on test
3 for each row
4 when (new.report_id = 12)
5 begin
6 :new.report_type := 4;
7 end;
8 /
Trigger created.
测试:
SQL> insert into test (report_id, report_type) values (1, 13);
1 row created.
SQL> insert into test (report_id, report_type) values (12, 99);
1 row created.
SQL> select * from test;
REPORT_ID REPORT_TYPE
---------- -----------
1 13
12 4 --> I inserted report_type = 99, but trigger modified it to 4
--> because report_id = 12
SQL>
不清楚要在数据库中存储哪个值:12(按输入(或4(按翻译(。
另一位评论者提出的触发器肯定能够在插入或更新时转换值。
如果希望存储原始值,则需要设置一个不同的列,该列是基于原始值派生的。从Oracle出版物中摘录的一个例子:
create table PERSON (
(employee_id integer,
employee_id_disp computed by
SUBSTRING (CAST(employee_id + 100000 as VARCHAR (6)) from 2)
);
在你的情况下,你可能会做一些类似的事情
create table MYTABLE (
somekey varchar(20) not null,
entered_office int,
display_office computed by decode(entered_office,12,4,entered_office)
);
然后,任何需要显示办公室号码的内容都需要使用display_office字段,而不是输入的字段。任何插入到表中的工具都需要插入entered_office字段,因为display_office是不可更新的。