我还是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;
答案 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列表中包含了列COLx
和COLy
,因为我不知道你的表实际上有哪些列 - 用任何有意义的列替换它们。
分享并享受。