【JSU】LJDragon's Oracle course notes In the first semester, junior year

Oracle考前复习

试题结构分析:

1.选择题2x10,共20分(Oracle基本概念,基本SQL语句)

2.判断题1x10,共10分(Oracle基本概念,基本SQL语句)

3.填空题2x10,共20分(Oracle基本概念,基本SQL语句)

4.简答题4x5,共20分(事务的四大特性;游标的四大特性)

5.代码编程30分(PL/SQL编程:游标)

 

备考文档:ORACLE REFERENCES FRO TEST

 

第1篇Oracle基础知识

主要包括Oracle相关概述,体系结构,SQL*Plus命令,SQL语言基础,PL/SQL编程以及过程、函数、触发器和包

第1章 Oracle 11g概述

Oracle的发展史:

1970年的6月,IBM公司的研究员埃德加•考特发表了一篇著名的论文——《大型共享数据库数据的关系模型》,这可以称之为数据库发展史上的一个转折点。

在当时还是层次模型和网状模型的数据库产品占据市场主要位置的情况下,从这篇论文开始,拉开了关系型数据库软件革命的序幕。

1977年6月,Larry Ellison与Bob Miner和Ed Oates在硅谷共同创办了一家名为"软件开发实验室"的软件公司(Oracle公司的前身,英文缩写SDL)。

在Oates看到了埃德加•考特的那篇著名的论文连同其他几篇相关的文章之后,非常兴奋,他找来Ellison和Miner共同阅读,Ellison和Miner也预见到关系型数据库软件的巨大潜力。

于是,这3个数据库界的巨人开始共同筹划构建可商用的关系型数据库管理系统(英文缩写RDBMS),并把这种商用数据库产品命名为Oracle。

因为他们相信,Oracle(字典里的解释有"神谕、预言"之意)是一切智慧的源泉,这样当今世界最强大、最优秀的Oracle数据库诞生了。

关系型数据库的基本理论:

关系型数据库与数据库管理系统:

在关系数据模型中,关系可以看成由行和列交叉组成的二维表格,表中一行称为一个元组,可以用来标识实体集中的一个实体。

表中的列称为属性,给每一列起一个名称即为属性名,表中的属性名不能相同。

列的取值范围称为域,同列具有相同的域,不同的列也可以有相同的域。

表中任意两行(元组)不能相同。能唯一标识表中不同行的属性或属性组(即多个属性的组合)称为主键或复合主键。

关系型数据库的E-R模型:

1.实体和属性

实体是一个数据对象,是指客观存在并可以相互区分的事物,如一个教师、一个学生、一个雇员等等。

每个实体由一组属性来表示,如,一个具体的学生拥有学号、姓名、性别和班级等属性,其中学号可以唯一标识具体某个学生这个实体。

具有相同属性的实体组合在一起就构成实体集—即实体集是实体的集合,而实体则是实体集中的某一个特例,例如,王同学这个实体就是学生实体集中的一个特例。

2.联系

在实际应用中,实体之间是存在联系的,这种联系必须在逻辑模型中表现出来。

在E-R模型中,联系用菱形表示,菱形框内写明"联系名",并用"连接线"将有关实体连接起来,同时在"连接线"的旁边标注上联系的类型,两个实体之间的联系类型可以分为3类。

关系型数据库的设计范式:

第一范式(原子属性不可分):

第二范式(我的理解,即主键):

以"员工工资信息表"为例,若以(员工编码、岗位)为组合关键字(即复合主键),就会存在如下决定关系。

(员工编码,岗位)→(决定)(姓名、年龄、学历、基本工资、绩效工资、奖金)

在上面的决定关系中,还可以进一步拆分为如下两种决定关系。

(员工编码)→(决定)(姓名、年龄、学历)

(岗位)→(决定)(基本工资)

第三范式(我的理解,即外键):

例如,这里以员工信息表(EMPLOYEE)为例,该表中包含员工编号、员工姓名、年龄、部门编码、部门经理等信息,该关系 表的关键字为"员工编号",因此存在如下决定关系:

