Oracle 11G 复习大纲

一、 第一章 Oracle 入门:
1. 账号/密码:system/manager ; scott/tiger
2. Oracle 的服务:
1) Oracle<Oracle_Home_Name>TNSListener:
a) 作用:对应于Oracle 数据库的监听程序;
b) 案例:OracleOraDb11G_home1TNSListener
2) OracleService<Oracle_Sid>:
a) 描述:对应于Oracle数据库的例程;
b) 例如:OracleServiceORCL
3) OracleDBconsole<Oracle_Sid>:
a) 描述:对应于Oracle的企业管理器OEM;
b) 例如:OracleDBconsoleorcl
3. 启动服务的过程:
1) 首先启动侦听程序:
2) 然后启动Oracle 数据库例程;
3) 启动了这两个服务就可以使用SQL*PLUS 工具进行查询了;
4) 如果要使用Oracle 企业管理器,需要启动OracleDBconsole<Oracle_Sid>f服务;
4. 配置工具
1) Net Manager:
a) 作用:用于调整Oracle 侦听和连接参数;
2) Net Configuration Assistant:
a) 作用:配置新的侦听、本地服务名;可以选择添加或者修改以及删除的操作;
5. 管理工具:
1) OEM: Oracle 自带的管理工具,企业管理器;
2) 使用:这是一个web版的管理工具,使用的时候必须启动OracleDBconsole<Oracle_Sid>的服务,然后在浏览器输入:http://localhost:5500/em/ ,就可以进进入到登陆界面;
3) 注意:OEM 的程序端口为:5500;
6. 查询工具;
1) SQL*PLUS:
a) 使用环境:允许用户输入并执行SQL 语句和PL/SQL代码块;
b) 特点:是用于编写脚本的交互式查询工具;
c) 命令提示框输入:sqlplus;
7. SQL/PLUS 常用命令:
1) remark和--:
a) 作用:注释;
b) 例如:SQL>remark 这是一行注释
2) Exit:
a) 作用:推出SQL/PLUS
b) 示例:SQL>exit
3) Set lineSize:
a) 作用:设置SQL/PLUS 每行字符数
b) 示例:SQL>SET LineSize 120
c) 提示:默认lineSize为80
4) Set PageSize:
a) 作用:设置SQL/PLUS 每页行数命令:
b) 示例:SQL>set PageSize 200
c) 提示:默认的是14行;
5) Edit:
a) 作用:错误后的修改指令;
b) 示例:SQL>edit
6) Spool on / Spool off:
a) 作用:保存SQL/PLUS 中的结果;
b) 用法:spool 保存路径   spool off 将文件保存到指定的路径中;
7) Start 或者 @:
a) 作用:执行文本的批处理命令;
b) 介绍:在系统开发的时候会将创建数据库、表和对象的语句写在一个文本文件中,在执行的时候可以一次性的批量处理;
8) Desc
a) 作用:结构的命令;
b) 示例:SQL>Desc scott.emp
9) Show User:
a) 作用:查看当前用户;
b) 示例:Show User
8. Oracle 的结构:
1) Oracle 服务器:
a) 简介:在一个服务器中,每一个运行的Oracle数据库都与一个数据库实例相联系;
b) 贴士:实例是访问数据库的手段;
c) 实例与数据库的关系:1对1或者是n对1;
d) 提示:在任何情况下,每个实例只可以对应一个数据库;
2) Oracle 11g 动态内存管理:
a) 内存是影响数据库性能的重要因素;
b) 静态内存管理:
在数据库系统中,无论用户是否有连接,也无论并发用量大小,只要数据库在运行,就会分配固定大小的内存;
c) 动态内存管理:
i. 允许数据库服务运行时对内存的大小进行修改,读取大数据块时使用大的内存,小数据块时使用小的内存,读取标准内存块时使用标准内存设置;
d) Oracle 数据库内存部分:
i. 系统全局区:SGA System Global Area
ii. 程序全局区:PGA Programe Global Area;
iii. 排序池:Sort Area
iv. 大池:Large Pool
v. Java 池:Java Pool
3) Oracle 实例进程结构:(Preocess Struture):
a) Oracle 包含三类进程;
i. 用户进程 : User Process
ii. 服务器进程:Server Process
iii. 后台进程:Background Process
b) 提示:服务器进程时用户进程与服务器交互的桥梁,它可以与Oracle Server交互;
c) 提示:服务器进程可以有共享和独占两种形式;
d) 查询后台进程方法:select * from v$bgprocess where paddr<>’00;
4) Oracle 的逻辑结构:
a) 数据库:
i. Oracle数据库可以看成Oracle 服务器的在硬盘上保存的内容;
ii. 存储位置:Oracle 数据库存在与硬盘上;
iii. 表现形式:对外表现形式时文件;
iv. 主要文件:数据文件、控制文件和日志文件;
v. 数据文件:存储数据的文件;由于性能原因,每一种类型的数据放在相应的一个或一系列文件中,将这些文件放在不同的磁盘中;
vi. 控制文件:包含配置、维护和验证数据库完整性的必要信息;
vii. 日志文件:含数据库所做的更改;
b) 表空间:
i. 简介:Oracle 将数据库细分为一些小的区域;
ii. 特点:表空间是数据文件上的逻辑划分;
iii. 特点:表空间是数据库中的基本逻辑结构;
iv. 特点:表空间是一些列数据文件的集合;
v. 提示:一个表空间至少有一个数据文件来保存数据,也可以对应多个数据文件;
c) 段:
i. 简介:表空间内又细分的一种逻辑结构;
ii. 注意:段的划分依赖于数据文件
iii. 提示:段的空间分配具有不连续性;
d) 区:
i. 简介:段的分配的不联系性形成的小块称为区;
e) 数据块:Oracle中硬盘读写的最小单位;大小统一4K;
5) 表空间的管理:
a) 权限:用户必须拥有GREATE TABLESPACE 的权限才能创建表空间,所有的表空间都应该由DBA 来创建,避免出现管理问题;
b) 创建案例:






