将带有2个表的游标放在Oracle PL / SQL中的变量中

时间:2014-03-21 21:49:22

标签: oracle plsql

我还是oracle pl / sql的新手,所以请耐心等待。如何将带有2个表的游标放在变量rowtype中?是否可以在单个变量中放置2个表行类型?

PROCEDURE testproc IS
l_var  table1%ROWTYPE;

CURSOR cur1 IS
Select *
From table1, table2
where table1.id = table2.id;

BEGIN

OPEN cur1;
LOOP
FETCH cur1 INTO l_var;  

3 个答案:

答案 0 :(得分:1)

您的l_var应来自cur1行类型:

PROCEDURE testproc IS

CURSOR cur1 IS
select *
from table1, table2
where table1.id = table2.id;

l_var  cur1%ROWTYPE;

BEGIN

OPEN cur1;
LOOP
FETCH cur1 INTO l_var;  

答案 1 :(得分:1)

PROCEDURE testproc IS

CURSOR cur1 IS
SELECT table1.field1, table1.field2, table2.field1, table2.field2
FROM table1
INNER JOIN table2 on table1.id = table2.id;

l_var cur1%ROWTYPE;

BEGIN

OPEN cur1
WHILE cur1%ISOPEN LOOP
FETCH cur1 INTO l_var

etc.

答案 2 :(得分:0)

因为有两个ID列(一个来自TABLE1,一个来自TABLE2),你不能在这个游标中使用SELECT *...或者你会得到类似

的内容
ORA-06550: line 7, column 9: PLS-00402: alias required in SELECT list of
                             cursor to avoid duplicate column names

(至少在Oracle 11.2中)。

尝试以下方法:

PROCEDURE testproc IS
  CURSOR cur1 IS
    Select t1.ID, t1.COLx, t2.COLy
      From table1 t1,
           table2 t2
      where table1.id = table2.id;

  l_var  cur1%ROWTYPE;
BEGIN
  OPEN cur1;

  LOOP
    FETCH cur1 INTO l_var; 
    EXIT WHEN cur1%NOTFOUND;

    DBMS_OUTPUT.PUT_LINE('ID=' || l_var.ID ||
                         'COLx=' || l_var.COLx ||
                         'COLy=' || l_var.COLy);
  END LOOP;

  CLOSE cur1;
END testproc;

我在游标SELECT列表中包含了列COLxCOLy,因为我不知道你的表实际上有哪些列 - 用任何有意义的列替换它们。

分享并享受。