(员工编码)→(决定)(员工姓名、年龄、部门编码、部门经理)

上面的这个关系表是符合第二范式的,但它不符合第三范式,因为该关系表内部隐含着如下决定关系:

(员工编码)→(决定)(部门编码)→(决定)(部门经理)

Oracle 11g的新功能:

1.增强信息生命周期管理和存储管理能力

2.全面回忆数据变化

3.最大限度提高信息可用性

4.Oracle快速文件

5.更快的XML

6.透明的加密

7.嵌入式OLAP行列

8.连接汇合和查询结果高速缓存

9.增强了应用开发能力

Oracle 11g的管理工具:

1、SQL*Plus工具(一般用那个sql development,有中文语言包,挺不错的)

选择"开始"/"所有程序"/"Oracle-OraDb11g_home1"/"应用程序开发"/"SQL*Plus"命令,打开的命令窗口如下图所示。

2、Oracle企业管理器

Oracle Enterprise Manager(OEM)是基于WEB界面的Oracle数据库管理工具。

启动Oracle 11g的OEM只需在浏览器中输入其URL地址——通常为https://localhost:1518/em,然后连接主页即可;

也可以在"开始"菜单的"Oracle程序组"中选择"Database Control - orcl"菜单命令来启动Oracle 11g的OEM工具。

(我关闭了相关的服务,我的目录为"开始"/"所有程序"/"Oracle-OraDb11g_home1"/ Database Control - orcl,默认是下图所示:)

3、数据库配置助手(*如果要做Oracle开发的话,这是第一步*)

在开始菜单中选择"所有程序"/"Oracle - OraDb11g_home1"/"配置和移植工具"/"Database Configuration Assistant"菜单命令,就会打开如图所示的窗口。

启动与关闭数据库实例

启动:Oracle数据库实例的启动过程分为3步骤,分别是启动实例、加载数据库、打开数据库

用户可以根据实际情况的需要,以不同的模式启动数据库,启动数据库所使用的命令格式如下。

STARTUP
[nomount | mount | open | force] [resetrict] [pfile=filename]

关闭:与启动数据库实例相同,关闭数据库实例也分为3个步骤,分别是关闭数据库、卸载数据库、关闭Oracle实例

在SQL*Plus中,可以使用shutdown语句关闭数据库,其具体语法格式如下:

SHUTDOWN
[normal | transactional | immediate | abort]

第2章 Oracle 11g 体系结构

ORACLE 11g体系结构概述

在Oracle数据库管理系统中有3个重要的概念需要理解,那就是实例(Instance)、数据库(Database)和数据库服务器(Database Server)

其中,实例是指一组Oracle后台进程以及在服务器中分配的共享内存区域

数据库是由基于磁盘的数据文件、控制文件、日志文件、参数文件和归档日志文件等组成的物理文件集合

数据库服务器是指管理数据库的各种软件工具(比如,sqlplus、OEM等)和实例数据库三个部分。

从实例与数据库之间的辩证关系来讲,实例用于管理和控制数据库;而数据库为实例提供数据。一个数据库可以被多个实例装载和打开;

而一个实例在其生存期内只能装载和打开一个数据库。

逻辑存储结构:

1、数据块(Data Blocks)

数据块是Oracle逻辑存储结构中的最小的逻辑单位,也是执行数据库输入输出操作的最小存储单位

Oracle数据存放在"Oracle数据块"中,而不是"操作系统块"中。

通常Oracle数据块是操作系统块的整数倍,如果操作系统快的大小为2048B,并且Oracle数据块的大小为8192B,则表示Oracle数据块由4个操作系统块构成。

Oracle数据块有一定的标准大小,其大小被写入到初始化参数DB_BlOCK_SIZE中。

另外,Oracle支持在同一个数据库中使用多种大小的快,与标准块大小不同的块就是非标准块。

2、数据区(Extent)

