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)NetManager:
a)作用:用于调整Oracle侦听和连接参数;
2)NetConfigurationAssistant:
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)SetlineSize:
a)作用:设置SQL/PLUS每行字符数
b)示例:SQL>SETLineSize120
c)提示:默认lineSize为80
4)SetPageSize:
a)作用:设置SQL/PLUS每页行数命令:
b)示例:SQL>setPageSize200
c)提示:默认的是14行;
5)Edit:
a)作用:错误后的修改指令;
b)示例:SQL>edit
6)Spoolon/Spooloff:
a)作用:保存SQL/PLUS中的结果;
b)用法:spool保存路径spooloff将文件保存到指定的路径中;
7)Start或者@:
a)作用:执行文本的批处理命令;
b)介绍:在系统开发的时候会将创建数据库、表和对象的语句写在一个文本文件中,在执行的时候可以一次性的批量处理;
8)Desc
a)作用:结构的命令;
b)示例:SQL>Descscott.emp
9)ShowUser:
a)作用:查看当前用户;
b)示例:ShowUser
8.Oracle的结构:
1)Oracle服务器:
a)简介:在一个服务器中,每一个运行的Oracle数据库都与一个数据库实例相联系;
b)贴士:实例是访问数据库的手段;
c)实例与数据库的关系:1对1或者是n对1;
d)提示:在任何情况下,每个实例只可以对应一个数据库;
2)Oracle11g动态内存管理:
a)内存是影响数据库性能的重要因素;
b)静态内存管理:
在数据库系统中,无论用户是否有连接,也无论并发用量大小,只要数据库在运行,就会分配固定大小的内存;
c)动态内存管理:
i.允许数据库服务运行时对内存的大小进行修改,读取大数据块时使用大的内存,小数据块时使用小的内存,读取标准内存块时使用标准内存设置;
d)Oracle数据库内存部分:
i.系统全局区:SGASystemGlobalArea
ii.程序全局区:PGAProgrameGlobalArea;
iii.排序池:SortArea
iv.大池:LargePool
v.Java池:JavaPool
3)Oracle实例进程结构:(PreocessStruture):
a)Oracle包含三类进程;
i.用户进程:UserProcess
ii.服务器进程:ServerProcess
iii.后台进程:BackgroundProcess
b)提示:服务器进程时用户进程与服务器交互的桥梁,它可以与OracleServer交互;
c)提示:服务器进程可以有共享和独占两种形式;
d)查询后台进程方法:select*fromv$bgprocesswherepaddr<>’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)权限:用户必须拥有GREATETABLESPACE的权限才能创建表空间,所有的表空间都应该由DBA来创建,避免出现管理问题;
b)创建案例:
c)修改表空间:扩展表空间-该表数据大小:
d)扩展表空间—添加数据文件
e)修改表空间的名称:
f)删除表空间:
6)Oracle中的用户、角色和权限:
a)控制对象的分类:
i.操作系统的功能;
ii.用户创建的数据或者是对象;
b)操作对象的权限称为:系统权限和对象权限;
c)连接权限:CONNECT
d)操作权限:RESOURCE
7)提示:一个新的用户创建了必须进行授权:
a)SQL>GRANTCONNECTTOUSER_NAME连接权限;
b)SQL>GRANTRESOURCETOUSER_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)查询系统的当前时间:selectsysdatefromdual;
4)插入日期类型的数据:
a)To_date(‘2007-02-07’,’yyy-mm-dd’);
5)指定日期输出:
a)Selectto_char(sysdate,’yyyy-mm-dd’)fromdual;
5.大对象类型:
1)BLOB:大二进制对象,可存储达:4GB的数据;
2)CLOB:大字符对象,每条记录存储达:4GB;,数据本身被记录在表中;
3)Long:存储大型可变长字符串,字符串大小不超过2GB;
6.空类型:NULL
1)空值不等于空字符;
2)空值+字符仍人是空值;
3)空值与数字比较结果为空值;
7.特殊类型:
1)ROWID:
a)简介:ROWID在Oracle数据库中是一个虚拟的列,即系统用的特殊的列;
b)作用:用于对数据库中的每条记录进行定位;
c)值的组成:值中记录有该记录所在的硬盘、磁道、数据块等信息,用于记录该记录在硬盘上的物理和逻辑位置;
d)优势:利用ROWID可以最快的找到该记录;
2)UROWID:
a)简介:是UniversalROWID的意思:全球ROWID;
b)特点:支持逻辑和物理ROWID;
c)特点:UROW类型可以存储所有的ROWID类型的数据;
8.SQL查询语句:
1)数据定义语言:DDL
a)作用:主要用于创建、删除数据库的对象和维护数据对象的属性;
b)主要命令:createdropalter;
c)万事万物皆对象;
d)创建备份数据表:createtabeempBakasselect*fromemp;
e)删除表格:droptableattest
f)修改表格字段:
i.添加字段:altertablestudentadd(addressvarchar(50));
ii.修改字段:altertablestudentmodify(addressvarchar2(60));
iii.删除字段:altertablestudentdrop(address);
2)数据操作语言:DML
a)简介:主要是对表数据操作的一些指令,包括:select、insertupdatedelete;
3)数据控制语言:DCL:
a)简介:主要用于对数据库中权限的授予和取消;
b)权限分类:系统权限和对象权限;
c)系统权限:Oracle系统的功能点;
d)对象权限:其他用户操作该对象的能力;
e)系统授权用户语法:
i.SQL>grant系统权限to用户名
ii.例如:SQL>GRANTCREATEANYTABLETOHOPE;
f)将角色的权限赋予用户语法以及常用角色:
i.语法:grantconnectiontohope;
ii.Connect基本连接;
iii.Resource资源使用;
iv.DBA:数据库管理
g)给用户授予对象权限:
i.语法:grant对象权限名|Allon对象名to用户名
ii.示例:grantselectonemptohope;
h)REVOKE用于回收权限:
i.语法:revoke系统权限名from用户名;
ii.语法:revoke对象权限名on对象名from用户名;
iii.示例:revokeconnectionfromhope;
iv.示例:revokeselectonempfromhope,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)UNIONALL不会排除重复的记录;
d)UNIONALL比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.示例:selecttrim(‘abc’)fromdual===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)排序函数,同SQLServer
三、第三章分区表和锁
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)语法:partitionbyHASH(列)partition8;
b)创建分区表,能指定名称;partitonbyhash(列)(partitionp1,partitionp2);
c)能指定分区存储的表空间:partitionbyhash(列)partition3storein(ORD1,ORD3,ORD3)
3)创建复合分区:
a)符合分区可以是范围分区和列表的组合,页可以是范围分区和散列的组合;
b)语法:
5.分区表的维护:
1)查询分区表:select*fromatablepartition(p2);
2)增加分区表:增加分区表的分区一定是最后一个分区;
a)语法:altertableatableaddpartitionp3valueslessthan(3001)tablespacehope2;
3)删除一分区:altertableatabledroppartitionp3;
4)拆分分区:atertableatablesplitpartitionp3at(1050)into(partititonp4,partitionp5);
5)合并分区:altertableatablemergepartitionsp4,p5intopartitionp5;
6)分区改名:altertableatablerenamepartitionp3top4;
7)将分区该表空间:altertableatablemovepartitionp4tablespacehope2;
6.锁机制:
1)锁的目的:为了保证数据访问的完整性和一致性;
2)数据库锁的分类:
a)DML锁:datalocks,数据锁,用于保护数据的完整性;
b)DDL锁:dictionarylocks,字典锁,用户保护数据库对象的结构,例如:表,索引等结构定义;
c)内部锁:internallocks,用户保护数据库的内部结构;
d)悲观锁:悲观锁的实现,往往依靠数据库提供的锁机制;
e)乐观锁:乐观锁的实现,长依赖应用程序;
3)锁的类型:DML
a)根据锁定的范围DML锁包括:TM锁(表级锁),TX锁(行级锁)
b)锁定后使用资源的方式有两种模式:
i.排他模式:EXCLUSIVE,不允许其他任何并发会话以任何方式共享锁定的资源,修改数据时需要这种锁;
ii.共享模式:SHARE,允许对同一块数据的并发读访问,在更改数据时上升为排他模式;
c)系统锁的模式:
i.0:NONE无
ii.1:NULL空
iii.2:ROWSHARE行共享RS
iv.3:ROWEXCLUSIVE行排他RX
v.4:SHARE共享锁S
vi.5:sharerowexclusive共享排他SRX
vii.6:EXCLUSIVE排他锁X
viii.提示:0级和1级别的锁不会对其他操作产生限制,其余的参照说明,级别越高,对操作的限制越多;
4)加锁:隐式和显式
a)隐式加锁:系统自动加;
b)显示加锁:语法:locktable表名in[ROWSHARE|ROWEXCLUSIVE|SHAREROWEXCLUSIVE|EXCLUSIVE]MODE
c)没有主外键关联的时候,进行DML操作时,自动添加行排他锁;
d)有主外键关联的时候,进行DML操作时,操作表添加行排他锁,关系表添加行共享锁;
e)例如:selectfromempwheredeptno=30forupdate,这样系统给表加上级别为3的锁,行排他锁RX
5)锁的互斥:
a)在同一个会话中可以重复的对一个表加锁,各级别间的锁没有互斥性;
6)死锁:
a)死锁的解除方法:选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁;
b)注意:对于撤销的事务所执行的数据修改操作必须加以恢复;
四、第四章数据库对象
1.常用对象:同义词、序列和视图;
2.索引好处:提高表数据的查询速度;
3.同义词:
1)作用:为方便对数据的操作,用户为对象创建别名,用于简化查询语句;这个别名称为同义词;
2)分类:私有同义词和公有同义词
a)私有同义词:只有创建者能访问;
b)公有同义词:所有的Oracle对象都可以访问;
3)创建私有同义词
a)创建私有同义词权限:createanysynonym和dropanysynonym两种权限,方可建立和删除同义词;
b)语法:createsynonym同义词名for对象名;
c)提示:如需对数据进行数据查询直接访问同义词即可;
4)创建公有同义词:
a)权限:createpublicsynonym和droppublicsynonym,才可以管理公有同义词;
b)提示:其他用户虽然可以使用公有同义词,但操作同义词时要依赖同义词所关联的对象;
5)删除同义词:
a)语法:dropsynonym同义词名;
b)公有同义词:droppublicsynonym同义词名;
4.序列:
1)序列是Oracle中按照一定规则提供连续数字的对象;
2)创建序列:
3)创建序列注意事项:
a)序列的起始值必须大于等于最小值,小于等于最大值;
b)序列的步长可以为负数,从大到小;
c)序列如果启用缓存值,缓存中的最大值要小于等于序列的最大值;
d)序列启用了循环,如果步长为正,循环的起始值为最小值,如果步长为负,循环的起始值为最大值;
4)修改序列:
a)Altersequencestu_idincrementby1nomaxvaluenocyclecache10;
b)注意:修改序列时不可以修改序列的起始值;
5)使用序列:
a)属性:nextval:获取一个新的序列值;
b)属性:currval:获取序列当前的值;
c)提示:可以通过序列向数据表中插入值;
6)删除序列:
a)语法:dropsequecncestu_id;
5.视图:
1)目的:就是简化用于查询所使用的语句,还可以在程序和数据库表结构之间为开发起到一个缓冲的作用,同时可以达到安全和保密的目的;利用视图,我们可以在查询处理完成复杂的操作;
2)注:视图只是一个逻辑表,它自己不包含任何数据;
3)视图状态:status=’invalid’名称表示:object_type=”view”
4)带约束的视图:保证查询的条件的字段不能被修改:
a)SQL>CREATEVIEWEMPVIEW30ASSELECT*FROMEMPWHEREDEPTNO=30WITHCHECKOPTION;
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)语法:setserveroutputon;
b)在客户端的输出语句:DBMS_OUTPUT.PUT_LINE();函数;
6.PL/SQL中常量和变量的声明:
1)DeclareaEMP.EMPNO%TYPE;COUNTINT;BEGIN….END;
2)获取表中列数据的类型:emp.id%type;
3)获取表中行的类型:EMP%ROWTYPE;
7.PL/SQL中的赋值:
1)变量声明中赋值:一种使用:default二种使用::=
2)例如:DECLARECOUNTINTDEFAULT12;SALINT:=35;BEGIN…END;
3)程序中的赋值:
a)使用::=进行赋值
b)使用查询语句进行赋值;
c)提示:在PL/SQL中SELECT查询只能作为赋值语句,不能使用单独的查询语句;
8.PL/SQL中控制语句:
1)条件控制:
a)If条件表达式then执行语句elsif条件表达式then执行语句ENDIF;
b)Case多元条件控制:
i.case字符串变量
ii.when结果值then执行语句;
iii.when结果值then执行语句;
iv.else执行语句;
v.endcase;
2)循环控制:
a)基本形式:LOOP….ENDLOOP;之间的语句将无限次的执行,跳出使用:exitwhen条件表达式;
b)语法:
i.LOOP
ii.EXITWHEN条件表达式;
iii.执行语句;
iv.ENDLOOP;
c)FOR的循环控制:变量的定义不用声明,变量的边界值也会进入到循环;
i.FOR变量IN起始值..结束值
ii.LOOP
iii.……
iv.ENDLOOP;
d)WHILE循环控制:
i.WHILE条件表达式
ii.LOOP
iii.….
iv.ENDLOOP;
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语句:EXECUTEIMMEDIATE‘SQL语句字符串’;
3)例如,创建一个表:
i.DECLARE
ii.EXECUTEIMMEDIATE
iii.‘CREATETABLE….’;
iv.END;
4)提示:执行SQL的时候,我们可以传入一些参数,首先在构造动态SQL语句的时候要给参数留下占位符,执行动态SQL的时使用USING传入参数,按先后顺序传入;
5)占位符::1:2:3
6)使用参数:EXECUTEIMMEDIATEsqlStringUSING参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.DECLARECURSOR游标变量IS游标的查询语句;
ii.BEGIN
iii.FOR查询变量IN游标变量
iv.LOOP
v.。。。
vi.ENDLOOP;
vii.END;
5)利用游标修改数据:
a)游标的目的不仅仅时查询数据,绝大部分时修改数据,逐条获取,逐条处理;
b)利用游标修改数据,需要在打开游标的时候就进行数据的锁定;
c)锁定语法:CURSOR游标名称IS查询语句FORUPDATE;
d)对当前游标进行修改或删除的语法:
i.UPDATE语句WHERECURSOROF游标名称;
ii.DELETE语句WHERECURRENTOF游标名称;
4.引用游标:
1)由来:无法在游标声明的时候就确定游标的查询语句,需要根据业务逻辑过程确定查询,引用游标可以提供这种灵活性;
七、第七章子程序和程序包
1.定义:
1)系统中有些固定的数据库操作,对这些固定操作定义存储过程;
2.作用:可以简化客户端的应用程序的开发和维护,提高应用的运行性能;
3.带参数的存储过程:
1)IN:读入参数,主程序向过程传递参数值;
2)OUT:读出参数,过程向主程序传递参数值;
3)INOUT:双向参数,过程与主程双向交流数据;
4.函数:
1)定义:类似于过程;
2)特点:过程调用本身时一个PL/SQL语句,而函数嗲用时作为表达式的一部分执行的;
3)与过程的参数类似,函数的参数表时可选的,并且函数声明部分和函数调用都没有使用括弧;由于函数调用时表达式的一部分,所以函数返回类型是必须要有的;
4)例如:
a)CREATEORREPLACEFUNCTIONMYADD(AINT,BINT)RETURNINT
b)AS
c)BEGIN
d)RETURNA+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.自主事务处理:pragmaautonomous_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)createorreplacetriggertri_name
2){before|after|insteadof}
3)On触发源
4)Referencing_clause
5)[when触发条件]
6)[foreachrow]
7)触发执行语句;
6.行级触发器:
a)在操作数据的时候每条记录修改都会被激发;
b)内置对象:NEW和OLD
c)注意:在条件表达式中使用NEW和OLD对象不需要加:,非表达式中使用:NEW.SID来获取字段的值;
7.语句级触发器:
a)在触发的时候无论DML语句修改多少条记录,触发器的主体只会执行一次;
8.替代触发器:
a)替代触发器被激发来代替执行修改视图的DML语句;
b)一下情况的视图不可更改:
1)集合操作;
2)分组计算函数;
3)Connectby或startwith
4)去除多行distinct
c)以上视图不能直接操作,而使用触发器进行转换;
9.变异表:
a)变异表是触发器触发源语句正在修改的表或者被修改表的级联表,对于行级触发器,如果触发器的执行语句修改的表是变异表中的记录,会引发异常;
10.触发器管理:
a)对已经创建好的触发器可以通过启用和禁用触发器进行管理;
b)对单一触发器管理:altertrigger触发器名称disable|enable
c)多个触发器:altertable表名disable|enablealltriggers;
11.内置程序包
a)Oracle也提供了若干个具有特殊功能的内置包;
1)DBMS_OUTPL/SQL中的输入和输出显示;
2)DBMS_JOB任务调度服务;
3)DBMS_LOB大型对象操作;
4)DBMS_PIPE数据库管道,允许会话间通信;
5)DBMS_SQL动态SQL
6)UTL_FILE文本文件的输入与输出;