学习笔记-oracle-PL/SQL-动态游标

动态游标的分类:

一 强类型 :带RETURN语句的,只能为查询结果与ruturn类型相同的查询语句打开。

二 弱类型 :不带RERURN语句。可以为任何查询语句打开。

--使用动态游标的步骤

1:定义REF动态游标类型。 2:声明ref动态游标。 3:打开ref动态游标。 4:关闭游标

1:定义REF动态游标

语法:TYPE 〈类型名〉 IS REF CURSOR

[RETURN <返回类型>] ;  --如果定义了返回类型,类型必须是RECORD类型。

2:声明ref动态游标

语法:<游标名>  <游标类型> ;   --游标类型必须是自定义的ref类型

3:打开ref动态游标

语法: OPEN 〈游标名〉 FOR 〈查询语句〉; --打开游标的时候需要确定查询语句。

4:关闭游标

SLOSE 〈游标名〉;

--------示例,动态游标的用法

--动态游标,强类型游标,定义游标所要绑定数据表
DECLARE
TYPE ref_cur_emp IS REF CURSOR RETURN emp%Rowtype; --声明REF游标类型
rc_emp ref_cur_emp; --声明游标变量
emp_row emp%ROWTYPE;
BEGIN
OPEN rc_emp FOR --打开游标,并且绑定要查询的语句
SELECT * FROM emp;
LOOP
FETCH rc_emp INTO emp_row; --提取游标
EXIT WHEN rc_emp%NOTFOUND;
dbms_output.put_line(rc_emp%ROWCOUNT||‘ ‘||emp_row.empno||‘ ‘||emp_row.ename||‘ ‘||emp_row.sal);
END LOOP;
CLOSE rc_emp; --关闭游标
END;

--------------------------------------------

--动态游标,弱类型游标
DECLARE
TYPE ref_cur IS REF CURSOR; --声明REF游标类型
rc_emp ref_cur; --声明游标变量
emp_row emp%ROWTYPE;
v_no emp.empno%TYPE;
v_name emp.ename%TYPE;
v_sal emp.sal%TYPE;
v_dname dept.dname%TYPE;
BEGIN
OPEN rc_emp FOR --打开游标,并且绑定要查询的语句
SELECT * FROM emp;
dbms_output.put_line(‘员工信息表!‘);
LOOP
FETCH rc_emp INTO emp_row; --提取游标
EXIT WHEN rc_emp%NOTFOUND;
dbms_output.put_line(rc_emp%ROWCOUNT||‘ ‘||emp_row.empno||‘ ‘||emp_row.ename||‘ ‘||emp_row.sal);
END LOOP;
CLOSE rc_emp; --关闭游标

--对应多个查询语句
dbms_output.put_line(‘员工部门信息表!‘);
OPEN rc_emp FOR SELECT e.empno,e.ename,e.sal,d.dname
FROM emp e,dept d WHERE e.deptno = d.deptno;
LOOP
FETCH rc_emp INTO v_no,v_name,v_sal,v_dname;
EXIT WHEN rc_emp%NOTFOUND;
dbms_output.put_line(rc_emp%ROWCOUNT||‘ ‘||v_no||‘ ‘||v_name||‘ ‘||v_sal||‘ ‘||v_dname);
END LOOP;
END;

-----1显示游标一般用来循环获取结果集,能使fom游标就使用fom游标

2隐式游标一般用来判断dml语句是否成功执行

3 动态游标往往结合存储过程使用,如查询需要动态改变。

时间: 2024-10-12 21:09:01

学习笔记-oracle-PL/SQL-动态游标的相关文章

学习《Oracle PL/SQL 实例讲解 原书第5版》----创建账户

通过readme.pdf创建student账户. 以下用sys账户登录时都是sysdba. 一.PL/SQL 登录oracle. SYS/123  AS SYSDBA 账户名:sys:密码:123:作为sysdba角色登录. 二.查询DEFAULT TABLESPACE和TEMPORIRY TABLESPACE. SELECT tablespace_name FROM dba_tablespaces ORDER BY tablespace_name; 注:tablespaces are area

