- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第19次课Oracle学习教程_游标
什么是游标 oracle 数据库中执行的每个SQL 语句都有对应的单独的游标 两种类型: 隐式游标:所有的DML语句和PL/SQL SELECT 语句都有 显式游标:由开发人员声明和控制 显式游标的使用 可以用于暂存查询取出的多行结果 按行处理查询返回的多行结果 在PL/SQL块中通过循环手动控制游标 显式游标属性 属性 类型 描述 %ISOPEN Boolean 如果游标打开,则为TRUE %NOTFOUND Boolean 如果最近的提取没有返回一条记录,则为TRUE %FOUND Boolean 一直为TRUE ,直到最近提取没有取回行记录 %ROWCOUNT Number 到目前为止,提取的总行数 控制显式游标 控制显式游标 声明游标 DECLARE CURSOR cursor_name IS select_statement; 在游标声明中,不要包含INTO 子句。 声明游标 取得一个部门员工的信息: 打开游标 打开游标将执行查询和取出结果集 OPEN cursor_name; 不论查询有没有返回记录,都不会引起异常 在一次取操作后,通过使用游标属性进行测试游标状态 从游标获取数据 检索当前记录的值到输出变量中。 FETCH cursor_name INTO variable1, variable2,... ; 变量应该与游标字段个数相同 变量与字段顺序也应该一一对应 测试判断游标是否还包含更多的数据行 从游标获取数据 逐行取得某个部门的员工信息: FETCH emp_cursor INTO v_name, v_sal; 关闭游标 在对查询到的所有记录的处理完成后,关闭游标 CLOSE cursor_name; 如果需要,必须重新打开游标 一旦游标已经关闭,不能再提取数据 控制多行提取 使用循环从一个显式游标中取出多行数据 每次重复,取出一行数据 通过使用%NOTFOUND属性,判断上一次的取操作是否成功取到数据 也可以通过%FOUND属性来控制循环取操作 %ISOPEN 属性 只有在游标打开时,才能从游标中取数据 在执行提取操作前,可以使用%ISOPEN 游标属性测试游标是否已打开 IF emp_cursor%ISOPEN THEN FETCH emp_cursor INTO v_name, v_sal; ELSE OPEN emp_cursor; END IF; %NOTFOUND 和%ROWCOUNT 属性 使用%ROWCOUNT 游标属性,准确获取取出的行数 使用%NOTFOUND 游标属性,确定是否已取出所有数据 LOOP FETCH emp_cursor INTO v_name, v_sal; EXIT WHEN emp_cursor%ROWCOUNT 5 OR emp_cursor%NOTFOUND; v_sal := v_sal + 500; . . . END LOOP; 游标和记录变量 把提取出来的数据存入PL/SQL RECORD变量,便于对结果集的处理 CURSOR emp_cursor IS SELECT employee_id, salary, hire_date FROM employees WHERE department_id = 100; emp_record emp_cursor%ROWTYPE; BEGIN OPEN emp_cursor; . . . FETCH emp_cursor INTO emp_record; 带参数的游标 当游标打开时,通过传入不同的参数,生成最终的查询语句 CURSOR cursor_name [(parameter_name datatype, ...)] IS select_statement; 在调用时,通过给定不同的参数得到不同的结果集 带参数的游标 传递部门编号和工作职务到游标中 CURSOR emp_cursor (v_dept NUMBER, v_job VARCHAR2) IS SELECT last_name, salary, hire_date FROM employees WHERE department_id = v_dept AND job_id = v_job; 游标FOR 循环 简化了显式游标的控制过程 通过相应的语法隐式的声明、打开、执行取操作和关闭游标 FOR record_name IN cursor_name LOOP statement1; statement2; . . . END LOOP;
文档评论(0)