当前位置:  开发笔记 > 数据库 > 正文

在sql查询中动态查找表的列名

如何解决《在sql查询中动态查找表的列名》经验,为你挑选了1个好方法。

我正在编写SQL(对于Oracle),如:

INSERT INTO Schema1.tableA SELECT * FROM Schema2.tableA;

其中Schema1.tableA和Schema2.tableA具有相同的列.但是,似乎这是不安全的,因为SELECT中返回的列的顺序是未定义的.我应该做的是:

INSERT INTO Schema1.tableA (col1, col2, ... colN) 
SELECT (col1, col2, ... colN) FROM Schema2.tableA;

我正在使用一些脚本为很多表做这个,所以我想做的是写一些类似的东西:

INSERT INTO Schema1.tableA (foo(Schema1.tableA)) 
SELECT (foo(Schema1.tableA)) FROM Schema2.tableA;

其中foo是一些漂亮的魔术,它从表1中提取列名并以适当的语法打包它们.思考?



1> Tony Andrews..:

这个PL/SQL应该这样做:

declare
    l_cols long;
    l_sql  long;
begin
    for r in (select column_name from all_tab_columns
              where  table_name = 'TABLEA'
              and    owner = 'SCHEMA1'
             )
    loop
       l_cols := l_cols || ',' || r.column_name;
    end loop;

    -- Remove leading comma
    l_cols := substr(l_cols, 2);

    l_sql := 'insert into schema1.tableA (' || l_cols || ') select ' 
             || l_cols || ' from schema2.tableA';

    execute immediate l_sql;

end;
/

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有