如何一次在不同的方案上运行查询

时间:2019-04-20 04:17:34

标签: oracle plsql

我想对不同的方案运行查询以获取数据并将其导出。我使用以下代码

DECLARE
  sql_statment VARCHAR2(2000);
BEGIN
  FOR c IN (SELECT brchcode FROM brchs) LOOP
    sql_statment := 'select distinct ''' || c.brchcode ||''', t.risuid from ' || c.brchcode ||
                    '.reg_individualacnt_detail t
                      where t.historytypecode = 60';

    EXECUTE IMMEDIATE sql_statment;
  END LOOP;
END;

其中brchcode是不同方案的名称

我看不到任何输出。我该怎么办?

1 个答案:

答案 0 :(得分:5)

您编写的代码无法正常工作,因为您必须将结果返回到某物;它是PL / SQL,并且需要INTO子句。当您选择返回两个值(列)和多行时,这不能是标量变量;例如,您可以选择ref游标或集合。

下面是显示一个选项的示例。

我将使用两种模式:SCOTT(当前模式)和HR。两者都将有DEPT表。

正如Scott所拥有的那样,我将在HR模式中创建一个,并授予对Scott的访问权限(否则,Scott甚至都不会看到它,并且过程(即 function )将失败) :

SQL> connect hr/hr
Connected.
SQL> create table dept (deptno number, dname varchar2(10), loc varchar2(10));

Table created.

SQL> insert into dept values (55, 'IT', 'Zagreb');

1 row created.

SQL> grant select on dept to scott;

Grant succeeded.

SQL> commit;

Commit complete.

返回Scott,创建一个表(其中包含我将从中选择的架构名称)和一个函数。我选择返回REF CURSOR;如果需要,您可以退还其他东西。

SQL> connect scott/tiger
Connected.
SQL> create table brchs (brchcode varchar2(10));

Table created.

SQL> insert into brchs (brchcode)
  2    select 'scott' from dual union all
  3    select 'hr'    from dual;

2 rows created.
SQL> create or replace function f_br
  2    return sys_refcursor
  3  is
  4    l_str varchar2(4000);
  5    l_rc  sys_refcursor;
  6  begin
  7    for cur_r in (select brchcode from brchs) loop
  8      l_str := l_str ||
  9        'union all
 10         select ' || chr(39)|| cur_r.brchcode ||chr(39) || ', d.dname
 11         from ' || cur_r.brchcode ||'.dept d
 12         where d.deptno > 0';
 13    end loop;
 14
 15    l_str := ltrim(l_str, 'union all');
 16
 17    open l_rc for l_str;
 18    return l_rc;
 19  end;
 20  /

Function created.

SQL>

最后,测试:

SQL> select f_br from dual;

F_BR
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

'SCOT DNAME
----- --------------
scott ACCOUNTING
scott RESEARCH
scott SALES
scott OPERATIONS
hr    IT


SQL>