c) 修改表空间:扩展表空间-该表数据大小:

d) 扩展表空间—添加数据文件





e) 修改表空间的名称:






f) 删除表空间:






6) Oracle 中的用户、角色和权限:
a) 控制对象的分类:
i. 操作系统的功能;
ii. 用户创建的数据或者是对象;
b) 操作对象的权限称为:系统权限和对象权限;
c) 连接权限:CONNECT
d) 操作权限:RESOURCE
7) 提示:一个新的用户创建了必须进行授权:
a) SQL>GRANT CONNECT TO USER_NAME 连接权限;
b) SQL>GRANT RESOURCE TO USER_NAME 资源使用权限;
c) 示例:创建用户:







二、 第二章 SQL查询和SQL函数:
1. Oracle 中数据的类型:
1) 数值类型
2) 字符类型
3) 日期类型
4) 大对象类型
5) 特殊类型;
2. 数值类型:--Number(<p>,<s>)
1) 能表示任何复杂的数字数据;
2) <p>表示数据的总位数,最大不超过 38;
3) <s>: 表示的是小数位数;
3. 字符类型:
1) Char(size) , 定长字符型,不指定大小缺省为1 , 不超过2000个;
2) Varchar(<size>): 可变字符型;与varchar2(<size>) 相同;
3) Nchar(<size>) 和 char 具有相同的大小;
4) 提示:Oracle 以字符而不是字节为单位来指定NCHAR/NVARCHAR2这样数据类型的长度;
4. 日期类型:Data
1) 默认格式:DD-MM月-yy 
2) 例如:18-7 月—07
3) 查询系统的当前时间:select sysdate from dual;
4) 插入日期类型的数据:
a) To_date(‘2007-02-07’,’yyy-mm-dd’);
5) 指定日期输出:
a) Select  to_char(sysdate,’yyyy-mm-dd’) from dual;
5. 大对象类型:
1) BLOB :大二进制对象,可存储达:4 GB 的数据;
2) CLOB :大字符对象,每条记录存储达:4GB;,数据本身被记录在表中;
3) Long: 存储大型可变长字符串,字符串大小不超过2GB;
6. 空类型:NULL
1) 空值不等于空字符;
2) 空值+字符仍人是空值;
3) 空值与数字比较结果为空值;
7. 特殊类型:
1) ROWID:
a) 简介:ROWID 在Oracle 数据库中是一个虚拟的列,即系统用的特殊的列;
b) 作用:用于对数据库中的每条记录进行定位;
c) 值的组成:值中记录有该记录所在的硬盘、磁道、数据块等信息,用于记录该记录在硬盘上的物理和逻辑位置;
d) 优势:利用ROWID 可以最快的找到该记录;
2) UROWID:
a) 简介:是Universal ROWID 的意思:全球ROWID;
b) 特点:支持逻辑和物理ROWID;
c) 特点:UROW类型可以存储所有的ROWID类型的数据;
8. SQL 查询语句:
1) 数据定义语言:DDL
a) 作用:主要用于创建、删除数据库的对象和维护数据对象的属性;
b) 主要命令:create drop alter;
c) 万事万物皆对象;
d) 创建备份数据表:create tabe empBak as select * from emp;
e) 删除表格:drop table attest
f) 修改表格字段:
i. 添加字段:alter table student add(address varchar(50));
ii. 修改字段:alter table student modify(address varchar2(60));
iii. 删除字段:alter table student drop(address);
2) 数据操作语言:DML
a) 简介:主要是对表数据操作的一些指令,包括:select 、insert update delete;
3) 数据控制语言:DCL:
a) 简介:主要用于对数据库中权限的授予和取消;
b) 权限分类:系统权限和对象权限;
c) 系统权限:Oracle系统的功能点;
d) 对象权限:其他用户操作该对象的能力;
e) 系统授权用户语法:
i. SQL>grant 系统权限 to  用户名
ii. 例如:SQL>GRANT CREATE ANY TABLE TO HOPE;
f) 将角色的权限赋予用户语法以及常用角色:
i. 语法:grant connection to hope;
ii. Connect  基本连接;
iii. Resource 资源使用;
iv. DBA: 数据库管理
g) 给用户授予对象权限:
i. 语法:grant 对象权限名 | All on 对象名 to 用户名
ii. 示例:grant select on emp to hope;
h) REVOKE 用于回收权限:
i. 语法:revoke 系统权限名 from 用户名;
ii. 语法:revoke 对象权限名 on 对象名 from 用户名;
iii. 示例:revoke connection from hope;
iv. 示例:revoke select on emp from hope,myuser;
4) 事务控制语言:TCL
a) 简介:事务是指作为单个逻辑工作单元执行的一些列操作,而这些逻辑工作单元具有原子性 、 一致性,隔离性和持久性四个属性,统称为ACID;
b) 原子性:一个事务要么全部执行,要么全部不执行;
c) 一致性:事务的运行并不改变数据库中数据的一致性;
d) 隔离性:两个以上的事务不会出现交错执行的抓状态;
e) 持久性:事务运行成功以后,就系统的更新是永久的,不会无缘无故的回滚;
f) 提示:事务是基于会话的;Oracle 中的事务没有显示的事务开始点,每上一个事务的结束就是下一个事务的开始;
g) TCL 事务控制命令:COMMIT / ROLLBACK / SAVEPOINT
h) 注意:事务中使用保存点,回滚的时候可以定位于保存点;
9. 伪表及伪列:
1) 伪表:DUAL;
2) 目的:保证在使用了select 的语句中语句的完整性;
3) 特点:DUAL 这个表的数据只有一列一行;
4) 伪列:
a) 目的:实现完整的关系数据库功能;
b) ROWID 记录每个数据行在硬盘上位置的唯一标识;
c) ROWNUM 标识查询结果集中记录序号;
d) LEVEL 查询数据所对应的层次;
e) 用法:跟在select 后面;
10. 集合运算:
1) 并集:UNION
a) 目的:将两个SQL语句的结果合并起来,可以查看你要的查询结果;
b) UNION  会排除重复的记录
c) UNION ALL 不会排除重复的记录;
d) UNION ALL 比UNION 的速度快;
e) 注意:UNION 用法中,两个select 语句的字段类型匹配,而且字段个数要相同;
2) 交集:INTERSECT   , 在两个查询的结果中找到相同的记录;
3) 割集/剪集:MINUS , 会从第一个结果集中减去第二个结果集和中存在的记录;
11. 函数:
1) 单行函数:
a) Lower(<c>): 返回字符串,并将所有的字符变为小写;
b) UPPER(<c>) : 返回字符串, 并将所有的字符变为大写;
c) RPAD(String,length,value)  RPAD 在列的右边粘贴字符;
d) LPAD(String,length,value)  LPAD  在列的左边粘贴字符;
e) 说明:length 是添加指定value后该字符的总长度;
f) TRIM([‘set’ from] string) : 如果没有指定字符集,默认删除空格;
i. 示例:select trim(‘  abc  ’) from dual    === abc
ii. LTRIM : 左截取  RTRIM : 右截取
g) 日期函数:
i. ADD_MONTHS(D,<i>) :返回日期D 上加上I 个月后的结果;
ii. LAST_DAY(D)  : 返回包含日期D 的月份的最后一天;
iii. MONTHS_BETWEEN(D1,D2) : 返回D1和D2 之间的月数目;
iv. ROUND(D,FMT) : 将日期D,按指定的格式四舍五入;
2) 分组函数:
a) Avg(); 返回数值的平均值;
b) Count() ; 返回查询中行的数据, 默认为所有行;
c) Max() : 返回选择列表项目的最大值,如果x 是字符串数据类型,他返回一个varchar2 数据类型,如果为DATE 数据类型,返回一个日期,如果为numeric 数据类型,返回一个数字;
d) MIN();  返回选择列表的最小值;
e) SUM(); 返回选择列表项目的数值的总和;
3) 分析函数:
a) 排序函数,同SQL Server
三、 第三章  分区表和锁
1. 分区表: 对数据库进行那个分区的好处:
1) 增强可用性;
2) 减少关闭时间;
3) 维护轻松;
4) 均衡I/O;
5) 改善性能;
2. 分区表的分类:
1) 范围分区:range
2) 列表:list
3) 散列:hash分区
4) 复合分区;
3. 使用介绍:
1) 范围分区:根据表中列值的范围进行分区;
2) 列表分区:按照劣种中指定的数据进行分区:例如:电话号码按区域进行分区;
3) 散列分区:没有特殊的要求,只因性能原因进行分区时,使用散列分区;提示:使用散列分区时,分区数量最好是2的指数倍;
4. 创建分区表:
1) 创建范围分区表:注意事项
a) 分区分界点一定是从小到大一次给出;
b) 分界点不在指定的分区,而是在下一个分区;
c) 希望所有的值在最后一个分区,分界点使用MAXVALUE
d) 如果没有指定MAXVALUE 确定的缺省分区,超出最大分界点的数据无法插入表;























