簡體   English   中英

PL / SQL Update列基於從另一個表獲得的列ID

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM