Database 使用光标遍历内部联接结果
我对oracle数据库存储过程非常陌生,所以如果我问的是非常简单或基本的问题,请原谅 我想遍历使用游标在过程中生成的内部联接结果集 我已经创建了一个过程,它有一个简单的SQL select查询连接两个表和两个表中的选择字段Database 使用光标遍历内部联接结果,database,oracle,stored-procedures,cursor,Database,Oracle,Stored Procedures,Cursor,我对oracle数据库存储过程非常陌生,所以如果我问的是非常简单或基本的问题,请原谅 我想遍历使用游标在过程中生成的内部联接结果集 我已经创建了一个过程,它有一个简单的SQL select查询连接两个表和两个表中的选择字段 CREATE OR REPLACE PROCEDURE demoprocedure(crsr out SYS_REFCURSOR) AS BEGIN OPEN crsr FOR SELECT TABLE1
CREATE OR REPLACE PROCEDURE demoprocedure(crsr out SYS_REFCURSOR)
AS
BEGIN
OPEN crsr FOR
SELECT
TABLE1.field1, TABLE2.field2, TABLE1.fields11, TABLE2.field22
FROM
TABLE1 INNER JOIN
TABLE2
ON
TABLE1.field12 = TABLE2.field12
END demoprocedure;
我想使用游标遍历这个结果集,下面是我尝试过的
DECLARE
crsr SYS_REFCURSOR;
temp SYS_REFCURSOR;
BEGIN
demoprocedure(crsr);
LOOP
FETCH crsr INTO temp;
EXIT WHEN crsr%NOTFOUND;
Dbms_Output.Put_Line('Fields1 is : ' || temp.field1);
END LOOP;
CLOSE crsr;
END;
但这不起作用,我尝试过创建自定义对象,但也出现了错误
预期结果:
Fields1 is : 1
Fields1 is : 2
Fields1 is : 3
问题在于temp变量的声明。您可以在局部变量中获取
SYS\u REFCURSOR
的内容,然后按如下方式显示:
程序:
测试它(通过它循环)
干杯 我对内部联接有问题,请再次检查问题,我已从表@tejashjoin中选择了字段。联接中的问题是什么?我看不出我需要定义任何类型resultset,因为您已经将temp定义为VARCHAR(10),因为您的查询正在返回VARCHAR(10),但是在我的示例中,我正在从两个不同的表返回4个字段,所以您能帮我如何做到这一点吗?好的,更新了答案。现在检查!!
SQL> CREATE OR REPLACE PROCEDURE DEMOPROCEDURE (
2 CRSR OUT SYS_REFCURSOR
3 ) AS
4 BEGIN
5 OPEN CRSR FOR SELECT
6 'ABC' AS COL1,
7 'BCD' AS COL2,
8 'CDE' AS COL3,
9 'DEF' AS COL4
10 FROM
11 DUAL;
12
13 END DEMOPROCEDURE;
14 /
Procedure created.
SQL> SET SERVEROUT ON;
SQL> DECLARE
2 CRSR SYS_REFCURSOR;
3 V_COL1 VARCHAR2(100);
4 V_COL2 VARCHAR2(100);
5 V_COL3 VARCHAR2(100);
6 V_COL4 VARCHAR2(100);
7 BEGIN
8 DEMOPROCEDURE(CRSR);
9 LOOP
10 FETCH CRSR INTO
11 V_COL1,
12 V_COL2,
13 V_COL3,
14 V_COL4;
15 EXIT WHEN CRSR%NOTFOUND;
16 DBMS_OUTPUT.PUT_LINE('Fields1 is : ' || V_COL1);
17 DBMS_OUTPUT.PUT_LINE('Fields2 is : ' || V_COL2);
18 DBMS_OUTPUT.PUT_LINE('Fields3 is : ' || V_COL3);
19 DBMS_OUTPUT.PUT_LINE('Fields4 is : ' || V_COL4);
20 END LOOP;
21
22 CLOSE CRSR;
23 END;
24 /
Fields1 is : ABC
Fields2 is : BCD
Fields3 is : CDE
Fields4 is : DEF
PL/SQL procedure successfully completed.
SQL>