繁体   English   中英

如何使用FOR LOOP查询Oracle SQL并返回表?

[英]How to query Oracle SQL using FOR LOOP and get table returned?

我们公司正在使用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
...

如果我正确理解您的需求,也许可以帮助您:

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;
/

考虑到可能有些用户没有ITEM_TABLE表,我删除了all_users,例如SYS 这样,您仅查询真正存在的表。

第一部分通过连接来自不同用户的查询来动态构建所需的查询。 在第二部分中,您将从所有表中提取数据,因此您可以执行所需的任何操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM