![](/img/trans.png)
[英]update a column in a sql table with a value from another table based on a relationship
[英]PL/SQL Update column based on column ID obtained from another table
我的同事和我正在嘗試在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
不幸的是,你不能在動態SQL中引用:new
和:old
。 請查看Oracle PL / SQL:動態循環觸發列 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.