Oracle - 显示多个游标输出为单个select语句

时间:2015-09-25 04:08:19

标签: oracle plsql

我的pl / sql块中有三个游标 光标a返回a1,a2,a3列,光标b返回b2,b2,b3列,光标c返回c1,c2,c3列。

DECLARE 
cursor a is
 select a1, a2,a3 
 from table_a;

cursor b(id number) is
 select b1, b2,b3
 from table_b 
 where table_b.id = id;

cursor c(id number) is
 select c1,c2,c3
 from table_c
where table_c.id = id;
BEGIN
--   
END;

我如何将输出作为

a1   a2    a3    b1    b2   b3    c1   c2    c3
------------------------------------------------------

1 个答案:

答案 0 :(得分:0)

检查下面的方案。

    create table table_a (id int, a1 varchar2(20), a2 varchar2(20), a3 varchar2(20));
    create table table_b (id int, b1 varchar2(20), b2 varchar2(20), b3 varchar2(20));
    create table table_c (id int, c1 varchar2(20), c2 varchar2(20), c3 varchar2(20));

    insert into table_a values (1, 'The', 'Quick', 'Brown');
    insert into table_b values (1, 'Fox', 'Jumped', 'Over');
    insert into table_c values (1, 'The', 'Lazy', 'Dog');

    DECLARE
    v_a table_a%ROWTYPE;
    v_b table_b%ROWTYPE;
    v_c table_c%ROWTYPE;
    CURSOR abc IS SELECT a.a1, a.a2, a.a3, b.b1, b.b2, b.b3, c.c1, c.c2, c.c3
                  FROM table_a a
                  JOIN table_b b on (a.id=b.id)
                  JOIN table_c c on (a.id=c.id);
    BEGIN
      OPEN abc;
      LOOP
        FETCH abc INTO v_a.a1, v_a.a2, v_a.a3, v_b.b1, v_b.b2, v_b.b3, v_c.c1, v_c.c2, v_c.c3;
        EXIT WHEN abc%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(v_a.a1||' '||v_a.a2||' '||v_a.a3||' '||v_b.b1||' '||
                             v_b.b2||' '||v_b.b3||' '||v_c.c1||' '||v_c.c2||' '|| v_c.c3);
      END LOOP;
    END;
    /

    The Quick Brown Fox Jumped Over The Lazy Dog

    PL/SQL procedure successfully completed.

    SQL> 

假设连接这三个表是可以的,因为您将值一起输出,这意味着它们之间存在某种关系。但是,这是一个猜测,因为你没有在你的问题中明确说明。

尽管如此,我的回答确实可以回答你的问题。即使你设置3个游标而不是1,你连接输出的方式与我在这个例子中的方式没有什么不同。