游标变量可以使用游标FOR循环处理数据吗? --游标变量使用普通for循环输出
SET SERVEROUTPUT ON
DECLARE
TYPE emp_cur IS REF CURSOR;
v_emp_cur emp_cur;
v_emp_record t_myemp%ROWTYPE;
BEGIN
IF NOT v_emp_cur%ISOPEN THEN
OPEN v_emp_cur FOR SELECT *FROM t_myemp;
END IF;
DBMS_OUTPUT.PUT_LINE('员工ID 姓名 职位 上级ID 生日 工资 奖金 部门ID');
LOOP
FETCH v_emp_cur INTO v_emp_record;
EXIT WHEN v_emp_cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_emp_record.empno||' '||v_emp_record.ename||' '||v_emp_record.job||' '||v_emp_record.mgr
||' '||v_emp_record.hiredate||' '||v_emp_record.sal||' '||v_emp_record.comm||' '||v_emp_record.deptno);
END LOOP;
CLOSE v_emp_cur;
END;
/
--这里没有问题,但是如果用游标for循环的话:
SET SERVEROUTPUT ON
DECLARE
TYPE emp_cur IS REF CURSOR;
v_emp_cur emp_cur;
v_emp_record t_myemp%ROWTYPE;
BEGIN
IF NOT v_emp_cur%ISOPEN THEN
OPEN v_emp_cur FOR SELECT *FROM t_myemp;
END IF;
DBMS_OUTPUT.PUT_LINE('员工ID 姓名 职位 上级ID 生日 工资 奖金 部门ID');
FOR v_emp_record IN v_emp_cur LOOP
DBMS_OUTPUT.PUT_LINE(v_emp_record.empno||" "||v_emp_record.ename||" "||v_emp_record.job||" "||v_emp_record.mgr
||" "||v_emp_record.hiredate||" "||v_emp_record.sal||" "||v_emp_record.comm||" "||v_emp_record.deptno);
END LOOP;
END;
/
就会报错: ORA-06550: 第 10 行, 第 23 列:
PLS-00221: 'V_EMP_CUR' 不是过程或尚未定义
ORA-06550: 第 10 行, 第 3 列:
PL/SQL: Statement ignored