DECLARE
c SYS_REFCURSOR;
lv_emp emp%ROWTYPE;
BEGIN
OPEN c FOR SELECT employee_id FROM emp;
--fetch c into lv_emp;
DBMS_OUTPUT.put_line (c.emloyee_id);
END;
第7行出现错误: ORA-06550:第7行,第24列: PLS-00487:对变量'C'的无效引用 ORA-06550:第7行,第1列: 声明被忽略
答案 0 :(得分:0)
如果目标是列出所有employee_id,则可以使用REFCURSOR
,如以下匿名块中所述。
VARIABLE c REFCURSOR
DECLARE
BEGIN
OPEN :c FOR SELECT empno FROM scott.emp;
END;
/
PRINT c;
SYS_REFCURSOR在一个匿名块中
DECLARE
c_cursor SYS_REFCURSOR;
l_row scott.emp%ROWTYPE;
BEGIN
OPEN c_cursor FOR SELECT * FROM scott.emp;
LOOP
FETCH c_cursor INTO l_row;
EXIT WHEN c_cursor%NOTFOUND;
DBMS_OUTPUT.put_line (l_row.empno || ' : ' || l_row.ename);
END LOOP;
CLOSE c_cursor;
END;
/
在过程中使用SYS_REFCURSOR
过程创建
CREATE OR REPLACE PROCEDURE test_proc_cursor (c OUT SYS_REFCURSOR)
AS
BEGIN
OPEN c FOR SELECT empno FROM scott.emp;
END test_proc_cursor;
/
执行上述过程
DECLARE
cur SYS_REFCURSOR;
p_empno VARCHAR2 (50);
BEGIN
test_proc_cursor (c => cur);
LOOP
FETCH cur INTO p_empno;
EXIT WHEN cur%NOTFOUND;
DBMS_OUTPUT.put_line ('empno -->' || p_empno);
END LOOP;
CLOSE cur;
END;
/