检查下面的场景。
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,你将连接输出的方式与我在这个例子中的方式没有什么不同。
我猜你想要一个单一的游标,其查询连接三个表。 –
游标'a'中的一列是'b'和'c'游标中'id'参数的值吗?游标“b”和“c”的'id'参数的值是否相同? – APC