嗨 甲骨文【2】

发表于:2007-05-25来源:作者:点击数: 标签:甲骨文我与显式游标定义
/************************************************ 我与游标 /************************************************ 使用显式游标 定义游标DECLARE CURSOR cursor_name IS select_statement; 打开游标OPEN OPEN cursor_name 提取游标FETCH FETCH cursor_name

/************************************************
我与游标

/************************************************
使用显式游标

定义游标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

原文转自:http://www.ltesting.net