我想做一个INSERT/SELECT,这意味着在TARGET_TABLE中插入SOURCE_TABLE的记录,并假设:
SOURCE和TARGET表只有一个公共列的SUBSET,这意味着在示例中:
==> SOURCE TABLE有ALPHA,BETA和GAMMA列;
==> TARGET TABLE有BETA,GAMMA和DELTA列.
生成INSERT/SELECT语句的最有效方法是什么,尊重源表中不存在所有目标列的假设?
这个想法是,PL/SQL脚本检查列在源表和目标表,使得交集,然后产生具有列的正确的列表动态SQL.
请假设目标表中存在但不存在于源表中的列必须保留为NULL.
我希望将SOURCE中的数据提取到一组INSERT语句中,以便以后插入到TARGET表中.
你可以假设目标表具有比源表中的列多,并且,在源表中的所有列都存在于相同的顺序目标表.
提前感谢您的有用建议!
在Oracle中,您可以使用此SQL查询获取公共列:
select column_name
from user_tab_columns
where table_name = 'TABLE_1'
intersect
select column_name
from user_tab_columns
where table_name = 'TABLE_2'
Run Code Online (Sandbox Code Playgroud)
然后使用上述查询迭代游标,以生成以逗号分隔的所有返回值的列表.将逗号分隔的字符串放入varchar2名为的变量中common_fields.然后你可以:
sql_sentence := 'insert into TABLE_1 (' ||
common_fields ||
') select ' ||
common_fields ||
' from TABLE_2';
execute immediate sql_sentence;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1955 次 |
| 最近记录: |