2) 散列分区:只关注分区的数量,系统自动定义分区的名称,分区的数据存储在缺省的表空间;
a) 语法:partition by HASH(列) partition 8;
b) 创建分区表,能指定名称;partiton by hash(列) (partition p1,partition p2);
c) 能指定分区存储的表空间:partition by hash (列) partition 3 store in(ORD1,ORD3,ORD3)
3) 创建复合分区:
a) 符合分区可以是范围分区和列表的组合,页可以是范围分区和散列的组合;
b) 语法:


















5. 分区表的维护:
1) 查询分区表:select * from atable partition(p2);
2) 增加分区表:增加分区表的分区一定是最后一个分区;
a) 语法:alter table atable add partition p3 values less than (3001) tablespace hope2;
3) 删除一分区:alter table atable drop partition p3;
4) 拆分分区:ater table atable split partition p3 at(1050) into (partititon p4,partition p5);
5) 合并分区:alter table atable merge partitions p4 ,p5 into partition p5;
6) 分区改名:alter table atable rename partition p3 to p4;
7) 将分区该表空间:alter table atable move partition p4 tablespace hope2;
6. 锁机制:
1) 锁的目的:为了保证数据访问的完整性和一致性;
2) 数据库锁的分类:
a) DML 锁:data locks,数据锁,用于保护数据的完整性;
b) DDL 锁:dictionary locks,字典锁,用户保护数据库对象的结构,例如:表,索引等结构定义;
c) 内部锁:internal locks, 用户保护数据库的内部结构;
d) 悲观锁:悲观锁的实现,往往依靠数据库提供的锁机制;
e) 乐观锁:乐观锁的实现,长依赖应用程序;
3) 锁的类型:DML
a) 根据锁定的范围DML锁包括:TM 锁(表级锁) ,TX锁(行级锁)
b) 锁定后使用资源的方式有两种模式:
i. 排他模式:EXCLUSIVE ,不允许其他任何并发会话以任何方式共享锁定的资源,修改数据时需要这种锁;
ii. 共享模式:SHARE,允许对同一块数据的并发读访问,在更改数据时上升为排他模式;
c) 系统锁的模式:
i. 0 : NONE 无
ii. 1 :NULL 空
iii. 2 :ROW SHARE 行共享 RS
iv. 3 :ROW EXCLUSIVE 行排他RX
v. 4 :SHARE 共享锁S
vi. 5 :share row exclusive 共享排他SRX
vii. 6 :EXCLUSIVE 排他锁X
viii. 提示:0 级和1级别的锁不会对其他操作产生限制,其余的参照说明,级别越高,对操作的限制越多;
4) 加锁:隐式和显式
a) 隐式加锁:系统自动加;
b) 显示加锁:语法:lock table 表名 in [ROW SHARE | ROW EXCLUSIVE | SHARE ROW  EXCLUSIVE | EXCLUSIVE ] MODE
c) 没有主外键关联的时候,进行DML操作时,自动添加行排他锁;
d) 有主外键关联的时候,进行DML操作时,操作表添加行排他锁,关系表添加行共享锁;
e) 例如:select from emp where deptno = 30 for update  , 这样系统给表加上级别为3的锁,行排他锁RX
5) 锁的互斥:
a) 在同一个会话中可以重复的对一个表加锁,各级别间的锁没有互斥性;
6) 死锁:
a) 死锁的解除方法:选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁;
b) 注意:对于撤销的事务所执行的数据修改操作必须加以恢复;
四、 第四章  数据库对象
1. 常用对象:同义词、序列和视图;
2. 索引好处:提高表数据的查询速度;
3. 同义词:
1) 作用:为方便对数据的操作,用户为对象创建别名,用于简化查询语句;这个别名称为同义词;
2) 分类:私有同义词和公有同义词
a) 私有同义词:只有创建者能访问;
b) 公有同义词:所有的Oracle对象都可以访问;
3) 创建私有同义词
a) 创建私有同义词权限:create any synonym 和 drop any synonym 两种权限,方可建立和删除同义词;
b) 语法:create synonym 同义词名 for 对象名;
c) 提示:如需对数据进行数据查询直接访问同义词即可;
4) 创建公有同义词:
a) 权限:create public synonym 和 drop public synonym ,才可以管理公有同义词;
b) 提示:其他用户虽然可以使用公有同义词,但操作同义词时要依赖同义词所关联的对象;
5) 删除同义词:
a) 语法:drop synonym 同义词名;
b) 公有同义词:drop public synonym 同义词名;
4. 序列:
1) 序列是Oracle中按照一定规则提供连续数字的对象;
2) 创建序列:







