我试图从一组表中选择信息。最初,我有
SELECT table_name,
to_number(
extractvalue(
xmltype(
dbms_xmlgen.getxml('select count(*) c '|| ' from ' ||owner||'.'||table_name))
,'/ROWSET/ROW/C')) count
from all_tables
where table_name like 'PAY0%' OR table_name like 'PAY1%'
然后使用
循环遍历代码中的所有表 foreach(table_name in tables){
SELECT CUST_NUMBER
FROM #table_name#
}
现在我尝试通过执行以下操作将两者结合起来,以便从每个表中获取cust_number,但它会说'" CUST_NUMBER":无效的标识符& #39;
select CUST_NUMBER
from ( SELECT table_name,
to_number(
extractvalue(
xmltype(
dbms_xmlgen.getxml('select count(*) c '|| ' from ' ||owner||'.'||table_name))
,'/ROWSET/ROW/C')) count
from all_tables
where table_name like 'PAY0%' OR table_name like 'PAY1%') PayTables
我知道问题是第一个查询获取表名而不是数据,但我不知道如何在不单独循环的情况下获取数据。
答案 0 :(得分:2)
如果我正确理解您的需求,以下内容可能有所帮助:
declare
vSQL varchar2(32767);
type tabNum is table of number;
vResult tabNum;
begin
select listagg( 'select cust_number from ' || owner || '.' || table_name,
' UNION ALL '
) within group ( order by null)
into vSQL
from dba_tables
where table_name like 'PAY0%' OR table_name like 'PAY1%';
--
dbms_output.put_line(vSQL);
--
execute immediate vSQL bulk collect into vResult;
--
for i in vResult.first .. vResult.last loop
dbms_output.put_line(vResult(i));
end loop;
end;
它动态构建一个SQL语句,从所有符合条件的表中提取值;在示例中,我运行语句将结果提取到结构中,但您可以打开游标,或者做任何您需要的操作。