现在的位置: 首页 > 综合 > 正文

嗨 甲骨文【2】

2013年09月08日 ⁄ 综合 ⁄ 共 1390字 ⁄ 字号 评论关闭

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

大四的时候,我要开始找工作了。挤在人群拥挤的人才市场,我满怀热情地走近一个招VB程序员的公司。一个大叔不冷不热地问,做过项目吗?“没有,但我的VB成绩不错,希望您能给我一次机会,我想尝试一下…”做过数据库吗?“嗯,做过。”知道什么是游标吗?“……”我们需要有经验的程序员……
就是如此,世界只会相信有实力的人。那个时候会的太少,没有得到机会也就正常。所以,要学无止境,让自己强大起来。弱国无外交。

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

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

抱歉!评论已关闭.