数据区(也可称作数据扩展区)是由一组连续的Oracle数据块所构成的Oracle存储结构,一个或多个数据块组成一个数据区,一个或多个数据区再组成一个段(Segment)。

当一个段中的所有空间被使用完后,Oracle系统将自动为该段分配一个新的数据区,这也正符合Extent这个单词所具有的"扩展"的含义,可见数据区是Oracle存储分配的最小单位,Oracle就以数据区为单位进行存储控件的扩展。

使用数据区的目的是用来保存特定数据类型的数据,也是表中数据增长的基本单位。在Oracle数据库中,分配存储空间就是以数据区为单位的。一个Oracle对象包含至少一个数据区。设置一个表或索引的存储参数包含设置它的数据区大小。

3、段(Segment)

一个或多个数据块组成一个数据区,一个或多个数据区再组成一个段(Segment)

4、表空间(TableSpace)

Oracle使用表空间将相关的逻辑结构(比如段、数据区等)组合在一起,

表空间是数据库的最大逻辑划分区域,通常用来存放数据表、索引、回滚段等数据对象(即Segment),任何数据对象在创建时都必须被指定存储在某个表空间中。

表空间(属逻辑存储结构)与数据文件(属物理存储结构)相对应,一个表空间由一个或多个数据文件组成,一个数据文件只属于一个表空间;

Oracle数据的存储空间在逻辑上表现为表空间,而在物理上表现为数据文件。举个例子来说,表空间相当于操作系统中的文件夹,而数据文件就相当于文件夹中的文件。每个数据库至少有一个表空间(即SYSTEM表空间),表空间的大小等于所有从属于它的数据文件大小的总和。

物理存储结构

1、数据文件

数据文件是用于保存用户应用程序数据和Oracle系统内部数据的文件;

这些文件在操作系统中就是普通的操作系统文件,Oracle在创建表空间的同时会创建数据文件。

Oracle数据库在逻辑上由表空间组成,每个表空间可以包含一个或多个数据文件,一个数据文件只能隶属于一个表空间

2、控制文件

控制文件是一个二进制文件,它记录了数据库的物理结构,

其中主要包含数据库名、数据文件与日志文件的名字和位置、数据库建立日期等信息。

控制文件一般在Oracle系统安装时或创建数据库时自动创建,控制文件所存放的路径由服务器参数文件spfileorcl.ora的control_files参数值来指定。

由于控制文件存放有数据文件、日志文件等的相关信息,因此,Oracle实例在启动时必须访问控制文件。

如果控制文件正常,实例才能加载并打开数据库;但若控制文件中记录了错误的信息,或者实例无法找到一个可用的控制文件,则实例无法正常启动。

3、日志文件

日志文件的主要功能是记录对数据所作的修改,对数据库所作的修改几乎都记录在日志文件中。

在出现问题时,可以通过日志文件得到原始数据,从而保障不丢失已有操作成果。

Oracle的日志文件包括重做日志文件(Redo Log File)归档日志文件(Archive Log File)

它们是Oracle系统的主要文件之一,尤其是重做日志文件,它是Oracle数据库系统正常运行所不可或缺的。

下面将介绍这两种日志文件:

服务器参数文件

服务器参数文件SPFILE(Server parameter File)是二进制文件,用来记录了Oracle数据库的基本参数信息(如,数据库名、控制文件所在路径、日志缓冲大小等)。

数据库实例在启动之前,Oracle系统首先会读取SPFILE参数文件中设置的这些参数,并根据这些初始化参数来配置和启动实例。

比如,设置标准数据块的大小(即参数db_block_size的值)、设置日志缓冲区的大小(即参数log_buffer的值)等等,所以SPFILE参数文件非常重要。

服务器参数文件在安装Oracle数据库系统时由系统自动创建,文件的名称为SPFILEsid.ora,sid为所创建的数据库实例名。

与早期版本的初始化参数文件INITsid.ora不同的是,SPFILE中的参数由Oracle系统自动维护,如果要对某些参数进行修改,则尽可能不要直接对SPFILE进行编辑,最好通过企业管理器(OEM)或ALTER SYSTEM命令来修改,所修改过的参数会自动写到SPFILE中。

