FOR 循环更简单,不用定义和打开游标,直接使用 For example:DECLARE BEGIN FOR V_EMP_RECORD IN (SELECT * FROM tgp_funds) LOOP DBMS_OUTPUT.PUT_LINE(V_EMP_RECORD.FND_ID); END LOOP; END;
如果你想在FOR循环中使用游标变量,需要在DECLARE中定义,
DECLARE TYPE emp_cur IS REF CURSOR; v_emp_cur emp_cur; v_emp_record t_myemp%ROWTYPE; 这里不是定义了吗?
DECLARE TYPE emp_cur IS REF CURSOR; v_emp_cur emp_cur; v_emp_record t_myemp%ROWTYPE; 这里不是定义了吗? 我的意思是在定义的时候进行初始化,比如: CURSOR CR IS SELELCT * FROM TEST.还有一点是用FOR循环不需要再打开游标,
ref cursor是动态游标的关系、 假如声明变成declare CURSOR v_emp_cur is SELECT *FROM t_myemp; begin ... ...还有1楼的for的另一种方式,BEGIN FOR V_EMP_RECORD IN (SELECT * FROM tgp_funds) LOOP DBMS_OUTPUT.PUT_LINE(V_EMP_RECORD.FND_ID); END LOOP; END;这种方式是建立隐式游标!
DECLARE TYPE emp_cur IS REF CURSOR; v_emp_cur emp_cur; v_emp_record t_myemp%ROWTYPE; 这里不是定义了吗? 我的意思是在定义的时候进行初始化,比如: CURSOR CR IS SELELCT * FROM TEST.还有一点是用FOR循环不需要再打开游标, 能给出详细的格式吗? DECLARE TYPE emp_cur IS REF CURSOR; v_emp_cur emp_cur; v_emp_record t_myemp%ROWTYPE; CURSOR v_emp_cur IS SELECT *FROM t_myemp;这样的方式会报: PLS-00305: 'V_EMP_CUR' 的前一次使用 (在第 3 行) 与此次使用发生冲突
DECLARE TYPE emp_cur IS REF CURSOR; v_emp_cur emp_cur; v_emp_record t_myemp%ROWTYPE; 这里不是定义了吗? 我的意思是在定义的时候进行初始化,比如: CURSOR CR IS SELELCT * FROM TEST.还有一点是用FOR循环不需要再打开游标, 能给出详细的格式吗? DECLARE TYPE emp_cur IS REF CURSOR; v_emp_cur emp_cur; v_emp_record t_myemp%ROWTYPE; CURSOR v_emp_cur IS SELECT *FROM t_myemp;这样的方式会报: PLS-00305: 'V_EMP_CUR' 的前一次使用 (在第 3 行) 与此次使用发生冲突 CURSOR v_emp_cur IS SELECT *FROM t_myemp;这种方式其实就是定义一个V_EMP_CUR的游标。之所以报错其实是因为 v_emp_cur emp_cur又定义了一个游标,所以会报错,因为你定义了两个同名的游标
for c in (select ..) loop -- 用c.字段/别名 直接取得当前行的某字段/别名的值 end loop;c 不需要声明 游标不需要声明 不需要打开 不需要关闭这叫做隐式调用。
For example:DECLARE
BEGIN
FOR V_EMP_RECORD IN (SELECT * FROM tgp_funds) LOOP
DBMS_OUTPUT.PUT_LINE(V_EMP_RECORD.FND_ID);
END LOOP;
END;
TYPE emp_cur IS REF CURSOR;
v_emp_cur emp_cur;
v_emp_record t_myemp%ROWTYPE;
这里不是定义了吗?
TYPE emp_cur IS REF CURSOR;
v_emp_cur emp_cur;
v_emp_record t_myemp%ROWTYPE;
这里不是定义了吗?
我的意思是在定义的时候进行初始化,比如:
CURSOR CR IS SELELCT * FROM TEST.还有一点是用FOR循环不需要再打开游标,
假如声明变成declare
CURSOR v_emp_cur is SELECT *FROM t_myemp;
begin
...
...还有1楼的for的另一种方式,BEGIN
FOR V_EMP_RECORD IN (SELECT * FROM tgp_funds) LOOP
DBMS_OUTPUT.PUT_LINE(V_EMP_RECORD.FND_ID);
END LOOP;
END;这种方式是建立隐式游标!
TYPE emp_cur IS REF CURSOR;
v_emp_cur emp_cur;
v_emp_record t_myemp%ROWTYPE;
这里不是定义了吗?
我的意思是在定义的时候进行初始化,比如:
CURSOR CR IS SELELCT * FROM TEST.还有一点是用FOR循环不需要再打开游标,
能给出详细的格式吗?
DECLARE
TYPE emp_cur IS REF CURSOR;
v_emp_cur emp_cur;
v_emp_record t_myemp%ROWTYPE;
CURSOR v_emp_cur IS SELECT *FROM t_myemp;这样的方式会报:
PLS-00305: 'V_EMP_CUR' 的前一次使用 (在第 3 行) 与此次使用发生冲突
TYPE emp_cur IS REF CURSOR;
v_emp_cur emp_cur;
v_emp_record t_myemp%ROWTYPE;
这里不是定义了吗?
我的意思是在定义的时候进行初始化,比如:
CURSOR CR IS SELELCT * FROM TEST.还有一点是用FOR循环不需要再打开游标,
能给出详细的格式吗?
DECLARE
TYPE emp_cur IS REF CURSOR;
v_emp_cur emp_cur;
v_emp_record t_myemp%ROWTYPE;
CURSOR v_emp_cur IS SELECT *FROM t_myemp;这样的方式会报:
PLS-00305: 'V_EMP_CUR' 的前一次使用 (在第 3 行) 与此次使用发生冲突
CURSOR v_emp_cur IS SELECT *FROM t_myemp;这种方式其实就是定义一个V_EMP_CUR的游标。之所以报错其实是因为 v_emp_cur emp_cur又定义了一个游标,所以会报错,因为你定义了两个同名的游标
-- 用c.字段/别名 直接取得当前行的某字段/别名的值
end loop;c 不需要声明 游标不需要声明 不需要打开 不需要关闭这叫做隐式调用。