3) 创建序列注意事项:
a) 序列的起始值必须大于等于最小值,小于等于最大值;
b) 序列的步长可以为负数,从大到小;
c) 序列如果启用缓存值,缓存中的最大值要小于等于序列的最大值;
d) 序列启用了循环,如果步长为正,循环的起始值为最小值,如果步长为负,循环的起始值为最大值;
4) 修改序列:
a) Alter sequence stu_id increment by 1 nomaxvalue nocycle cache 10;
b) 注意:修改序列时不可以修改序列的起始值;
5) 使用序列:
a) 属性:nextval :获取一个新的序列值;
b) 属性:currval :获取序列当前的值;
c) 提示:可以通过序列向数据表中插入值;
6) 删除序列:
a) 语法:drop sequecnce stu_id;
5. 视图:
1) 目的:就是简化用于查询所使用的语句,还可以在程序和数据库表结构之间为开发起到一个缓冲的作用,同时可以达到安全和保密的目的;利用视图,我们可以在查询处理完成复杂的操作;
2) 注:视图只是一个逻辑表,它自己不包含任何数据;
3) 视图状态:status=’invalid’   名称表示:object_type=”view”
4) 带约束的视图:保证查询的条件的字段不能被修改:
a) SQL>CREATE VIEW EMPVIEW30 AS SELECT * FROM EMP WHERE DEPTNO=30 WITH CHECK OPTION;
5) 提示:利用单表查询建立起来的视图我们可以向修改表一样的修改视图数据,但是如果视图是建立在一个关联查询的基础之上的,我们就可一发现有的字段可以修改,而有的字段数据就不能修改;
6. 索引:
1) 索引时关系型数据库中用于加快数据查询的对象;
2) ROWID:伪列,存储了数据库记录的物理地址;
3) 索引正是在条件字段的排序序列和ROWID 之间建立联系而生成的一种对象;
4) 索引组织表:记录在存储的时候就是排序的,不需要另外建索引;
五、 第五章 PL/SQL
1. PL/SQL 程序块时一段执行业务逻辑的程序块;
2. Oracle 中的程序块有:函数、存储过程、包、和触发器集中;
3. 结构:PL/SQL 时一种块结构语言,组成PL/SQL 程序的单元时逻辑块;
4. 构成:
1) declare …..begin…exception….end
5. PL/SQL 的过程数据显示:
1) 首先设定输出参数,让输出结果显示在客户端程序上:
a) 语法:set serveroutput on;
b) 在客户端的输出语句:DBMS_OUTPUT.PUT_LINE();函数;
6. PL/SQL 中常量和变量的声明:
1) Declare a EMP.EMPNO%TYPE; COUNT INT; BEGIN ….END;
2) 获取表中列数据的类型: emp.id%type;
3) 获取表中行的类型:EMP%ROWTYPE;
7. PL/SQL中的赋值:
1) 变量声明中赋值:一种使用:default   二种使用:  :=
2) 例如:DECLARE COUNT INT DEFAULT 12;  SAL INT :=35; BEGIN …END;
3) 程序中的赋值:
a) 使用:  := 进行赋值
b) 使用查询语句进行赋值;
c) 提示:在PL/SQL中SELECT 查询只能作为赋值语句,不能使用单独的查询语句;
8. PL/SQL 中控制语句:
1) 条件控制:
a) If 条件表达式 then 执行语句  elsif 条件表达式 then 执行语句 END IF;
b) Case多元条件控制:
i. case 字符串变量
ii. when 结果值 then 执行语句 ;
iii. when 结果值 then 执行语句;
iv. else 执行语句;
v. end case;
2) 循环控制:
a) 基本形式:LOOP ….  END LOOP;  之间的语句将无限次的执行,跳出使用:exit when 条件表达式;
b) 语法:
i. LOOP
ii. EXIT WHEN 条件表达式;
iii. 执行语句;
iv. END LOOP;
c) FOR 的循环控制:变量的定义不用声明,变量的边界值也会进入到循环;
i. FOR 变量 IN 起始值..结束值
ii. LOOP
iii. ……
iv. END LOOP;
d) WHILE 循环控制:
i. WHILE 条件表达式
ii. LOOP
iii. ….
iv. END LOOP;
3) 跳转控制:可以极大的提高程序效率,跳转控制中标识跳转的指令时GOTO。
a) 语法:执行语句   <<节名称>>  执行语句;
b) 提示:如果我们希望节作为我们跳转的一个点,并不打算执行什么语句,我们可以使用NULL , 如果希望结束程序运行可以使用return语句;
9. 异常:
1) 分类:
a) 内部异常
b) 自定义异常;
2) 抛出异常:
a) 语法:RAISE_APPLICATION_ERROR(错误编码,错误消息);
b) 错误编码:范围。。-20000 和-20999之间;
c) 错误消息:用于定义错误消息,长度为2048;
10. 动态SQL
1) 可以在PL/SQL 中执行DML 语句,但不能执行DDL语句,有的时候我们希望动态的构造一个查询语句,而这些语句都是字符串;
2) 执行动态SQL语句:EXECUTE IMMEDIATE ‘SQL语句字符串’;
3) 例如,创建一个表:
i. DECLARE
ii. EXECUTE IMMEDIATE
iii. ‘CREATE TABLE ….’;
iv. END;
4) 提示:执行SQL 的时候,我们可以传入一些参数,首先在构造动态SQL 语句的时候要给参数留下占位符,执行动态SQL 的时使用USING 传入参数,按先后顺序传入;
5) 占位符:  :1   :2   :3
6) 使用参数:EXECUTE IMMEDIATE sqlString USING 参1 ,参2,参3;
7) 注意:还可以将查询的结果赋值给变量;
六、 第六章  游标
1. 游标的分类:
1) 静态游标
2) 引用游标;
2. 游标的属性:
1) %ISOPEN 判断游标是否打开
2) %FOUND 判断游标行是否有效
3) %NOIFOUND 判断游标行是否有效;
4) %ROWCOUNT 返回当前位置为止游标读取记录的行数;
3. 静态游标分类:
1) 隐式游标
2) 显示游标
a) 当查询返回结果超过一行时并且需要逐条数据进行处理的时候,就需要一个显示游标。显示游标在PL/SQL 块的声明部分声明,在执行部分或异常处理部分执行打开、去数据、关闭操作;
b) 提示:显示游标一定关联一个查询结果集;,并且在游标定义的时候就跟这个结果集绑定在一起;
c) 获取游标中的数据:fetch  游标名 into 变量;
d) 获取行类型:EMP%ROWTYPE;
3) 带参数的游标,在打开游标的时候传递参数;定义的参数只能在定义游标的查询中使用
4) 循环游标:操作游标过程:打开游标-----循环取游标数据----操作数据关闭游标;
a) 语法:
i. DECLARE CURSOR 游标变量 IS 游标的查询语句;
ii. BEGIN
iii. FOR 查询变量 IN 游标变量
iv. LOOP
v. 。。。
vi. END LOOP;
vii. END ;
5) 利用游标修改数据:
a) 游标的目的不仅仅时查询数据,绝大部分时修改数据,逐条获取,逐条处理;
b) 利用游标修改数据,需要在打开游标的时候就进行数据的锁定;
c) 锁定语法:CURSOR 游标名称 IS 查询语句 FOR UPDATE;
d) 对当前游标进行修改或删除的语法:
i. UPDATE 语句 WHERE CURSOR OF 游标名称;
ii. DELETE 语句 WHERE CURRENT OF 游标名称;
4. 引用游标:
1) 由来:无法在游标声明的时候就确定游标的查询语句,需要根据业务逻辑过程确定查询,引用游标可以提供这种灵活性;
七、 第七章 子程序和程序包
1. 定义:
1) 系统中有些固定的数据库操作,对这些固定操作定义存储过程;
2. 作用:可以简化客户端的应用程序的开发和维护,提高应用的运行性能;
3. 带参数的存储过程:
1) IN : 读入参数,主程序向过程传递参数值;
2) OUT :读出参数,过程向主程序传递参数值;
3) IN OUT : 双向参数,过程与主程双向交流数据;
4. 函数:
1) 定义:类似于过程;
2) 特点:过程调用本身时一个PL/SQL 语句,而函数嗲用时作为表达式的一部分执行的; 
3) 与过程的参数类似,函数的参数表时可选的,并且函数声明部分和函数调用都没有使用括弧;由于函数调用时表达式的一部分,所以函数返回类型是必须要有的;
4) 例如:
a) CREATE OR REPLACE FUNCTION MYADD(A INT , B INT) RETURN INT
b) AS
c) BEGIN
d)   RETURN A+B;
e) END;
f) /
5) 函数的使用:
a) 在SQL 语句中调用函数;
b) 在PL/SQL 中调用;•
c) 注意:在PL/SQL中调用函数必须要使用一个参数接收函数返回值;
5. 过程与函数的比较:
1) 如果结果返回值在一个以上时,用过程比较好;
2) 如果只有一个返回值,那么使用函数;
6. 包:
1) 定义:包是有存储在一起的相关对象组成的PL/SQL 结构,包有两个独立的部分,即说明部分和包体;
2) 包体:
a) 包体是一个独立于包头的数据字典对象,包体只能在包头完成编译后才能进行编译;
3) 提示:包好像是接口的定义, 而包体就是实现了接口的类,包中定义的变量为全局变量;
4) 提示:在包体内,包头中的对象可以直接引用,可以不用包名为其前缀; 同样的支持重载;
7. 自主事务处理:pragma autonomous_transactio;
1) 添加了自主事务定义的过程事务相对独立,但要注意如果父过程中对数据进行了修改没有进行事务提交,在子过程中也对该数据进行修改会导致死锁;