oracle 学习笔记之PL/SQL程序设计

1.PL/SQL的定义: PL/SQL(Procedure Language/SQL) PLSQL是Oracle对sql语言的过程化扩展 指在SQL命令语言中增加了过程处理语句(如分支.循环等),使SQL语言具有过程处理能力. 把SQL语言的数据操纵能力与过程语言的数据处理能力结合起来,使得PLSQL面向过程但比过程语言简单.高效.灵活和实用. Plsql(oracle),Transact-sql(SQL server) 2.入门程序-->打印hello world; set serverout

oracle pl/sql之游标

前情提要: 在通过select语句查询是,返回的结果通常是多行记录组成的集合.为此SQL提供 了游标机制.游标可以充当指针的作用,使应用程序设计语言一次只能处理查询记过中的一行.在Oracle中,可以使用隐式和显示两种游标.在pl/sql 中程序所有发出的DML和select语句,Oracle都会自动声明“隐式游标”.为了处理由select语句返回的一组记录,需要在pl/sql程序中申明和处理“显示游标”. 隐式游标 游标的主要属性如下: %found 布尔型属性,如果SQL语句至少影响一行,则

学习《Oracle PL/SQL 实例讲解 原书第5版》---创建student schema

接上篇,运行脚本createStudent.sql后结果不符. 又运行了一遍rebuildStudent.sql就好了. 图: 原来是这样的,还以为是语言问题: 额,本来是打算截图的.但是发现没问题了.可能是运行过rebuildStudent.sql后,修改了表结构吧.之前的问题是:日期格式不对.现在没问题了.就这样吧. 附StudentSchema 下载地址:http://www.informit.com/store/oracle-pl-sql-by-example-9780133796780

ORACLE PL/SQL异常处理(Exception)学习笔记

1.PL/SQL错误类型 错误类型 报告者 处理方法 编译时错误 PL/SQL编译器 交互式地处理:编译器报告错误,你必须更正这些错误 运行时错误 PL/SQL运行时引擎 程序化地处理:异常由异常处理子程序引发并进行捕获 2.异常的声明 有两种异常:用户自定义异常和预定义异常 用户自定义异常就是由程序员自己定义的一个错误.该错误还不是非常重要,所以并没有将整个错误包含在Oracle的错误中.例如,它可能是一个与数据有关的错误.而预定义异常则对应于一般的SQL和PL/SQL错误. 用户自定义异常是

[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)

原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的. 本篇主要内容如下: 4.1 游标概念 4.1.1 处理显式游标 4.1.2 处理

[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天才在于积累!) ——通过知识共享树立个人品牌.   继上七篇:            [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)            [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之

Oracle学习(十一):PL/SQL

1.知识点:可以对照下面的录屏进行阅读 PL/SQL程序结构 declare 说明部分 (变量说明,光标申明,例外说明 ] begin 语句序列 (DML语句]- exception 例外处理语句 End; / ------------------------------------------------------------------ --第一个PL/SQL程序:HelloWorld set serveroutput on --如果要在屏幕上输出信息,需要将serveroutput开关打

oracle pl/sql 程序设计 历史笔记整理

20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/[email protected]:1521/orcl 在java中调用存储过程: create or replace procedure t_p(l_in in out number) is begin l_in := 5; end; @Test public void test() throws SQLException { DataSource ds = Dat

oracle pl/sql 实战学习 -避免误用

这几天看了下 oracle pl/sql 实战 这本书,出于对sql语句性能的研究,先研究下游标对代码的影响. 1.逐行处理 程序声明了一个游标c1,然后用游标for循环隐式地打开了这个游标,对从游标c1取出的每一行,程序查询customers表,并把first_name和last_name的值填充到变量,随后插入一行数据到top_sales_customers表. 问题1: 代码清单1-1的编程方法很有问题.即使在循环中调用的SQL语句是高度优化的,程序的执行还是会消耗大量时间.假设查询cus