更新具有相同数据结构的多个(100+)表列值

时间:2015-05-14 06:05:15

标签: oracle

我是Oracle的新手。我有一些问题,如果你能解决我非常感谢你。

详情如下,

Database name:Paul

Schema: ddpaul

table: table_12_101, table_12_102, table_12_199,..........

这些表具有相同的数据结构。

列名:

ID, Number, Comp, Module, etc..

现在,我必须使用SQL / PROCEDURE更新/更改所有表中的“COMP”列。

在一列中同时从所有表中选择“COMP”的任何方法?

保存到Excel后,我将更改所需的值。

现在主要是,

我想根据旧的excel数据更新“COMP”。

Table_12_101,......

ID | COMP | MODULE

56623114 | FA-5920-01 | FA1 

56623110 | FA-5921-01 | FA1

e.g。 COMP更改为CA-5920-01或需要删除FA等。

请为上述任何人提供帮助。我将非常感谢你。

2 个答案:

答案 0 :(得分:0)

您可以通过查询找到包含此类列的表名:

SELECT table_name FROM USER_TAB_COLS where column_name = 'COMP';

并在程序中使用此名称来执行更新。

答案 1 :(得分:0)

响应:在一列中一次从所有表中选择“COMP”的任何方法?

下面的块将为您提供必须单独运行的动态查询。

AS它为您提供动态查询,您不必在查询中写入所有表名,它将自动生成它。

    declare
    after_from varchar2(10000) :=NULL;
    before_from varchar2(10000) :=NULL;
    final_query varchar2(20000) :=NULL;
    temp1 integer ;
    begin
    temp1 :=0;
    for x in ( SELECT table_name FROM USER_TAB_COLS where column_name = 'COMP') loop
    temp1 := temp1+1;
    before_from := before_from || ' t'||temp1||'.COMP||'',''||';
    after_from := after_from || x.table_name || ' t' ||temp1||' , ';
    end loop;
    before_from:=substr(before_from,1,length(before_from)-7);
    after_from:=substr(after_from,1,length(after_from)-3);
    final_query := 'SELECT '||before_from||' FROM '||after_from||';';
    dbms_output.put_line(final_query);
    end;
    /