我们公司正在使用Oracle 11g(11.2.0.5.0)
我正在寻找一种执行外部查询的方法(在这个从PHP网站调用的特定示例中),它将FOR LOOP通过数据集并以表格的形式返回结果(就像普通的SELECT一样)
USERS
表:
DB1
DB2
DB3
...
DBO
每个用户的架构都包含ITEM
表:
ID CODE TYPE
--------------------
1 0001 A
2 0043 A
3 00A5 V
...
我想执行一个循环遍历所有USERS
并从ITEM
表中获取数据的查询,这些都是我不能正常工作的内容
FOR user IN (SELECT * FROM all_users)
LOOP
SELECT CODE, user FROM user.ITEM_TABLE WHERE TYPE = 'V'
END LOOP;
那将返回
CODE USER
-------------
00A5 DB1
0434 DB2
0999 DB2
...
答案 0 :(得分:0)
如果我正确理解您的需要,也许这可以提供帮助:
declare
type tabUser is table of varchar2(30);
type tabCode is table of varchar2(30);
vTabCode tabCode;
vTabUser tabUser;
vSQL varchar2(32767);
begin
select listagg('select code, ''' || owner || ''' from ' || owner || '.item_table where type = ''V''', ' UNION ALL ')
within group (order by owner)
into vSQL
from dba_tables where table_name = 'ITEM_TABLE';
--
dbms_output.put_line(vSQL);
--
execute immediate vSQl bulk collect into vTabCode, vTabUser;
--
/* ... what you need to do with your data */
end;
/
我删除了all_users,因为可能有用户没有ITEM_TABLE
表,例如SYS
;通过这种方式,您只需查询真正存在的表。
第一部分通过连接来自不同用户的查询来动态构建所需的查询;在第二部分中,您可以从所有表中提取数据,这样您就可以做任何您需要的事情。