密码文件、警告文件和跟踪文件

Oracle系统运行时,除了必须的数据文件、控制文件、日志文件及服务器参数文件外,还需要一些辅助文件,如密码文件、警告文件和跟踪文件

Oracle 11g服务器结构

1、系统全局区(SGA)

系统全局区(System Global Area)是所有用户进程共享的一块内存区域,也就是说,SGA中的数据资源可以被多个用户进程共同使用。

SGA主要由高速数据缓冲区、共享池、重做日志缓存区、java池和大型池等内存结构组成。

SGA随着数据库实例的启动而加载到内存中,当数据库实例关闭时,SGA区域也就消失了。

2、程序全局区(PGA)

程序全局区(Program Global Area)也可称作用户进程全局区,它的内存区在进程私有区而不是共享区中。

虽然PGA是一个全局区,可以把代码、全局变量和数据结构都可以存放在其中,

但区域内的资源并不像SGA一样被所有的用户进程所共享,而是每个Oracle服务器进程都只拥有属于自己的那部分PGA资源。

在程序全局区(PGA)中,一个服务进程只能访问属于它自己的那部分PGA资源区,各个服务进程的PGA区的总和即为实例的PGA区的大小。

通常PGA区由私有SQL区和会话区组成。

3、前台进程

1.用户进程

用户进程是指那些能够产生或执行SQL语句的应用程序,无论是SQL*Plus,还是其它应用程序,只要是能生成或执行SQL语句,都被称作用户进程。

2.服务器进程

服务进程就是用于处理用户会话过程中向数据库实例发出的SQL语句或SQL*Plus命令,它可以分为专用服务器模式和共享服务器模式。

4、后台进程

Oracle后台进程是一组运行于Oracle服务器端的后台程序,是Oracle实例的重要组成部分。

进程包括DBWR、CKPT、LGWR、ARCH、SMON、PMON、LCKN、RECO、DNNN、SNPN。

其中SMON、PMON、DBWR、LGWRCKPT这5个后台进程必须正常启动,否则将导致数据库实例崩溃。

此外,还有很多辅助进程,用于实现相关的辅助功能,如果这些辅助进程发生问题,只是某些功能受到影响,一般不会导致数据库实例崩溃。

数据字典:

1、Oracle数据字典简介

Oracle数据字典的名称由前缀和后缀组成,使用下划线"_"连接,其代表的含义如下:

(1)DBA_:包含数据库实例的所有对象信息。

(2) V$_:当前实例的动态视图,包含系统管理和系统优化等所使用的视图。

(3) USER_:记录用户的对象信息。

(4) GV_:分布式环境下所有实例的动态视图,包含系统管理和系统优化使用的视图。

(5) ALL_:记录用户的对象信息机被授权访问的对象信息

2、Oracle常用数据字典

DBA_:包含数据库实例的所有对象信息

数据字典名称


dba_tablespaces

关于表空间的信息

dba_ts_quotas

所有用户表空间限额

dba_free_space

所有表空间中的自由分区

dba_segments

描述数据库中所有段的存储空间

dba_extents

数据库中所有分区的信息

dba_tables

数据库中所有数据表的描述

V$_:当前实例的动态视图,包含系统管理和系统优化等所使用的视图

数据字典名称


v$database

描述关于数据库的相关信息

v$datafile

数据库使用的数据文件信息

v$log

从控制文件中提取有关重做日志组的信息

v$logfile

有关实例重置日志组文件名及其位置的信息

第3章 SQL*Plus命令(*代码开始了*)

SQL*Plus与数据库的交互

SQL*Plus工具主要用来进行数据查询和数据处理。

利用SQL*Plus可将SQL和Oracle专有的PL/SQL结合起来进行数据查询和处理。SQL*Plus工具具备以下功能:

(1)定义变量,编写SQL语句。

(2)插入、修改、删除、查询,以及执行命令和PL/SQL语句。比如,执行show parameter命令。

