/************************************************ 我与游标
/************************************************ 使用显式游标
定义游标DECLARE CURSOR cursor_name IS select_statement;
打开游标OPEN OPEN cursor_name
提取游标FETCH FETCH cursor_name INTO variable1,variable2,...;
关闭游标CLOSE CLOSE cursor_name;
显式游标属性 %ISOPEN判断是否已经打开 打开TRUE %FOUND是否从结果集中提取到了数据 提取到TRUE %NOTFOUND是否从结果集中提取到了数据 没有提取到TRUE %ROWCOUNT返回到当前行为止已经提取到的实际行数
参数游标
以实现使用不同参数值多次打开游标时,可以生成不同的结果集 CURSOR cursor_name(parameter_name datatype) IS select_statement;
使用游标更新/删除数据 CURSOR cursor_name(parameter_name datatype) IS select_statement FOR UPDATE [OF column_reference] [NOWAIT];
FOR UPDATE用于在结果集数据上加行共享锁,以防止其他用户再次行执行DML操作 OF确定那些表要加锁 NOWAIT指定执行时不等待锁,如果其他会话已经在被作用行上加锁,则当前会话显示错误提示
UPDATE table_name SET column=.. WHERE CURRENT OF cursor_name; DELETE table_name WHERE CURRENT OF cursor_name;
游标循环
Oracle会隐含地打开游标,提取游标并关闭游标 FOR record_name IN cursor_name LOOP statement1; statement2; ... END LOOP;
如果循环时不需要使用任何游标属性,则可直接使用子查询 FOR record_name IN (select_statement) LOOP statement1; statement2; ... END LOOP;
使用游标变量
定义REF CURSOR类型和游标变量 TYPE ref_type_name IS REF CURSOR [RETURN return_type]; cursor_variable ref_type_name;
打开游标 OPEN cursor_variable FOR select_statement;
提取游标数据 FETCH cursor_variable INTO variable1,variable2,...;
关闭游标CLOSE CLOSE cursor_variable 
|