一、 触发器和内置子程序:
1. 数据库触发器也是一种命名的PL/SQL 块,它隐式地被激发执行;
2. 触发器的用途:
a) 自动的生成导出的列值;
b) 防止无效事务;
c) 实施更复杂的安全性检查;
d) 在分布式数据库中实施跨越结点的引用完整性;
e) 实施复杂的事务规则;
f) 提供透明事件日志;
g) 提供高级的审计;
h) 维护同步表复制;
i) 收集关于存储表的统计;
3. 触发器的基本要素:
a) 触发源
b) 触发时机
c) 触发事件
d) 触发器的限制
e) 触发器动作;
4. 触发器的分类:数据库触发器和DML 触发器
a) 数据库触发器:对数据库对象进行创建、删除和修改的时候触发;
b) DML 触发器:对数据表进行DML 操作时候触发的触发器;
c) 行级触发器:DML修改多条语句,每条语句被修改触发的触发器;
d) 语句级触发器:DML 无论修改多少条记录,都只会触发一次的触发器;
e) 替代触发器:无法直接修改的时候,对视图的更改;
5. DML 触发器:
a) 语法:
1) create or replace trigger tri_name
2) {before | after | instead of }
3) On 触发源
4) Referencing_clause
5) [when 触发条件]
6) [for each row]
7) 触发执行语句;
6. 行级触发器:
a) 在操作数据的时候每条记录修改都会被激发;
b) 内置对象:NEW    和 OLD
c) 注意:在条件表达式中使用NEW  和 OLD 对象不需要加: ,非表达式中使用 :NEW.SID  来获取字段的值;

