动态行到列更新

时间:2012-07-14 07:13:47

标签: oracle

我有一个存储元数据信息的表A(column_name,value)。
我有另一个表B,其中列为A行,带有一些额外的系统列。
例如,如果表A有两行(empID,1)(salary,200),则表B看起来像B(empid,salary,system_id,create_date,update_date)
我需要pl / sql程序,它将更新B并将empid设置为1并将salary设置为200. A中的行和B中的行可以动态更改。

1 个答案:

答案 0 :(得分: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子句相关联。