PL / SQL Update列基于从另一个表获得的列ID

时间:2016-07-08 18:46:48

标签: sql oracle plsql triggers

我的同事和我正在尝试在PL / SQL中编写一个数据库触发器,它可以查看映射表以查找另一个表中的特定列的ID(下面包含的示例表),然后更新该列中的值

我们需要能够以BEFORE EACH ROW触发器的方式执行此操作,以便在将数据提交到数据库之前对其进行修改。

我们最终写了一篇大规模的CASE声明来处理这个问题,但有没有人知道处理这种情况的更好方法呢?在我们的现实生活中,我们还有70列要查看,而不是8,如下例所示。

create table test_basis (
  id      number(22,0) not null,
  item_1  number(22,0) not null,
  item_2  number(22,0) not null,
  item_3  number(22,0) not null,
  item_4  number(22,0) not null,
  item_5  number(22,0) not null,
  item_6  number(22,0) not null,
  item_7  number(22,0) not null,
  item_8  number(22,0) not null
)

create table basis_mapping (
  column_id    number(22,0),
  column_name  varchar2(35)
)

insert into basis_mapping(1, 'Company');
insert into basis_mapping(2, 'Account');
insert into basis_mapping(3, 'Manager');
insert into basis_mapping(4, 'User');

出于我们的目的,我们需要根据column_name从basis_mapping中查找column_id,然后更新当前行中的:new.item _ ###字段。因此,如果我们想要更改“用户”列中的值,我们将运行以下语句

select column_id 
  into l_basis_id
  from basis_mapping 
  where column_name = 'User'

现在我们在l_basis_id变量中有4个,我们如何使用它来生成如下语句?

:new.item_4 = 0

1 个答案:

答案 0 :(得分:0)

不幸的是,您无法在动态SQL中引用:new:old。请查看Oracle PL/SQL: Loop Over Trigger Columns Dynamically