(3)格式化查询结构、运算处理、保存、打印机输出等。

(4)显示任何一个表的字段定义,并实现与用户进行交互。

(5)完成数据库的几乎所有管理工作。比如,维护表空间和数据表。

(6)运行存储在数据库中的子程序或包。

(7)以sysdba身份登录数据库实例,可以实现启动/停止数据库实例。

设置SQL*Plus的运行环境

1、简介SET命令

在Oracle 11g数据库中,用户可以使用SET命令来设置SQL*Plus的运行环境,SET命令的语法格式为:

SET system_variable value

参数system_variable表示变量名,参数value表示变量值。

2、使用SET命令设置运行环境

1.PAGESIZE变量

2.NEWPAGE变量

3.LINESIZE变量

4.PAUSE变量

5.NUMFORMAT变量

常用SQL*Plus命令

1、HELP命令

HELP命令的语法形式如下。

HELP|? [topic]

2、DESCRIBE命令

DESCRIBE命令的语法形式如下:

desc[ribe] object_name;

describe可以缩写为desc,object_name表示将要查询的对象名称。

3、SPOOL命令

SPOOL命令的语法格式如下:

SPO[OL] [file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]] | OFF | OUT]

参数file_name用于指定脱机文件的名称,默认的文件扩展名为LST。

4、 其它常用命令

1.DEFINE命令

2.SHOW命令

3.EDI[T]命令

4.SAVE命令

5.GET命令

6.start和@命令

 
 

格式化查询结果

1、COLUMN命令

该命令可以实现格式化查询结果、设置列宽度、重新设置列标题等功能。其语法格式如下:

COL[UMN] [column_name | alias | option]

þ    column_name:用于指定要设置的列的名称。

þ    alias:用于指定列的别名,通过它可以把英文列标题设置为汉字。

þ    option:用于指定某个列的显示格式,

2、TTITLE和BTITLE命令

TTITLE命令的语法格式如下:

TTI[TLE] [printspec [text|variable] ...] | [OFF|ON]

text:用于设置输出结果的头标题(即报表头文字)。

variable:用于在头标题中输出相应的变量值。

OFF:表示禁止打印头标题。

ON:表示允许打印头标题。

第4章 SQL语言基础(*好吧,只要连接后台就会接触的东西*)

SQL语言简介

1、SQL语言的特点

SQL语言主要有以下特点。

(1)集合性

SQL可以在高层的数据结构上进行工作,工作时不是单条的处理记录,而对数据进程成组的处理。

所有SQL语句都接受集合作为输入,并且返回集合作为输出,SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句的输入。

(2)统一性

SQL为许多任务提供了统一的命令,这样方便用户学习和使用,

基本的SQL命令只需很少时间就能学会,甚至最高级的命令也可以在几天内掌握。

(3)易于移植性

由于所有主要的关系型数据库管理系统都支持SQL语言,

这样用户就比较容易将原先使用SQL的技能从一个RDBMS转到另一个,而且用兼容SQL标准编写的程序都是可以移植的。

2、SQL语言的分类

(1)数据查询语言(DQL)eg: select

(2)数据操纵语言(DML)eg:modify,delete

(3)事务控制语言(TCL)eg:commit,rollback

(4)数据定义语言(DDL)eg:create,truncate

(5)数据控制语言(DCL)

3、SQL语言的编写规则

SQL关键字不区分大小写,既可以使用大写格式,也可以使用小写格式,或者大小写格式混用。

用户模式

1、模式与模式对象

模式是一个数据库对象的集合。模式为一个数据库用户所有,并且具有与该用户相同的名称,比如,SYSTEM模式、SCOTT模式等。

在一个模式内部不可以直接访问其它模式的数据库对象,即使在具有访问权限的情况下,也需要指定模式名称才可以访问其它模式的数据库对象。

模式对象是由用户创建的逻辑结构,用以存储或引用数据。

