-- 声明游标;CURSOR cursor_name IS select_statement --For 循环游标 --(1)定义游标 --(2)定义游标变量 --(3)使用for循环来使用这个游标 declare --类型定义 cursor c_job is select empno,ename,job,sal from emp where job=‘MANAGER‘; --定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型 c_row c_job%rowtype; begin for c_row in c_job loop dbms_output.put_line(c_row.empno||‘-‘||c_row.ename||‘-‘||c_row.job||‘-‘||c_row.sal); end loop; end;
实际工作中的例子:
declare v_temp NUMBER; --定义变量 v_part_id VARCHAR2(20); --定义变量 cursor c_job --定义游标 is SELECT DEPT_ID,DEPT_CODE,DEPT_TYPE from PUB_DEPART_INFO ORDER BY DEPT_ID; c_row c_job%rowtype; --定义变量c_row,类型为游标c_job中的一行数据 begin open c_job; --打开游标 loop --开始循环 fetch c_job into c_row; --读取一行数据 exit when c_job%notfound; --数据为空时退出(即:循环完成时) if c_row.DEPT_CODE is NULL then --字段数据的调用方式c_row.DEPT_CODE,其中DEPT_CODE为数据库中的列名 IF c_row.DEPT_TYPE = 1 then v_temp := 0; select Max(DEPT_CODE)+1 into v_part_id from PUB_DEPART_INFO WHERE DEPT_TYPE = ‘1‘; update PUB_DEPART_INFO set DEPT_CODE = v_part_id where DEPT_ID = c_row.DEPT_ID; ELSE v_temp := v_temp + 1; IF v_temp < 10 THEN update PUB_DEPART_INFO set DEPT_CODE = (v_part_id || ‘0000‘ || v_temp) where DEPT_ID = c_row.DEPT_ID; ELSE update PUB_DEPART_INFO set DEPT_CODE = (v_part_id || ‘000‘ || v_temp) where DEPT_ID = c_row.DEPT_ID; END IF; END IF; end if; end loop; --结束循环 close c_job; --关闭游标 end;
时间: 2024-10-10 10:00:53