Oracle02_游标、集合、和OOP的概念(高级应用)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.0
显式游标
关闭游标
CLOSE cursor_name ;
9
示例
BEGIN …… CLOSE emp_cur ; END;
3.0
显式游标
10
游标的属性 %FOUND 检测当前游标指向的行是否有 数据 %NOTFOUND 与%FOUND相反 %ROWCOUNT 从游标中已提取的总行数 %ISOPEN 检测游标是否已打开
16
3.0
集合
集合类似于其他第3代语言中使用的数组 PL/SQL语言提供了3种不同的集合类型 联合数组(也称为索引表) 嵌套表 可变数组
17
3.0
联合数组
18
联合是具有Oracle的数据类型或用户自定义 类型的一维体 声明联合数组的语法格式
TYPE table_type IS TABLE OF type INDEX BY binary_integer ;
5
3.0
显式游标
声明游标
CURSOR cursor_name IS select_statement
6
示例
DECLARE CURSOR emp_cur IS select ename,job,sal from emp;
3.0
显式游标
打开游标
OPEN cursor_name;
Leabharlann Baidu
7
示例
...... BEGIN OPEN emp_cur ; dbms_output.put_line( emp_cur%ROWCOUNT ); END;
11
3.0
隐式游标
使用隐式游标要注意以下几点 每个隐式游标必须有一个INTO INTO接受的变量类型要与列表的一致 隐式游标一次仅能返回一行数据,使用 时必须检查异常。最常见的异常有 “no_data_found”和“too_many_rows”
12
3.0
游标变量
游标变量是动态的,它不与特定的查询绑 定在一起。可以为任何兼容的查询打开游 标变量,从而提高更好的灵活性。 创建游标变量有两个步骤: 定义 REF CURSOR 类型,即引用游标 类型 声明这种类型的游标变量
3.0
游标
PL/SQL用游标(cursor)来管理 select语句 用来获取,定位结果集中的数据的指示器. 游标分类 静态游标
显式游标(explicit cursor) 显式游标 隐式游标( 隐式游标(implicit cursor) )
4
游标变量
3.0
显式游标
显式游标的使用步骤 声明游标 声明游标(declare) 打开游标 打开游标(open) 读取数据 关闭游标 关闭游标(close)
22
3.0
OOP的概念
23
自Oracle9i以来,Oracle不再是单纯的关系 数据库管理系统了,它在关系数据库模型的 基础上,添加了一系列面向对象的特性,其 主要目的是把用户类型直接映射到数据库的 类型,从而方便编程。 Oracle面向对象的最基本元素是它的对象类 型,也就是Type Oracle中与面向对象技术相关的数据类型主 要有:对象类型,可变数组,嵌套表,对象 表,对象视图等
20
3.0
可变数组
可变数组的语法格式如下:
TYPE type_name IS VARRAY | VARYING ARRAY (max_size) OF element_type [NOT NULL]
21
3.0
可变数组
可变数组也需要初始化。需要注意赋值的 数量必须保证不大于可变数组的最大上限
DECLARE TYPE montharr IS VARRAY(12) OF varchar2(10); months montharr := montharr('January','February','March'); BEGIN months.extend(2); /*给months可变数组增加两个元素*/ months(4) := 'April'; months(5) := 'June'; FOR i IN 1..5 LOOP dbms_output.put_line(months(i)); END LOOP; END;
3.0
显式游标
读取数据
FETCH cursor_name [INTO variable_name,…n];
8
示例
BEGIN OPEN emp_cur ; FETCH emp_cur INTO name, job, sal ; /*从结果集中提取一行数据*/ WHILE emp_cur%FOUND LOOP dbms_output.put_line ( name || ' ' || job || ' ' || sal ) ; FETCH emp_cur INTO name, job, sal ; /*在循环中每次提取一行数据*/ END LOOP; CLOSE emp_cur ; END;
3.0
联合数组
联合数组示例
19
DECLARE TYPE emp_name IS TABLE OF varchar2(10); /*声明类型*/ INDEX BY binary_integer; names emp_name; /*声明变量*/ BEGIN names(1) := '张飞' ; names(2) := '关羽' ; END
3.0
嵌套表
嵌套表和联合数组类似,唯一不同是没有 INDEX BY binary_integer子句 嵌套表使用前需要初始化
DECLARE TYPE stutab IS TABLE OF varchar2(20); stu stutab := stutab('张三', '李四', '王五'); BEGIN for i in 1..3 loop dbms_output.put_line(stu(i)); end loop; END;
3.0
总结
25
1. 显式游标用于处理返回一到多行结果集的select语 句,显式游标首先要声明,在使用前要打开,使 用完要关闭。 2. 隐式游标即简单地编码select语句。当select语句 预计只返回一行时使用隐式游标。 3. 使用游标变量需要先声明引用游标类型,再定义 该种类型的游标变量。它不与特定的查询绑定在 一起,而是可以动态地打开不同的查询。处理结 果集的方式与显式游标基本相同。 4. 集合包括:联合数组、嵌套表、可变数组,它们 都是以数组的方式操纵数据,可以使用集合在 PL/SQL中完成一些复杂的操作。 5. Oracle 数据库是一种对象关系型数据库,它在关 系型数据库的基础上加入了面向对象的概念 3.0
3.0
OOP的概念
24
使用对象数据类型的优点: 更容易与Java、C++编写的对象应用程序 交互。 获取便捷。一次对象类型请求就可以从多 个关系表中获取信息,通过一次网络往复 即可返回。 可以把对象数据类型理解为在OOP语言中的 类。创建一个对象数据类型相当于创建一个 类,以后我们可以实例化,继承等等
第二章
游标、集合、和OOP的概念
3.0
2010-8-15 威迅教育开发部监制
目标
1. 理解游标、集合的概念和作用 2. 掌握在PL/SQL中游标的基本用法 3. 了解Oracle数据库中OOP的基本概念
2
3.0
3
1. 2. 3. 4.
找出最高工资的编号,更新他的工资为70%. 输出姓名,原来工资,现在工资. Rs.next() Rs.last()
13
3.0
游标变量
声明一个引用游标类型
--强类型游标(指定返回类型) TYPE dept_cur IS REF CURSOR RETURN dept%rowtype; --弱类型游标(没有返回类型) TYPE mycur IS REF CURSOR ;
14
3.0
游标变量
声明游标变量
DECLARE TYPE dept_cur IS REF CURSOR RETURN dept%rowtype; cur1 dept_cur ; /*声明游标变量*/
15
打开游标变量
OPEN cur1 FOR select * from dept where deptno=10;
3.0
游标变量
示例
DECLARE TYPE dept_cur IS REF CURSOR RETURN dept%rowtype; cur1 dept_cur ; dept1 dept%rowtype; BEGIN OPEN cur1 FOR select * from dept where deptno=10; FETCH cur1 INTO dept1; dbms_output.put_line(dept1.deptno||' '||dept1.dname||' '||dept1.loc); OPEN cur1 FOR select * from dept where dname='SALES'; FETCH cur1 INTO dept1; dbms_output.put_line(dept1.deptno||' '||dept1.dname||' '||dept1.loc); CLOSE cur1; END;
3.0
隐式游标
在PL/SQL程序段中使用SELECT语句进行 操作,PL/SQL语言会隐含地处理游标定义 示例:
DECLARE name varchar2(10); BEGIN select ename into name from emp where empno=7934; dbms_output.put_line( name ); END;
相关文档
最新文档