2015-09-25 49 views
-1

我在我的pl/sql块中有三个游标。
游标a正在返回a1,a2,a3列,游标b正在返回b2,b2,b3列,游标c正在返回c1,c2,c3列。Oracle - 显示多个游标作为单个select语句输出

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 
------------------------------------------------------ 
+0

我猜你想要一个单一的游标,其查询连接三个表。 –

+0

游标'a'中的一列是'b'和'c'游标中'id'参数的值吗?游标“b”和“c”的'id'参数的值是否相同? – APC

回答

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,你将连接输出的方式与我在这个例子中的方式没有什么不同。