例如,前面章节中所讲过的段(比如,表、索引等),以及用户所拥有的其它非段的的数据库对象。

这些非段的数据库对象通常包括:约束、视图、同义词、过程以及程序包等。

那么,简单的说,模式与模式对象之间的关系就是拥有与被拥有的关系,即模式拥有模式对象;而模式对象被模式所拥有

2、示例模式SCOTT(上课主要用的模式)

Oracle提供的SCOTT模式的目的,就是为了给用户提供一些示例表和数据来展示Oracle数据库的一些特性。

SCOTT模式拥有的模式对象(都是数据表)如图所示。

检索数据

1、简单查询

只包含SELECT子句和FROM子句的查询就是简单查询,

SELECT子句和FROM子句是SELECT语句的必选项,也就是说每个SELECT语句都必须包含这两个子句。

其中,SELECT子句用于选择想要在查询结果中显示的列,对于这些要显示的列,即可以使用列名来表示,也可以使用星号(*)来表示。

在检索数据时,数据将按照SELECT子句后面指定的列名的顺序来显示;

如果使用星号(*),则表示检索所有的列,这时数据将按照表结构的自然顺序来显示。

2、筛选查询

在SELECT语句中,WHERE子句位于FROM子句之后,其语法格式如下:

  1. SELECT columns_list
  2.  FROM table_name
  3.  WHERE conditional_expression

3、分组查询

在SELECT语句中,GROUP BY子句位于FROM子句之后,其语法格式如下:

  1. SELECT columns_list
  2. FROM table_name
  3. [WHERE conditional_expression]
  4. GROUP
    BY columns_list

4、排序查询

在SELECT语句中,可以使用ORDER BY子句对检索的结果集进行排序,该子句位于FROM子句之后,其语法格式如下:

  1. SELECT columns_list
  2. FROM table_name
  3. [WHERE conditional_expression]
  4. [GROUP
    BY columns_list]
  5. ORDER
    BY { order_by_expression [ ASC | DESC ] } [ ,...n ]

5、多表关联查询

在实际的应用系统开发中会设计多个数据表,每个表的信息不是独立存在的,而是若干个表之间的信息存在一定的关系,

这样当用户查询某一个表的信息时,很可能需要查询关联数据表的信息,这就是多表关联查询。

SELECT语句自身是支持多表关联查询的,多表关联查询要比单表查询复杂得多。

在进行多表关联查询时,可能会涉及到表别名、内连接、外连接、自然连接和交叉连接等概念

第5章 PL/SQL编程(*逻辑性稍微强点的SQL代码*)

PL/SQL简介

1、PL/SQL块结构

标准PL/SQL块的语法格式如下:

  1. --声明部分,可选

  2. --执行部分,必须

  3. --异常处理部分,可选

 
 

2、代码注释和标示符

1.单行注释

单行注释由连个连接字符"--"开始,后面紧跟着注释内容。

2.多行注释

多行注释由/*开头,由*/结尾,这个大多数编程语言是相同的。

3.PL/SQL字符集

所有的PL/SQL程序元素(比如,关键字、变量名、常量名等)都是由一些字符序列组合而成的,而这些字符序列中的字符都必须取自PL/SQL语言所允许使用的字符集,那么这些合法的字符集主要包括以下内容:

  • 大写和小写字母:A-Z或a-z。
  • 数字:0-9。
  • 非显示的字符:制表符、空格和回车。
  • 数学符号:+,-,*,/,>,<,=等。
  • 间隔符:包括(),{},[],?,!,;,:,@,#,%,$,&等。

数据类型、变量和常量

1、基本数据类型

1.数值类型

数值类型主要包括NUMBER、PLS_INTEGERBINARY_INTEGER三种基本类型

2.字符类型

字符类型主要包括VARCHAR2、CHAR、LONG、NCHARNVARCHAR2等。

这些类型的变量用来存储字符串或字符数据。

3.日期类型

日期类型只有一个种——即DATE类型,用来存储日期和时间信息,

DATE类型的存储空间是7个字节,分别使用一个字节存储世纪、年、月、天、小时、分钟和秒。

