我需要将不同数据库的内容与相同的表进行比较。他们中的一些人的行数很少,所以我虽然可以直观地比较他们的行列。
所以我试图以下列形式生成一个sql命令:
select * from [tablename] order by 1,2,etc
到目前为止,我已经:
select 'select * from ' || ut.table_name || ' order by ' ||
(select listagg(num,', ') within group(order by num) csv
from ( select rownum num
from dual
connect by level <= (select count(*) c
from user_tab_columns
where table_name = 'TABLE99')
))
from user_tables ut
where ut.table_name = 'TABLE99';
生成:
select * from TABLE99 order by 1, 2, 3, 4
我想加入table_name上的user_tables和user_tab_columns,这样我就可以为架构中的所有表生成它。不幸的是,简单地做table_name = ut.table_name并不起作用。
如何加入user_tables和user_tab_columns?
答案 0 :(得分:0)
请改用此查询。我将使用row_number()计算每个表的列数。希望这可以帮助。感谢。
select 'select * from ' || ut.table_name || ' order by ' ||
listagg(num,', ') within group(order by num) query
from (
select table_name,
row_number() over (partition by table_name order by col_name) as num
from user_tab_columns) t, user_tables ut
where ut.table_name=t.table_name
group by ut.table_name
order by ut.table_name
Result:
query
select * from TABLE99 order by 1, 2, 3, 4
select * from TABLE98 order by 1, 2