2012-07-14 50 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子句建立关联。