4.布尔类型

布尔类型也只有一种——即BOOLEAN,主要用于程序的流程控制和业务逻辑判断,

其变量值可以是TRUE、FALSE或NULL中的一种。

2、特殊数据类型

1.%TYPE类型

使用%TYPE关键字可以声明一个与指定列名称相同的数据类型,它通常紧跟在指定列名的后面。

2.RECORD类型,语法如下:

  1. type record_type is record
  2.     (
  3.        var_member1 data_type [not
    null] [:=default_value],
  4.        …
  5.        var_membern data_type [not
    null] [:=default_value])

3.%ROWTYPE类型,语法如下:

rowVar_name table_name%rowtype;

3、定义变量和常量

1.定义变量

<变量名> <数据类型> [(长度):=<初始值>];

2.定义常量

<常量名> constant <数据类型>:=<常量值>;

流程控制语句

1、选择语句

1.if…then语句

2.If…then…else语句

3.if…then…elsif语句

4.case语句

2、循环语句

1.loop语句

  1. loop
  2.   plsql_sentence;
  3. exit
    when end_condition_ exp
  4. end loop;

2.while语句

  1. while condition_expression loop
  2. plsql_sentence;
  3. end loop;

3.for语句

  1. for variable_ counter_name in [reverse] lower_limit..upper_limit loop
  2. plsql_sentence;
  3. end loop;

PL/SQL游标

1、显示游标

显示游标是由用户声明和操作的一种游标,通常用于操作查询结果集(即由SELECT语句返回的查询结果),

使用它处理数据的步骤包括:声明游标、打开游标、读取游标和关闭游标4个步骤。

2、游标的属性

无论是显式游标还是隐式游标,都具有%found、%notfound、%isopen%rowcount四个属性,

通过这4个属性可以获知SQL语句的执行结果以及该游标的状态信息。

下面对这4个属性的功能进行讲解。

(1)%found:布尔型属性,如果SQL语句至少影响到一行数据,则该属性为true,否则为fasle。

(2)%notfound:布尔型属性,与%found属性的功能相反。

(3)%rowcount:数字型属性,返回受SQL语句影响的行数。

(4)%isopen:布尔型属性,当游标已经打开时返回true,游标关闭时则为false。

3、隐式游标

在执行一个SQL语句时,Oracle会自动创建一个隐式游标。

这个游标是内存中处理该语句的工作区域。

隐式游标主要是处理数据操纵语句(如,UPDATE、DELETE语句)的执行结果,

当然特殊情况下,也可以处理SELECT语句的查询结果。

由于隐式游标也有属性,当使用隐式游标的属性时,需要在属性前面加上隐式游标的默认名称——SQL。

4、通过for语句循环游标

(1)在for语句中遍历隐式游标中的数据时,通常在关键字"in"的后面提供由SELECT语句检索的结果集,在检索结果集的过程中,Oracle系统会自动提供一个隐式的游标sql

(2)在for语句中遍历显式游标中的数据时,通常在关键字"in"的后面提供游标的名称,其语法格式如下:

  1. for var_auto_record in cur_name loop
  2.     plsqlsentence;
  3.     end loop;

PL/SQL异常处理

1、预定义异常

当PL/SQL程序违反了Oracle系统内部规定的设计规范时,就会自动引发一个预定义的异常,

例如,当除数为零时,就会引发"ZERO_DIVIED"异常。

系统预定义异常


ZERO_DIVIDE

除数为零时引发的异常

ACCESS_INTO_NULL

企图为某个未初始化对象的属性赋值

COLLECTION_IS_NULL

企图使用未初始化的集合元素

CURSOR_ALREADY_OPEN

企图再次打开一个已经打开过的游标,但在重新打开之前,游标未关闭

INVALID_CURSOR

执行一个非法的游标操作,例如,关闭一个未打开的游标

INVALID_NUMBER

企图将一个字符串转换成一个无效的数字而失败

LOGIN_DENIED

