2012-07-14 115 views
0

我有一個存儲元數據信息的表A(column_name,value)。
我有另一個表B,它有列作爲行A和一些額外的系統列。
例如,如果表A有兩行(empID,1)(salary,200),則表B將看起來像B(empid,salary,system_id,create_date,update_date)
我需要更新B並將empid設置爲1並將薪水設置爲200的pl/sql過程.A中的行和B中的列可以動態更改。動態行到列更新

+1

您是否可以提供_actual_表結構,因爲這聽起來像是讓它變得比應該更復雜。動態更新的東西通常表示設計不好,因爲它不應該是必須的。數據庫在設計上相當靜態。 – Ben 2012-07-14 09:05:44

回答

1

獲取從表A柱和值的列表,建立並執行一個語句直接:

declare 
cols varchar2(2000); 
begin 
for a in (select * from a) loop 
    cols := ','||a.column_name||'='||a.value||cols; 
end loop; 
cols:=substr(cols,2); 
execute immediate 'update b set '||cols; 
end; 
/

爲例見http://www.sqlfiddle.com/#!4/f6976/8

但我想知道你將如何使用你當前的數據庫結構來構建where子句。目前,您無法將表A中的行與表B的where子句建立關聯。