7. 语句级触发器:
a) 在触发的时候无论DML语句修改多少条记录,触发器的主体只会执行一次;
8. 替代触发器:
a) 替代触发器被激发来代替执行修改视图的DML 语句;
b) 一下情况的视图不可更改:
1) 集合操作;
2) 分组计算函数;
3) Connect by 或 start with
4) 去除多行distinct
c) 以上视图不能直接操作,而使用触发器进行转换;
9. 变异表:
a) 变异表是触发器触发源语句正在修改的表或者被修改表的级联表,对于行级触发器,如果触发器的执行语句修改的表是变异表中的记录,会引发异常;
10. 触发器管理:
a) 对已经创建好的触发器可以通过启用和禁用触发器进行管理;
b) 对单一触发器管理:alter trigger 触发器名称 disable | enable
c) 多个触发器:alter table 表名 disable | enable all triggers;
11. 内置程序包
a) Oracle 也提供了若干个具有特殊功能的内置包;
1) DBMS_OUT   PL/SQL 中的输入和输出显示;
2) DBMS_JOB 任务调度服务;
3) DBMS_LOB 大型对象操作;
4) DBMS_PIPE 数据库管道,允许会话间通信;
5) DBMS_SQL 动态SQL
6) UTL_FILE 文本文件的输入与输出;


猜你喜欢

转载自sunzone.iteye.com/blog/1889000