1、Oracle从入门到精通明日科技 Oracle,西方人认为有“神谕、预言”之意,中国人则译作“甲骨文”,是当今世界最强大的数据库软件。所有这一切要从IBM的一篇论文谈起,1970年的6月,IBM公司的研究员埃德加考特发表了一篇著名的论文大型共享数据库数据的关系模型,这可以称之为数据库发展史上的一个转折点。在当时还是层次模型和网状模型的数据库产品占据市场主要位置的情况下,从这篇论文开始,拉开了关系型数据库软件革命的序幕。1977年6月,Larry Ellison与Bob Miner和Ed Oates在硅谷共同创办了一家名为“软件开发实验室”的软件公司(Oracle公司的前身,英文缩写SDL)。在
2、Oates看到了埃德加考特的那篇著名的论文连同其他几篇相关的文章之后,非常兴奋,他找来Ellison和Miner共同阅读,Ellison和Miner也预见到关系型数据库软件的巨大潜力。于是,这3个数据库界的巨人开始共同筹划构建可商用的关系型数据库管理系统(英文缩写RDBMS),并把这种商用数据库产品命名为Oracle。因为他们相信,Oracle(字典里的解释有“神谕、预言”之意)是一切智慧的源泉,这样当今世界最强大、最优秀的Oracle数据库诞生了。简述简述Oracle的发展史的发展史关系型数据库的基本理论本讲大纲:1、关系型数据库与数据库管理系统3、关系型数据库的设计范式2 2、关关系型系型
3、数数据据库库的的E-RE-R模型模型关系型数据库与数据库管理系统 在关系数据模型中,关系可以看成由行和列交叉组成的二维表格,表中一行称为一个元组,可以用来标识实体集中的一个实体。表中的列称为属性,给每一列起一个名称即为属性名,表中的属性名不能相同。列的取值范围称为域,同列具有相同的域,不同的列也可以有相同的域。表中任意两行(元组)不能相同。能唯一标识表中不同行的属性或属性组(即多个属性的组合)称为主键或复合主键。1实体和属性 实体是一个数据对象,是指客观存在并可以相互区分的事物,如一个教师、一个学生、一个雇员等等。每个实体由一组属性来表示,如,一个具体的学生拥有学号、姓名、性别和班级等属性,其
4、中学号可以唯一标识具体某个学生这个实体。具有相同属性的实体组合在一起就构成实体集即实体集是实体的集合,而实体则是实体集中的某一个特例,例如,王同学这个实体就是学生实体集中的一个特例。2联系 在实际应用中,实体之间是存在联系的,这种联系必须在逻辑模型中表现出来。在E-R模型中,联系用菱形表示,菱形框内写明“联系名”,并用“连接线”将有关实体连接起来,同时在“连接线”的旁边标注上联系的类型,两个实体之间的联系类型可以分为3类。关系型数据库的E-R模型1增强信息生命周期管理和存储管理能力 2全面回忆数据变化3最大限度提高信息可用性4Oracle快速文件 5更快的XML6透明的加密 7嵌入式OLAP行
5、列8连接汇合和查询结果高速缓存9增强了应用开发能力 Oracle 11g的新功能的新功能Oracle 11g的安装与卸载本讲大纲:1、Oracle 11g的安装2 2、Oracle 11gOracle 11g的卸的卸载载Oracle 11g的管理工具本讲大纲:1、SQL*Plus工具2 2、OracleOracle企企业业管理器管理器3 3、数数据据库库配置助手配置助手SQL*Plus工具 选择“开始”/“所有程序”/“Oracle-OraDb11g_home1”/“应用程序开发”/“SQL*Plus”命令,打开的命令窗口如下图所示。Oracle企业管理器 Oracle Enterprise
6、Manager(OEM)是基于WEB界面的Oracle数据库管理工具。启动Oracle 11g的OEM只需在浏览器中输入其URL地址通常为https:/localhost:1518/em,然后连接主页即可;也可以在“开始”菜单的“Oracle程序组”中选择“Database Control-orcl”菜单命令来启动Oracle 11g的OEM工具。数据库配置助手 在 开 始 菜 单 中 选 择“所 有 程 序”/“O r a c l e -OraDb11g_home1”/“配置和移植工具”/“Database Configuration Assistant”菜单命令,就会打开如图所示的窗口。启
7、动与关闭数据库实例本讲大纲:1、启动数据库实例2 2、关闭数关闭数据据库实库实例例启动数据库实例 Oracle数据库实例的启动过程分为3步骤,分别是启动实例、加载数据库、打开数据库。用户可以根据实际情况的需要,以不同的模式启动数据库,启动数据库所使用的命令格式如下。STARTUP nomount|mount|open|force resetrict pfile=filename关闭数据库实例 与启动数据库实例相同,关闭数据库实例也分为3个步骤,分别是关闭数据库、卸载数据库、关闭Oracle实例。在SQL*Plus中,可以使用shutdown语句关闭数据库,其具体语法格式如下:SHUTDOWN
8、normal|transactional|immediate|abort 在Oracle数据库管理系统中有3个重要 的 概 念 需 要 理 解,那 就 是 实 例(Instance)、数据库(Database)和数据库服务器(Database Server)。其中,实例是指一组Oracle后台进程以及在服务器中分配的共享内存区域;数据库是由基于磁盘的数据文件、控制文件、日志文件、参数文件和归档日志文件等组成的物理文件集合;数据库服务器是指管理数据库的各种软件工具(比如,sqlplus、OEM等)和实例及数据库三个部分。从实例与数据库之间的辩证关系来讲,实例用于管理和控制数据库;而数据库为实例提
9、供数据。一个数据库可以被多个实例装载和打开;而一个实例在其生存期内只能装载和打开一个数据库。ORACLE 11g体系结构概述体系结构概述逻辑存储结构本讲大纲:1、数据块(Data Blocks)3、段(Segment)2 2、数数据据区区(ExtentExtent)4、表空间(TableSpace)数据块(Data Blocks)数据块是Oracle逻辑存储结构中的最小的逻辑单位,也是执行数据库输入输出操作的最小存储单位。Oracle数据存放在“Oracle数据块”中,而不是“操作系统块”中。通常Oracle数据块是操作系统块的整数倍,如果操作系统快的大小为2048B,并且Oracle数据块的
10、大小为8192B,则表示Oracle数据块由4个操作系统块构成。Oracle数据块有一定的标准大小,其大小被写入到初始化参数DB_BlOCK_SIZE中。另外,Oracle支持在同一个数据库中使用多种大小的快,与标准块大小不同的块就是非标准块。数据区(也可称作数据扩展区)是由一组连续的Oracle数据块所构成的Oracle存储结构,一个或多个数据块组成一个数据区,一个或多个数据区再组成一个段(Segment)。当一个段中的所有空间被使用完后,Oracle系统将自动为该段分配一个新的数据区,这也正符合Extent这个单词所具有的“扩展”的含义,可见数据区是Oracle存储分配的最小单位,Orac
11、le就以数据区为单位进行存储控件的扩展。使用数据区的目的是用来保存特定数据类型的数据,也是表中数据增长的基本单位。在Oracle数据库中,分配存储空间就是以数据区为单位的。一个Oracle对象包含至少一个数据区。设置一个表或索引的存储参数包含设置它的数据区大小。数据区(Extent)段(Segment)数据区(也可称作数据扩展区)是由一组连续的Oracle数据块所构成的Oracle存储结构,一个或多个数据块组成一个数据区,一个或多个数据区再组成一个段(Segment)。当一个段中的所有空间被使用完后,Oracle系统将自动为该段分配一个新的数据区,这也正符合Extent这个单词所具有的“扩展”
12、的含义,可见数据区是Oracle存储分配的最小单位,Oracle就以数据区为单位进行存储控件的扩展。使用数据区的目的是用来保存特定数据类型的数据,也是表中数据增长的基本单位。在Oracle数据库中,分配存储空间就是以数据区为单位的。一个Oracle对象包含至少一个数据区。设置一个表或索引的存储参数包含设置它的数据区大小。表空间(TableSpace)Oracle使用表空间将相关的逻辑结构(比如段、数据区等)组合在一起,表空间是数据库的最大逻辑划分区域,通常用来存放数据表、索引、回滚段等数据对象(即Segment),任何数据对象在创建时都必须被指定存储在某个表空间中。表空间(属逻辑存储结构)与数
13、据文件(属物理存储结构)相对应,一个表空间由一个或多个数据文件组成,一个数据文件只属于一个表空间;Oracle数据的存储空间在逻辑上表现为表空间,而在物理上表现为数据文件。举个例子来说,表空间相当于操作系统中的文件夹,而数据文件就相当于文件夹中的文件。每个数据库至少有一个表空间(即SYSTEM表空间),表空间的大小等于所有从属于它的数据文件大小的总和。物理存储结构本讲大纲:1、数据文件3、日志文件4、服务器参数文件5、密码文件、警告文件和跟踪文件2 2、控制文件控制文件数据文件 数据文件是用于保存用户应用程序数据和Oracle系统内部数据的文件,这些文件在操作系统中就是普通的操作系统文件,Or
14、acle在创建表空间的同时会创建数据文件。Oracle数据库在逻辑上由表空间组成,每个表空间可以包含一个或多个数据文件,一个数据文件只能隶属于一个表空间。控制文件是一个二进制文件,它记录了数据库的物理结构,其中主要包含数据库名、数据文件与日志文件的名字和位置、数据库建立日期等信息。控制文件一般在Oracle系统安装时或创建数据库时自动创建,控制文件所存放的路径由服务器参数文件spfileorcl.ora的control_files参数值来指定。由于控制文件存放有数据文件、日志文件等的相关信息,因此,Oracle实例在启动时必须访问控制文件。如果控制文件正常,实例才能加载并打开数据库;但若控制文
15、件中记录了错误的信息,或者实例无法找到一个可用的控制文件,则实例无法正常启动。控制文件控制文件 日志文件的主要功能是记录对数据所作的修改,对数据库所作的修改几乎都记录在日志文件中。在出现问题时,可以通过日志文件得到原始数据,从而保障不丢失已有操作成果。Oracle的日志文件包括重做日志文件(Redo Log File)和归档日志文件(Archive Log File),它们是Oracle系统的主要文件之一,尤其是重做日志文件,它是Oracle数据库系统正常运行所不可或缺的。下面将介绍这两种日志文件。日志文件服务器参数文件 服务器参数文件SPFILE(Server parameter File)
16、是二进制文件,用来记录了Oracle数据库的基本参数信息(如,数据库名、控制文件所在路径、日志缓冲大小等)。数据库实例在启动之前,Oracle系统首先会读取SPFILE参数文件中设置的这些参数,并根据这些初始化参数来配置和启动实例。比如,设置标准数据块的大小(即参数db_block_size的值)、设置日志缓冲区的大小(即参数log_buffer的值)等等,所以SPFILE参数文件非常重要。服务器参数文件在安装Oracle数据库系统时由系统自动创建,文件的名称为SPFILEsid.ora,sid为所创建的数据库实例名。与早期版本的初始化参数文件INITsid.ora不同的是,SPFILE中的参
17、数由Oracle系统自动维护,如果要对某些参数进行修改,则尽可能不要直接对SPFILE进行编辑,最好通过企业管理器(OEM)或ALTER SYSTEM命令来修改,所修改过的参数会自动写到SPFILE中。Oracle系统运行时,除了必须的数据文件、控制文件、日志文件及服务器参数文件外,还需要一些辅助文件,如,密码文件、警告文件和跟踪文件,下面将对这些辅助文件进行简单的介绍。密码文件、警告文件和跟踪文件Oracle 11g服务器结构本讲大纲:1、系统全局区(SGA)2、程序全局区(PGA)3、前台进程4、后台进程系统全局区(SGA)系统全局区(System Global Area)是所有用户进程共
18、享的一块内存区域,也就是说,SGA中的数据资源可以被多个用户进程共同使用。SGA主要由高速数据缓冲区、共享池、重做日志缓存区、java池和大型池等内存结构组成。SGA随着数据库实例的启动而加载到内存中,当数据库实例关闭时,SGA区域也就消失了。程序全局区(PGA)程序全局区(Program Global Area)也可称作用户进程全局区,它的内存区在进程私有区而不是共享区中。虽然PGA是一个全局区,可以把代码、全局变量和数据结构都可以存放在其中,但区域内的资源并不像SGA一样被所有的用户进程所共享,而是每个Oracle服务器进程都只拥有属于自己的那部分PGA资源。在程序全局区(PGA)中,一个
19、服务进程只能访问属于它自己的那部分PGA资源区,各个服务进程的PGA区的总和即为实例的PGA区的大小。通常PGA区由私有SQL区和会话区组成。前台进程1用户进程 用户进程是指那些能够产生或执行SQL语句的应用程序,无论是SQL*Plus,还是其它应用程序,只要是能生成或执行SQL语句,都被称作用户进程。2服务器进程 服务进程就是用于处理用户会话过程中向数据库实例发出的SQL语句或SQL*Plus命令,它可以分为专用服务器模式和共享服务器模式。后台进程 Oracle后台进程是一组运行于Oracle服务器端的后台程序,是Oracle实例的重要组成部分。进程包括DBWR、CKPT、LGWR、ARCH
20、、SMON、PMON、LCKN、RECO、DNNN、SNPN。其中SMON、PMON、DBWR、LGWR和CKPT这5个后台进程必须正常启动,否则将导致数据库实例崩溃。此外,还有很多辅助进程,用于实现相关的辅助功能,如果这些辅助进程发生问题,只是某些功能受到影响,一般不会导致数据库实例崩溃。数据字典本讲大纲:1、Oracle数据字典简介2 2、OracleOracle常用数据字典常用数据字典Oracle数据字典简介 Oracle数据字典的名称由前缀和后缀组成,使用下划线“_”连接,其代表的含义如下:(1)DBA_:包含数据库实例的所有对象信息。(2)V$_:当前实例的动态视图,包含系统管理和系
21、统优化等所使用的视图。(3)USER_:记录用户的对象信息。(4)GV_:分布式环境下所有实例的动态视图,包含系统管理和系统优化使用的视图。(5)ALL_:记录用户的对象信息机被授权访问的对象信息。Oracle常用数据字典数据字典名称数据字典名称说说 明明dba_tablespaces关于表空间的信息关于表空间的信息dba_ts_quotas所有用户表空间限额所有用户表空间限额dba_free_space所有表空间中的自由分区所有表空间中的自由分区dba_segments描述数据库中所有段的存储空间描述数据库中所有段的存储空间dba_extents数据库中所有分区的信息数据库中所有分区的信息d
22、ba_tables数据库中所有数据表的描述数据库中所有数据表的描述数据字典名称数据字典名称说说 明明v$database描述关于数据库的相关信息描述关于数据库的相关信息v$datafile数据库使用的数据文件信息数据库使用的数据文件信息v$log从控制文件中提取有关重做日志组的信息从控制文件中提取有关重做日志组的信息v$logfile有关实例重置日志组文件名及其位置的信息有关实例重置日志组文件名及其位置的信息 SQL*Plus工具主要用来进行数据查询和数据处理。利用SQL*Plus可将SQL和Oracle专有的PL/SQL结合起来进行数据查询和处理。SQL*Plus工具具备以下功能:(1)定义
23、变量,编写SQL语句。(2)插入、修改、删除、查询,以及执行命令和PL/SQL语句。比如,执行show parameter命令。(3)格式化查询结构、运算处理、保存、打印机输出等。(4)显示任何一个表的字段定义,并实现与用户进行交互。(5)完成数据库的几乎所有管理工作。比如,维护表空间和数据表。(6)运行存储在数据库中的子程序或包。(7)以sysdba身份登录数据库实例,可以实现启动/停止数据库实例。SQL*Plus与数据库的交互与数据库的交互设置SQL*Plus的运行环境本讲大纲:1、简介SET命令2 2、使用使用SETSET命令设置运行环境命令设置运行环境简介SET命令 在Oracle 1
24、1g数据库中,用户可以使用SET命令来设置SQL*Plus的运行环境,SET命令的语法格式为:SET system_variable value 参数system_variable表示变量名,参数value表示变量值。1PAGESIZE变量2NEWPAGE变量3LINESIZE变量4PAUSE变量5NUMFORMAT变量使用SET命令设置运行环境常用SQL*Plus命令本讲大纲:1、HELP命令3、SPOOL命令 4、其它常用命令2 2、DESCRIBEDESCRIBE命令命令HELP命令 HELP命令的语法形式如下。HELP|?topic DESCRIBE命令的语法形式如下:describe
25、 object_name;describe可以缩写为desc,object_name表示将要查询的对象名称。DESCRIBE命令命令 SPOOL命令的语法格式如下:SPOOL file_name.ext CREATE|REPLACE|APPEND|OFF|OUT 参数file_name用于指定脱机文件的名称,默认的文件扩展名为LST。SPOOL命令其它常用命令1DEFINE命令2SHOW命令3EDIT命令4SAVE命令5GET命令6start和命令格式化查询结果本讲大纲:1、COLUMN命令2 2、TTITLETTITLE和和BTITLEBTITLE命令命令COLUMN命令 该命令可以实现格式
26、化查询结果、设置列宽度、重新设置列标题等功能。其语法格式如下:COLUMN column_name|alias|optioncolumn_name:用于指定要设置的列的名称。alias:用于指定列的别名,通过它可以把英文列标题设置为汉字。option:用于指定某个列的显示格式,TTITLE和BTITLE命令 TTITLE命令的语法格式如下:TTITLE printspec text|variable.|OFF|ON text:用于设置输出结果的头标题(即报表头文字)。variable:用于在头标题中输出相应的变量值。OFF:表示禁止打印头标题。ON:表示允许打印头标题。SQL语言简介本讲大纲:
27、1、SQL语言的特点3、SQL语言的编写规则2 2、SQLSQL语言的分类语言的分类SQL语言的特点 SQL语言主要有以下特点。(1)集合性SQL可以在高层的数据结构上进行工作,工作时不是单条的处理记录,而对数据进程成组的处理。所有SQL语句都接受集合作为输入,并且返回集合作为输出,SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句的输入。(2)统一性SQL为许多任务提供了统一的命令,这样方便用户学习和使用,基本的SQL命令只需很少时间就能学会,甚至最高级的命令也可以在几天内掌握。(3)易于移植性由于所有主要的关系型数据库管理系统都支持SQL语言,这样用户就比较容易将原先使用SQL的
28、技能从一个RDBMS转到另一个,而且用兼容SQL标准编写的程序都是可以移植的。(1)数据查询语言(DQL)(2)数据操纵语言(DML)(3)事务控制语言(TCL)(4)数据定义语言(DDL)(5)数据控制语言(DCL)SQL语言的分类SQL语言的编写规则 SQL关键字不区分大小写,既可以使用大写格式,也可以使用小写格式,或者大小写格式混用。用户模式本讲大纲:1、模式与模式对象2 2、示例模式、示例模式SCOTTSCOTT模式与模式对象 模式是一个数据库对象的集合。模式为一个数据库用户所有,并且具有与该用户相同的名称,比如,SYSTEM模式、SCOTT模式等。在一个模式内部不可以直接访问其它模式
29、的数据库对象,即使在具有访问权限的情况下,也需要指定模式名称才可以访问其它模式的数据库对象。模式对象是由用户创建的逻辑结构,用以存储或引用数据。例如,前面章节中所讲过的段(比如,表、索引等),以及用户所拥有的其它非段的的数据库对象。这些非段的数据库对象通常包括:约束、视图、同义词、过程以及程序包等。那么,简单的说,模式与模式对象之间的关系就是拥有与被拥有的关系,即模式拥有模式对象;而模式对象被模式所拥有。Oracle提供的SCOTT模式的目的,就是为了给用户提供一些示例表和数据来展示Oracle数据库的一些特性。SCOTT模式拥有的模式对象(都是数据表)如图所示。示例模式SCOTT检索数据本讲
30、大纲:1、简单查询3、分组查询 4、排序查询 5、多表关联查询 2 2、筛选查询、筛选查询 简单查询 只包含SELECT子句和FROM子句的查询就是简单查询,SELECT子句和FROM子句是SELECT语句的必选项,也就是说每个SELECT语句都必须包含这两个子句。其中,SELECT子句用于选择想要在查询结果中显示的列,对于这些要显示的列,即可以使用列名来表示,也可以使用星号(*)来表示。在检索数据时,数据将按照SELECT子句后面指定的列名的顺序来显示;如果使用星号(*),则表示检索所有的列,这时数据将按照表结构的自然顺序来显示。在SELECT语句中,WHERE子句位于FROM子句之后,其语
31、法格式如下:SELECT columns_list FROM table_name WHERE conditional_expression筛选查询筛选查询在SELECT语句中,GROUP BY子句位于FROM子句之后,其语法格式如下:SELECT columns_listFROM table_nameWHERE conditional_expressionGROUP BY columns_list分组查询排序查询 在SELECT语句中,可以使用ORDER BY子句对检索的结果集进行排序,该子句位于FROM子句之后,其语法格式如下:SELECT columns_listFROM table_n
32、ameWHERE conditional_expressionGROUP BY columns_listORDER BY order_by_expression ASC|DESC ,.n 在实际的应用系统开发中会设计多个数据表,每个表的信息不是独立存在的,而是若干个表之间的信息存在一定的关系,这样当用户查询某一个表的信息时,很可能需要查询关联数据表的信息,这就是多表关联查询。SELECT语句自身是支持多表关联查询的,多表关联查询要比单表查询复杂得多。在进行多表关联查询时,可能会涉及到表别名、内连接、外连接、自然连接和交叉连接等概念多表关联查询Oracle常用系统函数本讲大纲:1、字符类函数 2
33、 2、数字类函数、数字类函数 3 3、日期和时间类函数、日期和时间类函数 4 4、转换类函数、转换类函数 5 5、聚合类函数、聚合类函数 字符类函数(1)ASCII(c)函数和CHR(i)函数(2)CONCAT(s1,s2)函数(3)INITCAP(s)函数(4)INSTR(s1,s2,i,j)函数(5)LENGTH(s)函数(6)LOWER(s)函数和UPPER函数(s)(7)LTRIM(s1,s2)函数、RTRIM(s1,s2)函数和TRIM(s1,s2)函数(8)REPLACE(s1,s2,s3)函数(9)SUBSTR(s,i,j)函数数字类函数(1)CEIL(n)函数(2)ROUND(
34、n1,n2)函数(3)POWER(n1,n2)函数日期和时间类函数(1)SYSDATE()函数(2)ADD_MONTHS(d,i)函数转换类函数(1)TO_CHAR()函数(2)TO_NUMBER(s,formatlan)函数聚合类函数(1)AVG(xDISTINCT|ALL)函数(2)COUNT(xDISTINCT|ALL)函数(3)SUM(xDISTINCT|ALL)函数子查询的用法本讲大纲:1、什么是子查询 2 2、单行子查询、单行子查询 3 3、多行子查询、多行子查询 4 4、关联子查询关联子查询什么是子查询 子查询是在SQL语句内的另外一条SELECT语句,也被称为内查询或是内SEL
35、ECT语句。在SELECT、INSERT、UPDATE或DELETE命令中允许是一个表达式的地方都可以包含子查询,子查询甚至可以包含在另外一个子查询中。单行子查询 单行子查询是指返回一行数据的子查询语句。当在WHERE子句中引用单行子查询时,可以使用单行比较运算符(=、=、=和)。多行子查询 多行子查询是指返回多行数据的子查询语句。当在WHERE子句中使用多行子查询时,必须使用多行比较符(IN、ANY、ALL)。关联子查询 在当行子查询和多行子查询中,内查询和外查询是分开执行的,也就是说内查询的执行与外查询的执行是没有关系的,外查询仅仅是使用内查询的最终结果。在一些特殊需求的子查询中,内查询的
36、执行需要借助于外查询,而外查询的执行又离不开内查询的执行,这时,内查询和外查询是相互关联的,这种子查询就被称为关联子查询。操作数据库本讲大纲:1、插入数据(INSERT语句)3、删除数据(删除数据(DELETEDELETE语句和语句和TRUNCATETRUNCATE语句)语句)2 2、更新数据(、更新数据(UPDATEUPDATE语句)语句)插入数据(INSERT语句)INSERT语句的法格式如下:INSERT INTO table_name(column_name1,column_name2)VALUES(express1,express2)UPDATE语句的语法格式如下:UPDATE ta
37、ble_nameSET column_name1=express1,column_name2=express2.|(column_name1,column_name2)=(selectSubquery)WHERE condition更新数据(更新数据(UPDATE语句)语句)1、DELETE语句语法如下DELETE FROM table_nameWHERE condition2、TRUNCATE语句语法如下:TRUNCATE TABLE table_name删除数据(DELETE语句和TRUNCATE语句)事务处理本讲大纲:1、事务的概述2 2、操作事操作事务务事务的概述 事务包含4种重要的属
38、性,被统称为ACID(原子性、一致性、隔离性和持久性),一个事务必须通过ACID。(1)原子性(Atomic):事务是一个整体的工作单元,事务对数据库所做的操作要么全部执行,要么全部取消。如果某条语句执行失败,则所有语句全部回滚。(2)一致性(ConDemoltent):事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。如果事务成功,则所有数据将变为一个新的状态;如果事务失败,则所有数据将处于开始之前的状态。(3)隔离性(Isolated):由事务所作的修改必须与其他事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一
39、并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。(4)持久性(Durability):当事务提交后,对数据库所做的修改就会永久保存下来。Oracle 11g中的事务是隐式自动开始的,它不需要用户显示地执行开始事务语句。但对于事务的结束处理,则需要用户进行指定的操作,通常在以下情况时,Oracle认为一个事务结束了。(1)执行COMMIT语句提交事务。(2)指定ROLLBACK语句撤销事务。(3)执行一条数据定义语句,比如,CREATE、DROP或ALTER等语句。如果该语句执行成功,那么Oracle系统会自动执行COMMIT命令;否则,则Oracle系统会
40、自动执行ROLLBACK命令。(4)执行一个数据控制命令,比如,GRANT、REVOKE等控制命令,这种操作执行完毕,Oracle系统会自动执行COMMIT命令。(5)正常地断开数据库的连接、正常地退出SQL*Plus环境,则Oracle系统会自动执行COMMIT命令;否则,则Oracle系统会自动执行ROLLBACK命令。操作事务PL/SQL简介本讲大纲:1、PL/SQL块结构 2 2、代码注释和标示符、代码注释和标示符 PL/SQL块结构 标准PL/SQL块的语法格式如下:DECLARE -声明部分,可选 BEGIN -执行部分,必须 EXCEPTION -异常处理部分,可选 END1单行
41、注释 单行注释由连个连接字符“-”开始,后面紧跟着注释内容。2多行注释 多行注释由/*开头,由*/结尾,这个大多数编程语言是相同的。3PL/SQL字符集 所有的PL/SQL程序元素(比如,关键字、变量名、常量名等)都是由一些字符序列组合而成的,而这些字符序列中的字符都必须取自PL/SQL语言所允许使用的字符集,那么这些合法的字符集主要包括以下内容:u大写和小写字母:A-Z或a-z。u数字:0-9。u非显示的字符:制表符、空格和回车。u数学符号:+,-,*,/,=等。u间隔符:包括(),?,!,;,:,#,%,$,&等。代码注释和标示符数据类型、变量和常量本讲大纲:1、基本数据类型2 2、特殊特
42、殊数数据据类类型型3 3、定定义变义变量和常量量和常量基本数据类型1数值类型 数值类型主要包括NUMBER、PLS_INTEGER和BINARY_INTEGER三种基本类型 2字符类型 字符类型主要包括VARCHAR2、CHAR、LONG、NCHAR和NVARCHAR2等。这些类型的变量用来存储字符串或字符数据。3日期类型 日期类型只有一个种即DATE类型,用来存储日期和时间信息,DATE类型的存储空间是7个字节,分别使用一个字节存储世纪、年、月、天、小时、分钟和秒。4布尔类型 布尔类型也只有一种即BOOLEAN,主要用于程序的流程控制和业务逻辑判断,其变量值可以是TRUE、FALSE或NUL
43、L中的一种。1%TYPE类型 使用%TYPE关键字可以声明一个与指定列名称相同的数据类型,它通常紧跟在指定列名的后面。2RECORD类型,语法如下:type record_type is record (var_member1 data_type not null:=default_value,var_membern data_type not null:=default_value)3%ROWTYPE类型,语法如下:rowVar_name table_name%rowtype;特殊数据类型1定义变量 (长度):=;2定义常量 constant:=;定义变量和常量流程控制语句本讲大纲:1、选择
44、语句2 2、循环语句、循环语句 选择语句1ifthen语句2Ifthenelse语句3ifthenelsif语句4case语句1loop语句loop plsql_sentence;exit when end_condition_ expend loop;2while语句while condition_expression loopplsql_sentence;end loop;3for语句for variable_ counter_name in reverse lower_limit.upper_limit loopplsql_sentence;end loop;循环语句循环语句PL/SQL
45、游标本讲大纲:1、显示游标2 2、游标的属性游标的属性3 3、隐式游标、隐式游标 4 4、通过、通过forfor语句循环游标语句循环游标 显示游标 显示游标是由用户声明和操作的一种游标,通常用于操作查询结果集(即由SELECT语句返回的查询结果),使用它处理数据的步骤包括:声明游标、打开游标、读取游标和关闭游标4个步骤。游标的属性 无论是显式游标还是隐式游标,都具有%found、%notfound、%isopen和%rowcount四个属性,通过这4个属性可以获知SQL语句的执行结果以及该游标的状态信息。下面对这4个属性的功能进行讲解。(1)%found:布尔型属性,如果SQL语句至少影响到一
46、行数据,则该属性为true,否则为fasle。(2)%notfound:布尔型属性,与%found属性的功能相反。(3)%rowcount:数字型属性,返回受SQL语句影响的行数。(4)%isopen:布尔型属性,当游标已经打开时返回true,游标关闭时则为false。隐式游标 在执行一个SQL语句时,Oracle会自动创建一个隐式游标。这个游标是内存中处理该语句的工作区域。隐式游标主要是处理数据操纵语句(如,UPDATE、DELETE语句)的执行结果,当然特殊情况下,也可以处理SELECT语句的查询结果。由于隐式游标也有属性,当使用隐式游标的属性时,需要在属性前面加上隐式游标的默认名称SQL
47、。通过for语句循环游标(1)在for语句中遍历隐式游标中的数据时,通常在关键字“in”的后面提供由SELECT语句检索的结果集,在检索结果集的过程中,Oracle系统会自动提供一个隐式的游标sql。(2)在for语句中遍历显式游标中的数据时,通常在关键字“in”的后面提供游标的名称,其语法格式如下:for var_auto_record in cur_name loop plsqlsentence;end loop;PL/SQL异常处理本讲大纲:1、预定义异常 2 2、自定义异常、自定义异常 预定义异常 当PL/SQL程序违反了Oracle系统内部规定的设计规范时,就会自动引发一个预定义的异
48、常,例如,当除数为零时,就会引发“ZERO_DIVIED”异常。系统预定义异常系统预定义异常说说 明明ZERO_DIVIDE除数为零时引发的异常除数为零时引发的异常ACCESS_INTO_NULL企图为某个未初始化对象的属性赋值企图为某个未初始化对象的属性赋值COLLECTION_IS_NULL企图使用未初始化的集合元素企图使用未初始化的集合元素CURSOR_ALREADY_OPEN企图再次打开一个已经打开过的游标,但在重新打开之前,游标未关企图再次打开一个已经打开过的游标,但在重新打开之前,游标未关闭闭INVALID_CURSOR执行一个非法的游标操作,例如,关闭一个未打开的游标执行一个非法
49、的游标操作,例如,关闭一个未打开的游标INVALID_NUMBER企图将一个字符串转换成一个无效的数字而失败企图将一个字符串转换成一个无效的数字而失败LOGIN_DENIED企图使用无效的用户名或密码连接数据库企图使用无效的用户名或密码连接数据库NO_DATA_FOUNDSELECT INTO语句没有返回数据语句没有返回数据ROWTYPE_MISMATCH主游标变量与主游标变量与PL/SQL游标变量的返回类型不兼容游标变量的返回类型不兼容SELF_IS_NULL使用对象类型时,使用空对象调用其方法使用对象类型时,使用空对象调用其方法自定义异常1错误编号异常 错误号异常是指在Oracle系统发生
50、错误时,系统会显示错误号和相关描述信息的异常,虽然直接使用错误编号也可以完成异常处理,但错误编号较为抽象,不易于用户理解和记忆,对于这种异常,首先在PL/SQL块的声明部分(DECLARE部分)使用EXCEPTION类型定义一个异常变量名,然后使用语句PRAGMA EXCEPTION_INIT为“错误编号”关联“这个异常变量名”,接下来就可以像对待系统预定义异常一样处理了。2业务逻辑异常 在实际的应用中,程序开发人员可以根据具体的业务罗规则自定义一个异常。这样,当用户操作违反业务逻辑规则时,就引发一个自定义异常,从而中断程序的正常执行并转到自定义的异常处理部分。但无论是预定义异常,还是错误编号