企图使用无效的用户名或密码连接数据库

NO_DATA_FOUND

SELECT INTO语句没有返回数据

ROWTYPE_MISMATCH

主游标变量与PL/SQL游标变量的返回类型不兼容

SELF_IS_NULL

使用对象类型时,使用空对象调用其方法

 

2、自定义异常

1.错误编号异常

错误号异常是指在Oracle系统发生错误时,系统会显示错误号和相关描述信息的异常,

虽然直接使用错误编号也可以完成异常处理,但错误编号较为抽象,不易于用户理解和记忆,

对于这种异常,首先在PL/SQL块的声明部分(DECLARE部分)使用EXCEPTION类型定义一个异常变量名,

然后使用语句PRAGMA EXCEPTION_INIT为"错误编号"关联"这个异常变量名",

接下来就可以像对待系统预定义异常一样处理了。

2.业务逻辑异常

在实际的应用中,程序开发人员可以根据具体的业务罗规则自定义一个异常。

这样,当用户操作违反业务逻辑规则时,就引发一个自定义异常,从而中断程序的正常执行并转到自定义的异常处理部分。

但无论是预定义异常,还是错误编号异常,都是由Oracle系统判断的错误,

但业务逻辑异常是Oracle系统本身是无法知道的,

这样就需要有一个引发异常的机制,引发业务逻辑异常通常使用RAISE语句来实现。

当引发一个异常时,控制就会转到EXCEPTION异常处理部分执行异常处理语句。

业务逻辑异常首先在DECLARE部分使用EXCEPTION类型声明一个异常变量,

然后在BEGIN部分根据一定的义务逻辑规则执行RAISE语句(在RAISE关键字后面跟着异常变量名),

最后在EXCEPTION部分编写异常处理语句。

【JSU】Oracle Knowledge base articleL over.(LJ?Dragon)

ORACLE_CLASS_ENDING的更多相关文章

随机推荐

  1. Entity Framework 重写OnModelCreating,控制生成表名的单复数

    重写OnModelCreating,控制生成表名的单复数 public class MYDbContext : DbContext { public DbSet<User> Users { ...

  2. php进程继续执行

    虽然浏览器提示localhost 的服务器响应时间过长.但是进程在后台继续执行,数据库的条数在增加.

  3. .Net使用SSH.NET通过SSH访问Linux主机

    使用了SSH.NET库,添加引用dll至项目,以下代码显示了点击按钮后SSH链接Linux主机执行命令并返回命令执行结果 protected void btnExcute_Click(object s ...

  4. new Option()——实现时间联动

    //1.动态创建select function createSelect(){ var mySelect = document.createElement("select"); m ...

  5. Python基础练习

    近日,因工作需要要学习Python.为了不在语言细节中无法自拔,我按照网上广为流传的<程序员技术练级攻略>中python部分的学习计划,做了三个简单的练习,算是对python有了初步的了解 ...

  6. 【转】深入理解Java内存模型(五)——锁

    锁的释放-获取建立的happens before 关系 锁是java并发编程中最重要的同步机制.锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息. 下面是锁释放-获取的示例代 ...

  7. Swift - 37 - 值类型和引用类型的简单理解

    //: Playground - noun: a place where people can play import UIKit // 值类型:指的是当一个变量赋值给另外一个变量的时候, 是copy ...

  8. 控制弹出div显示在鼠标附近的位置

    前一个页面: $("#txt_ocname").click(function () { art.dialog.open("/SelPosAll.aspx", { ...

  9. Ubuntu 13.04 用Sublime Text 2 编译运行 JAVA

    将下面的代码粘贴到JavaC.sublime-build中: { "cmd": ["javac \"$file_name\" && j ...

  10. 解决easyui datagrid加载数据时,checkbox列没有根据checkbox的值来确定是否选中

    背景:   昨天帮朋友做一个easyui datagrid的小实例时,才发现easyui datagrid的checkbox列,没有根据值为true或false来选中checkbox,当时感觉太让人失 ...