隐式游标和显式游标

合集下载

Oracle中Cursor介绍

Oracle中Cursor介绍

Oracle中Cursor介绍原创作者: hwhuang阅读:1101次评论:0条更新时间:2010-05-03关键字概念类型异常处理一概念游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。

游标的作用就是用于临时存储从数据库中提取的数据块。

在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。

这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。

二类型Cursor类型包含三种: 隐式Cursor,显式Cursor和Ref Cursor(动态Cursor)。

1.隐式Cursor:1).对于Select …INTO…语句,一次只能从数据库中获取到一条数据,对于这种类型的DML Sql语句,就是隐式Cursor。

例如:Select /Update / Insert/Delete操作。

2)作用:可以通过隐式Cusor的属性来了解操作的状态和结果,从而达到流程的控制。

Cursor的属性包含:SQL%ROWCOUNT 整型代表DML语句成功执行的数据行数SQL%FOUND 布尔型值为TRUE代表插入、删除、更新或单行查询操作成功SQL%NOTFOUND 布尔型与SQL%FOUND属性返回值相反SQL%ISOPEN 布尔型 DML执行过程中为真,结束后为假3) 隐式Cursor是系统自动打开和关闭Cursor.下面是一个Sample:Sql代码1.Set Serveroutput on;2.3.begin4.update t_contract_master set liability_state = 1 where policy_code = '1234567 89';5.6.if SQL%Found then7.dbms_output.put_line('the Policy is updated successfully.');mit;9.else10.dbms_output.put_line('the policy is updated failed.');11.end if;12.13.end;14.15./在PL/SQL中run:Sql代码1.SQL>2.3.the policy is updated failed.4.5.PL/SQL procedure successfully completed2.显式Cursor:(1)对于从数据库中提取多行数据,就需要使用显式Cursor。

Oracle游标使用方法及语法大全

Oracle游标使用方法及语法大全
以下是使用显式游标的一个简单练习。
【训练1】 用游标提取emp表中7788雇员的名称和职务。
Sql代码:
1.SET SERVEROUTPUT ON
2.DECLARE
3.v_ename VARCHAR2(10);
4.v_job VARCHAR2(10);
5.CURSOR emp_cursor IS
6.SELECT ename,job FROM emp WHERE empno=7788;
当系统使用一个隐式游标时,可以通过隐式游标的属性来了解操作的状态和结果,进而控制程序的流程。隐式游标可以使用名字SQL来访问,但要注意,通过SQL游标名总是只能访问前一个DML操作或单行SELECT操作的游标属性。所以通常在刚刚执行完操作之后,立即使用SQL游标名来访问属性。游标的属性有四种,如下所示。
游标有两种类型:显式游标和隐式游标。在前述程序中用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标。但是如果要提取多行数据,就要由程序员定义一个显式游标,并通过与游标有关的语句进行处理。显式游标对应一个返回结果为多行多列的SELECT语句。
End loop;
Close c_emp;
End;
%ROWTYPE也可以用游标名来定义,这样的话就必须要首先声明游标:
For record_name IN(corsor_name[(parameter[,parameter]…)]
|(query_difinition) loop
Statements
End loop;
下面我们用for循环重写上面的例子:
在游标FOR循环中使用查询
在游标FOR循环中可以定义查询,由于没有显式声明所以游标没有名字,记录名通过游标查询来定义。

oracle中游标的用法

oracle中游标的用法

oracle中游标的用法游标是Oracle数据库中一种重要的数据类型,用于处理查询结果集中的数据。

使用游标可以方便地遍历查询结果,进行数据处理和操作。

下面是关于Oracle中游标的用法的参考内容。

一、游标的定义与声明在Oracle数据库中,游标可以在PL/SQL块中使用,用于与查询结果进行交互。

游标的使用分为显示游标和隐式游标两种方式:1. 显示游标:显示游标需要先定义游标类型,然后声明游标变量,并使用OPEN、FETCH和CLOSE等操作进行操作。

示例代码如下:```sql-- 定义游标类型TYPE cursor_type IS REF CURSOR;-- 声明游标变量cursor_var cursor_type;-- 打开游标OPEN cursor_var FOR SELECT * FROM table_name;-- 循环获取游标数据LOOPFETCH cursor_var INTO variable1, variable2...;EXIT WHEN cursor_var%NOTFOUND;-- 对游标数据进行处理END LOOP;-- 关闭游标CLOSE cursor_var;```2. 隐式游标:隐式游标由Oracle自动管理,不需要程序员定义和声明,系统会自动为每一个SELECT语句分配一个隐式游标。

隐式游标无法手动控制游标操作,只能通过向结果集添加条件来限制查询结果。

示例代码如下:```sql-- 查询结果会被自动赋值给隐式游标SELECT * FROM table_name;-- 循环处理查询结果LOOP-- 对查询结果进行处理-- 退出循环条件END LOOP;```二、游标的属性和操作1. 游标属性:(1) %FOUND:如果游标指向的结果集中有数据,则返回真;否则返回假。

(2) %NOTFOUND:如果游标指向的结果集中没有数据,则返回真;否则返回假。

(3) %ROWCOUNT:返回游标当前处理的行数。

SQLSERVER游标

SQLSERVER游标

24.1.游标PL/SQL的游标指把从数据库中查询出来的数据以临时表的形式存放在内存中。

游标可以对存储在内存中的数据进行操作,返回一条或一组记录,或者一条记录也不返回。

PL/SQL 中的记录和表类型虽然也可以用来存放数据,但对一组存放在内存中的数据进行操作,还是不太方便,游标恰好是实现这一功能的有力工具。

PL/SQL包含隐含游标和显示游标等两种游标类型,其中隐含游标用于处理SELECT INTO和DML语句,而显示游标则专门用于处理SELECT语句返回的多行数据。

游标的基本操作有:声明游标、打开游标、提取游标和关闭游标。

24.15.1.游标的类型24.15.2.隐式游标在PL/SQL中使用DML语句时自动创建隐式游标隐式游标自动声明、打开和关闭,其名为SQL通过检查隐式游标的属性可以获得最近执行的DML 语句的信息隐式游标的属性有:%FOUND – SQL 语句影响了一行或多行时为TRUE%NOTFOUND – SQL 语句没有影响任何行时为TRUE%ROWCOUNT – SQL 语句影响的行数%ISOPEN - 游标是否打开,始终为FALSE示例1:示例2:示例3:示例4:如果没有与SELECT INTO语句中的条件匹配的行,将引发NO_DATA_FOUND异常示例5:如果SELECT INTO 语句返回多个值,将引发TOO_MANY_ROWS异常24.15.3.显式游标显式游标在PL/SQL 块的声明部分定义查询,该查询可以返回多行。

显式游标的操作过程:声明游标,主要是定义一个游标名称来对应一条查询语句,从而可以利用该游标对此查询语句返回的结果集进行单行操作。

声明游标的语法如下:语法说明如下:cursor_name 新游标名称。

parameter_name [ IN ] 为游标定义输入参数,IN关键字可以省略。

使用输入参数可以使游标的应用变得更灵活。

用户需要在打开游标时为输入参数赋值,也可使用参数的默认值。

Oracle数据库基础题库【含答案】

Oracle数据库基础题库【含答案】

1、判断题,正确请写写"T",错误请写写"F",1、oracle数据库系统中,启动数据库的第一步是启动一个数据库实例。

( T )2、Oracle服务器端的监听程序是驻留在服务器上的单独进程,专门负责响应客户机的连接请求。

( F)3、oracle数据库中实例和数据库是一一对应的(非ORACLE并行服务,非集群)。

( T)4、系统全局区SGA 是针对某一服务器进程而保留的内存区域,它是不可以共享的。

( F )5、数据库字典视图ALL_***视图只包含当前用户拥有的数据库对象信息。

( F )8、数据字典中的内容都被保存在SYSTEM表空间中。

( T )9、HAVING后面的条件中可以有聚集函数,比如SUM(),AVG()等, WHERE 后面的条件中也可以有聚集函数。

( F )10、"上海西北京" 可以通过like ‘%上海_’查出来。

( F )11、表空间是oracle 最大的逻辑组成部分。

Oracle数据库由一个或多个表空间组成。

一个表空间由一个或多个数据文件组成,但一个数据文件只能属于一个表空间。

( T )12、表空间分为永久表空间和临时表空间两种类型。

( T )13、truncate是DDL操作,不能 rollback。

( T )14、如果需要向表中插入一批已经存在的数据,可以在INSERT语句中使用WHERE语句。

( F )15、Oracle数据库中字符串和日期必须使用双引号标识。

( F )16、Oracle数据库中字符串数据是区分大小写的。

( T )17、Oracle数据库中可以对约束进行禁用,禁用约束可以在执行一些特殊操作时候保证操作能正常进行。

( F )18、为了节省存储空间,定义表时应该将可能包含NULL值的字段放在字段列表的末尾。

( T ) 20、在连接操作中,如果左表和右表中不满足连接条件的数据都出现在结果中,那么这种连接是全外连接。

oracle存储过程游标的用法

oracle存储过程游标的用法

【主题】Oracle存储过程游标的用法在数据库管理和开发中,Oracle存储过程是一种非常常见的数据库对象,它允许我们在数据库中完成一系列操作,并且可以通过参数传递数据。

而游标则是存储过程中经常使用的数据库对象,用于处理查询结果集。

今天,我们将深入探讨Oracle存储过程中游标的用法,以便更好地理解和应用这一特性。

一、基本概念1.1 游标的定义和作用在Oracle数据库中,游标是一种用于处理查询结果集的对象。

它可以让存储过程逐行处理查询结果,进行逻辑判断和数据操作,从而实现更灵活的数据处理和业务逻辑。

在存储过程中,经常需要用到游标来处理复杂的查询逻辑和结果集操作。

1.2 游标的分类在Oracle数据库中,我们通常可以将游标分为显式游标和隐式游标。

显式游标是由程序员手动定义和使用的游标,而隐式游标则是在某些情况下自动创建和使用的游标。

两者在特性和使用方式上略有不同,需要根据实际情况选择合适的方式来处理查询结果集。

二、使用方式2.1 游标的声明和打开在存储过程中,我们需要先声明一个游标变量,然后通过OPEN语句打开游标,使其准备好处理查询结果集。

在声明游标时,需要指定游标的返回类型(REF CURSOR)和查询语句,以便游标知道如何处理结果集。

2.2 游标的循环和操作一旦游标被打开,我们就可以通过FETCH语句从游标中逐行读取数据,并对数据进行逻辑判断和操作。

通常我们会使用循环语句(如WHILE 循环或FOR循环)来逐行处理结果集,直到处理完所有数据为止。

2.3 游标的关闭和释放在完成游标的操作后,我们需要通过CLOSE语句关闭游标,以确保游标所占用的资源得到释放和回收,避免对系统性能造成不必要的影响。

游标关闭后,也需要及时释放游标变量所占用的资源,以免出现资源泄露和内存溢出的情况。

三、个人观点和理解通过对Oracle存储过程游标的用法进行深入探讨,我对游标的作用和使用方式有了更清晰的认识。

游标在存储过程中的灵活运用,可以帮助我们更好地处理复杂的查询结果集,实现精细化的数据逻辑和业务操作。

Oracle显示游标的使用及游标for循环

Oracle显示游标的使用及游标for循环

Oracle显⽰游标的使⽤及游标for循环下⾯给⼤家介绍在什么情况下⽤隐式游标,什么情况下⽤显⽰游标:1.查询返回单⾏记录时→隐式游标;2.查询返回多⾏记录并逐⾏进⾏处理时→显式游标--显⽰游标属性declareCURSOR cur_emp IS SELECT * FROM emp;row_emp cur_emp%ROWTYPE;BEGINOPEN cur_emp;FETCH cur_emp INTO row_emp;WHILE cur_emp%FOUNDLOOPdbms_output.put_line(row_emp.empno||'----'||row_emp.ename);FETCH cur_emp INTO row_emp;END LOOP;close cur_emp;END;--使⽤显式游标修改数据(给所有的部门经理加薪1000)DECLARECURSOR emp_cur ISSELECT empno,ename,sal FROM emp WHERE job='MANAGER' FOR UPDATE;emp_row emp_cur%ROWTYPE;BEGINOPEN emp_cur;LOOPFETCH emp_cur INTO emp_row;IF emp_cur%NOTFOUND THENEXIT;ELSEUPDATE emp SET sal=sal+1000 WHERE CURRENT OF emp_cur;END IF;END LOOP;COMMIT;CLOSE emp_cur;END;·注意:1、如果游标打开之前或关闭之后,使⽤游标属性,Oracle会抛出⼀个INVALID_CURSOR错误(ORA-01001);2、如果在第⼀次fetch后结果集是空的,%found=false,%NotFound=true,%ROWCOUNT=0;3、如果使⽤了BULK COLLECT,那么%ROWCOUNT的值可能不是0或1,实际上他返回的是提取到相关集合的⾏数。

ORACLE中的游标

ORACLE中的游标

隐式游标
SQL> SET SERVEROUTPUT ON SQL> DECLARE v_TOYID TOYS.ID%type := '&TOYID'; v_TOYNAME %Type := '&TOYNAME'; BEGIN UPDATE TOYS SET NAME = v_TOYNAME WHERE toyid=v_TOYID; IF SQL%NOTFOUND THEN DBMS_OUTPUT.PUT_LINE('编号未找到。'); 编号未找到。 编号未找到 ELSE DBMS_OUTPUT.PUT_LINE(‘表已更新 表已更新'); 表已更新 END IF; 语句不影响任何行, 如果 DML 语句不影响任何行,则返回 END; True /
显示游标属性
%ROWCOUNT – SQL 语句影响的行数 即返回游标所找到的数据行数 返回一个 语句影响的行数,即返回游标所找到的数据行数 即返回游标所找到的数据行数(返回一个 整数)。示例如下: 整数 。示例如下: LOOP FETCH c1 INTO my_ename, my_depton; IF c1%ROWCOUNT > 10 THEN ... END IF; ... END LOOP; %ISOPEN - 游标是否打开,即游标打开为 游标是否打开,即游标打开为TRUE,反之则为 反之则为FALSE。示例如下: 反之则为 。示例如下: IF c1%ISOPEN THEN ——如果游标打开,则执行相应操作 如果游标打开, 如果游标打开 ... ELSE ——如果游标未打开,则打开游标 如果游标未打开, 如果游标未打开 OPEN c1; END IF;
游标的分类

oracle 游标写法

oracle 游标写法

oracle 游标写法什么是Oracle游标?在Oracle数据库中,游标(cursor)是一种用于在PL/SQL代码中处理查询结果集的数据类型。

游标作为一个指针,可以指向查询结果集中的某个位置,并且可以使用游标来获取、访问和操作这些结果。

使用游标的好处在于,它允许程序员逐行地处理查询结果集,而不是将所有的查询结果集一次性加载到内存中。

这对于处理大型结果集非常有用,因为它可以减少内存消耗,并提高查询和处理效率。

Oracle游标的写法在PL/SQL中,有两种类型的游标可以使用:隐式游标和显示游标。

1. 隐式游标隐式游标是Oracle数据库自动创建和管理的一种默认游标。

当我们执行一个SELECT语句时,Oracle会自动为我们创建一个隐式游标来处理查询结果。

我们可以使用隐式游标来获取查询结果的各个字段的值,并进行相关操作。

下面是一个使用隐式游标处理查询结果集的示例:DECLAREemp_name VARCHAR2(100);emp_salary NUMBER(10, 2);BEGINSELECT name, salary INTO emp_name, emp_salary FROM employees WHERE id = 1;DBMS_OUTPUT.PUT_LINE(emp_name ' - ' emp_salary); END;在这个示例中,我们使用SELECT语句从"employees"表中获取第一个员工的名称和工资,并将其存储到变量"emp_name"和"emp_salary"中。

然后,我们使用DBMS_OUTPUT.PUT_LINE过程将这些值以文本形式输出到控制台。

2. 显示游标与隐式游标相反,显示游标需要我们明确地声明和打开游标,并在代码中进行相应的操作。

显示游标给了我们更多的控制权和灵活性,因为我们可以在代码中自定义游标的属性和行为。

如何使用MySQL的游标和存储过程处理分页查询

如何使用MySQL的游标和存储过程处理分页查询

如何使用MySQL的游标和存储过程处理分页查询MySQL是一种十分流行的开源关系型数据库管理系统,它以其性能高、易用性好等特点备受开发者青睐。

在实际应用中,我们经常会遇到需要处理分页查询的需求,而MySQL的游标和存储过程是两个强大的工具,能够帮助我们高效地处理这类问题。

本文将介绍如何使用MySQL的游标和存储过程来处理分页查询的相关内容。

一、什么是游标和存储过程在开始讨论如何使用MySQL的游标和存储过程处理分页查询之前,我们首先要了解游标和存储过程的概念。

游标是用于遍历结果集的一种机制,它允许我们按一定的顺序逐个访问查询结果。

MySQL的游标类型有两种:隐式游标和显式游标。

隐式游标是MySQL内部自动维护的,无需我们手动处理;而显式游标需要我们自己定义、打开、关闭和管理。

存储过程是一段预编译的程序,可以存储在数据库中并在需要时被调用执行,它可以包含一系列的SQL语句、控制流程语句和变量定义等。

存储过程能够提高执行效率、简化应用程序的开发和维护工作。

二、分页查询的基本原理在了解了游标和存储过程的基本概念之后,我们要先明确分页查询的基本原理。

分页查询是一种将查询结果按照固定的页数和每页显示的记录数进行划分的方式,常见的分页查询方式有两种:基于LIMIT和OFFSET的分页和基于游标的分页。

基于LIMIT和OFFSET的分页是一种常见的实现方式,通过在查询语句中使用LIMIT和OFFSET来限制返回结果的行数和起始位置。

通过调整LIMIT和OFFSET的值,可以实现不同页数的查询。

例如,LIMIT 10 OFFSET 0表示查询第1页的结果,LIMIT 10 OFFSET 10表示查询第2页的结果。

基于游标的分页是较为高级和灵活的实现方式,它通过游标来逐个地获取结果集中的记录。

游标可以根据需要进行上下滚动、跳转和过滤等操作,对于大结果集的处理更加高效。

以上是分页查询的基本原理,接下来我们将具体介绍如何使用MySQL的游标和存储过程来处理分页查询。

第十四课Oracle游标和异常处理

第十四课Oracle游标和异常处理

(3)处理包含returning子句的DML语句
语法如下: execute immediate dyn_string returning into var1[,……]
注: 1、当使用returning into子句接收数据时,只能 接受DML语句返回的单行数据。
2、当在动态DML语句中指定returning into子句 时,需要在into后使用占位符。
显式游标:用于处理select语句返回的多行数据。 隐式游标:用于处理单行select into语句和DML语句。 两者区别(p129)
显式游标的使用
使用显式游标分四个步骤:
1.声明游标 CURSOR cursor_name IS select_statement
2.打开游标 OPEN cursor_name
DECLARE
cursor c_e_dept(dno number) is
select * from scott.emp where deptno=dno;
v_emp_dept scott.emp%rowtype;
v_dno emp.deptno%type:=&deno; v_count binary_integer;
注:dyn_string:用于指定存放DML文本的字符串变量 。
(2)处理包含占位符的DML语句
语法如下: execute immediate dyn_string using bind_argument[,……]
注: 1、占位符必须以冒号开始,可以使用任何名称。 2、bind_argument用于为占位符提供数据。
v_emp scott.emp%rowtype;
BEGIN open c_emp(7369) ;

21天学通ORACLE练习题答案

21天学通ORACLE练习题答案

21天精通ORACLE练习题答案第1章 Oracle安装配置1.Oracle安装的硬件环境是什么?Oracle 10g安装的硬件要求为:1024MB以上的物理内存,1.5 GB至3.5 GB磁盘空间,具体大小由安装类型决定。

目前的主流PC机均可满足此条件。

2.Oracle共有哪些重要版本?Oracle目前使用最多的版本为Oracle 9i和Oracle10g。

3.Oracle 9i中的i和Oracle 10g中的g各代表什么意思。

Oracle 9i中的i代表Internet,表明该版本对Internet的支持;Oracle 10g中的g代表Grid,表明该版本提供了网格计算功能。

4.Oracle安装时需要注意的主要问题有哪些?(1)注意硬件配置。

Oracle对硬件要求较高,因此,安装时尤其需要注意服务器的配置是否达到了要求。

(2)注意空间分配Oracle作为数据库的本质,决定了其使用过程中是一个体积不断增大的过程,因此尤其需要注意对硬盘空间的分配。

(3)安装路径的要求Oracle的安装路径不要包含中文字符。

含有中文字符的路径在Oracle下并不能被很好的支持。

第2章 Oracle常用工具1.简述Net Configuration Assistant(网络配置助手)与Net Manager(网络管理员)这两种工具的关系。

Net Manager具有和Net Configuration Assistant具有相似的功能。

Net Configuration Assistant以向导的模式出现,可以引导初学者进行配置;而Net Manager则将所有配置步骤集合到同一界面,更适合熟练者进行操作。

2.监听程序配置中的主要参数有哪几个?·217·监听配置中的参数主要包括:监听程序名、协议和端口号。

因为监听总是配置在Oracle数据库的服务器端,因此无需配置主机地址。

3.本地Net服务名配置中的主要参数有哪几个?Net服务名配置中的参数主要包括:服务名、数据库名称、协议、主机地址和端口号。

postgresql中类似sql server中cursor 的写法

postgresql中类似sql server中cursor 的写法

在PostgreSQL 中,可以使用游标(cursor)来遍历查询结果集。

与SQL Server 中的游标类似,PostgreSQL 中的游标也分为两种类型:隐式游标和显式游标。

1. 隐式游标隐式游标是PostgreSQL 中最常用的游标类型,它不需要显式声明,而是通过`FETCH` 语句来获取下一行数据。

以下是一个使用隐式游标的示例:```sqlBEGIN;--创建一个名为test_table 的表CREATE TABLE test_table (id SERIAL PRIMARY KEY, name VARCHAR(255));--向表中插入一些数据INSERT INTO test_table (name) VALUES ('张三');INSERT INTO test_table (name) VALUES ('李四');INSERT INTO test_table (name) VALUES ('王五');--使用隐式游标遍历查询结果集DO $$DECLARErow record;BEGINFOR row IN (SELECT * FROM test_table) LOOPRAISE NOTICE 'ID: %, Name: %', row.id, ;END LOOP;END $$;COMMIT;```在这个示例中,我们首先创建了一个名为`test_table` 的表,并向其中插入了一些数据。

然后,我们使用`DO` 语句和`FOR` 循环来遍历查询结果集。

在循环内部,我们可以访问当前行的数据,例如`row.id` 和``。

最后,我们使用`RAISE NOTICE` 语句输出每行数据的ID 和名称。

2. 显式游标显式游标需要先声明后打开,然后在循环中使用`FETCH` 语句获取下一行数据。

以下是一个使用显式游标的示例:```sqlBEGIN;--创建一个名为test_table 的表CREATE TABLE test_table (id SERIAL PRIMARY KEY, name VARCHAR(255));--向表中插入一些数据INSERT INTO test_table (name) VALUES ('张三');INSERT INTO test_table (name) VALUES ('李四');INSERT INTO test_table (name) VALUES ('王五');--声明一个名为my_cursor 的显式游标DECLARE my_cursor CURSOR FOR SELECT * FROM test_table;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;--打开显式游标并获取第一行数据OPEN my_cursor;FETCH NEXT FROM my_cursor INTO ...; --根据需要添加变量以接收数据WHILE NOT done DO--处理当前行数据,例如输出ID 和名称RAISE NOTICE 'ID: %, Name: %', ..., ...; --根据需要添加变量以接收数据--获取下一行数据FETCH NEXT FROM my_cursor INTO ...; --根据需要添加变量以接收数据END WHILE;CLOSE my_cursor; --关闭显式游标```在这个示例中,我们首先创建了一个名为`test_table` 的表,并向其中插入了一些数据。

Oracle使用游标

Oracle使用游标

Oracle使用游标在程序中访问数据库表最通用的方法是嵌入SQL语句,由于SQL语句一般是以集合的形式返回结果,而程序设计语言并不能处理集合形式的数据。

因此,这需要使用游标架起这两者之间联接的“桥梁”。

(1)使用隐式游标访问数据表。

在程序中访问数据库最简单的方法是使用FOR CURSOR,这种方式使用的游标为一种隐式游标。

隐式游标不需要用户显式定义、打开等操作,就可以浏览数据库中的表。

使用如下语句浏览HR模式中的EMPLOYEES表。

set serveroutput onbeginfor emp_one in (select employee_id,last_name,job_id,salaryfrom employees)loopdbms_output.put(emp_one.employee_id ||' ');dbms_output.put(emp_st_name||' ');dbms_output.put(emp_one.job_id||' ');dbms_output.put(emp_one.salary||' ');dbms_output.put_line(null);dbms_output.put_line('*********************');end loop;end;(2)使用显式游标。

declarecursor emp_cur isselect * from employees;emp_one employees%rowtype;beginopen emp_cur;loopfetch emp_cur into emp_one;exit when emp_cur%notfound;dbms_output.put(emp_one.employee_id ||' ');dbms_output.put(emp_st_name||' ');dbms_output.put(emp_one.job_id||' ');dbms_output.put(emp_one.salary||' ');dbms_output.put_line(null);dbms_output.put_line('*********************');end loop;close emp_cur;end;(3)使用REF游标。

Oracle游标[you biao]大全

Oracle游标[you biao]大全

1.Oracle游标[you biao]大全SELECT语句[yu ju]用于[yong yu]从数据[shu ju]库[shu ju ku]中查询数据[shu ju],当在PL/SQL中使用SELECT语句[yu ju]时,要与INTO子句[zi ju]一起使用,查询的返回值被赋予INTO子句[zi ju]中的变量[bian liang],变量[bian liang]的声明[sheng ming]是在DELCARE中。

SELECT INTO语法[yu fa]如下:SELECT [DISTICT|ALL]{*|column[,column,...]}INTO (variable[,variable,...] |record)FROM {table|(sub-query)}[alias]WHERE............PL/SQL中SELECT语句[yu ju]只返回一行数据[shu ju]。

如果超过一行数据[shu ju],那么就要使用显式[xian shi]游标[you biao](对游标[you biao]的讨论我们将在后面进行),INTO子句[zi ju]中要有与SELECT子句[zi ju]中相同列数量的变量[bian liang]。

INTO子句[zi ju]中也可以是记录变量[bian liang]。

%TYPE属性[shu xing]在PL/SQL中可以将变量[bian liang]和常量[chang liang]声明[sheng ming]为内建或用户[yong hu]定义的数据[shu ju]类型[lei xing][shu ju lei xing],以引用[yin yong]一个列名,同时继承[ji cheng]他的数据[shu ju]类型[lei xing][shu ju lei xing]和大小。

这种动态[dong tai]赋值[fu zhi]方法[fang fa]是非常有用的,比如变量[bian liang]引用[yin yong]的列的数据[shu ju]类型[lei xing][shu ju lei xing]和大小改变了,如果使用了%TYPE,那么用户[yong hu]就不必修改[xiu gai]代码[dai ma],否则就必须修改[xiu gai]代码[dai m a]。

数据库游标的使用

数据库游标的使用

游标是系统为用户开设的一个数据缓冲区,存放 SQL 语句的执行结果。

由系统或用户以变量的形式定义。

用 户可以用 SQL 语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理,主语言是面向记录的, 一组主变量一次只能存放一条记录在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处 理,最后将处理结果显示出来或最终写回数据库。

这样数据处理的速度才会提高,否则频繁的磁盘数据交换会 降低效率。

用数据库语言来描述游标就是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问 结果集中的任意一行数据了,将游标放置到某行后,即可对该行数据进行操作,例如提取当前行的数据等。

游标有两种类型:显式游标和隐式游标。

在程序中用到的 SELECT...INTO...查询语句,一次只能从数据 库中提取一行数据,对于这种形式的查询和触发器操作,系统都会使用一个隐式游标。

但是如果要提取多行数 据,就要由程序员定义一个显式游标,并通过与游标有关的语句进行处理。

显式游标对应一个返回结果为多行 多列的 SELECT 语句。

游标一旦打开,数据就从数据库中传送到游标变量中,然后应用程序再从游标变量中分解出需要的数据, 并进行处理。

以下将通过详细的例子为您介绍显式游标和隐式游标。

显式游标: 显式游标 1 定义游标 CURSOR CUR_NAME P1,P2,... IS SELECT 语句 -------------------A. 该 SELECT 语句不可以是 SELECT..INTO..语句. B. 游标可以有参数,这些参数用来参与 SELECT 中的 WHERE 条件. 2 打开游标: OPEN CUR_NAME P1,P2,... A. 如果有参数,则首先见实际参数传递给 SELECT 语句 B. 执行 SELECT 语句.其结果将存在游标中,并且可以用游标名来进行控制. 3 获取数据: FETCH CUR_NAME INTO 变量; A. FETCH 从第一行数据开始,每 FETCH 一行数据,自动跳到下一行.直到 FETCH 了最后一行数据为止. B. 如果使用普通变量来获取数据,那么,应该根据游标结构中的字段来定义变量. 此时,变量列表与游标中的字段列表在类型,顺序,个数上一致. C. 也可以使用记录变量来获取数据. "记录变量 游标名%ROWTYPE"; 此时,该记录变量的结构与游标的结构完全一致.(注意,此处最好不要用表名). 4 关闭游标: CLOSE CUR_NAME; 例 查询 7788 的员工姓名,职务,工资.DECLARE V_ENAME EMP.ENAME%TYPE; V_JOB EMP.JOB%TYPE; ------------------------1. CURSOR CUR_EMP IS SELECT ENAME,JOB FROM EMP WHERE EMPNO = 7788; BEGIN --2. OPEN CUR_EMP; --3. FETCH CUR_EMP INTO V_ENAME,V_JOB; DBMS_OUTPUT.PUT_LINE(V_ENAME||' '||V_JOB); --4. CLOSE CUR_EMP; END; 当系统使用一个隐式游标时,可以通过隐式游标的属性来了解操作的状态和结果,进而控制程序的流程。

简述游标原理

简述游标原理

简述游标原理
游标原理是指在数据库中用来对数据进行顺序访问的一种机制。

在数据库中,数据存储在表中,而表中的数据是以记录的形式存在的。

当我们需要对表中的数据进行操作时,就需要使用游标来进行数据的遍历和操作。

游标可以理解为一个指向表中数据的指针,它可以用来遍历表中的数据,并且可以根据需要进行数据的增删改查操作。

在数据库中,游标可以分为隐式游标和显式游标两种类型。

隐式游标是由数据库系统自动创建和使用的游标,它在进行数据操作时不需要用户显式地声明和使用,而是由数据库系统自动管理和控制。

而显式游标则需要用户自己进行声明和使用,用户可以通过对游标的操作来实现对数据的遍历和操作。

在使用游标进行数据操作时,通常需要进行游标的打开、数据的获取、数据的处理和游标的关闭等操作。

首先,需要使用OPEN语句来打开游标,然后使用FETCH语句来获取数据,并且可以使用循环来对数据进行处理,最后使用CLOSE 语句来关闭游标。

在实际应用中,游标可以用来实现对数据的逐条处理,例如对数据进行逐条打印、逐条更新、逐条删除等操作。

同时,游标也可以用来实现对数据的分页显示,例如在网页中进行数据的分页显示。

除了用来对数据进行顺序访问外,游标还可以用来实现对数据的随机访问。

例如,可以通过对游标的定位和移动来实现对数据的随机访问,从而可以实现对数据的快速检索和操作。

总的来说,游标原理是数据库中用来对数据进行顺序访问和操作的一种重要机制,它可以帮助我们实现对数据的逐条处理和分页显示,同时也可以帮助我们实现对数据的随机访问和操作。

通过对游标原理的深入理解和应用,可以帮助我们更好地实现对数据库中数据的管理和操作。

Oracle游标详解

Oracle游标详解

游标详解说明:本例中,通过SQL%FOUND属性判断修改是否成功,并给出相应信息。

显式游标游标的定义和操作游标的使用分成以下4个步骤。

1.声明游标在DECLEAR部分按以下格式声明游标:CURSOR 游标名[(参数1 数据类型[,参数2 数据类型...])]IS SELECT语句;参数是可选部分,所定义的参数可以出现在SELECT语句的WHERE子句中。

如果定义了参数,则必须在打开游标时传递相应的实际参数。

SELECT语句是对表或视图的查询语句,甚至也可以是联合查询。

可以带WHERE条件、ORDER BY或GROUP BY等子句,但不能使用INTO子句。

在SELECT语句中可以使用在定义游标之前定义的变量。

2.打开游标在可执行部分,按以下格式打开游标:OPEN 游标名[(实际参数1[,实际参数2...])];打开游标时,SELECT语句的查询结果就被传送到了游标工作区。

3.提取数据在可执行部分,按以下格式将游标工作区中的数据取到变量中。

提取操作必须在打开游标之后进行。

FETCH 游标名INTO 变量名1[,变量名2...];或FETCH 游标名INTO 记录变量;游标打开后有一个指针指向数据区,FETCH语句一次返回指针所指的一行数据,要返回多行需重复执行,可以使用循环语句来实现。

控制循环可以通过判断游标的属性来进行。

下面对这两种格式进行说明:第一种格式中的变量名是用来从游标中接收数据的变量,需要事先定义。

变量的个数和类型应与SELECT语句中的字段变量的个数和类型一致。

第二种格式一次将一行数据取到记录变量中,需要使用%ROWTYPE事先定义记录变量,这种形式使用起来比较方便,不必分别定义和使用多个变量。

定义记录变量的方法如下:说明:本例使用emp_cursor%ISOPEN判断游标是否打开;使用emp_cursor%ROWCOUNT获得到目前为止FETCH语句返回的数据行数并输出;使用循环来获取数据,在循环体中使用FETCH语句;使用emp_cursor%NOTFOUND判断FETCH 语句是否成功执行,当FETCH语句失败时说明数据已经取完,退出循环。

游标的定义

游标的定义

游标(CURSOR)也叫光标,在关系数据库中经常使用,在PL/SQL程序中可以用CURSOR与SELECT一起对表或者视图中的数据进行查询并逐行读取。

Oracle游标分为显示游标和隐式游标。

显示游标(Explicit Cursor):在PL/SQL程序中定义的、用于查询的游标称作显示游标。

隐式游标(Implicit Cursor):是指非PL/SQL程序中定义的、而且是在PL/SQL中使用UPDATE/DELETE语句时,Oracle系统自动分配的游标。

一.显示游标1.使用步骤(1)定义(2)打开(3)使用(4)关闭2.使用演示首先创建测试用表STUDENT,脚本如下:CREATE TABLE "STUDENT" ("STUNAME" VARCHAR2(10 BYTE),"STUNO" VARCHAR2(4 BYTE),"AGE" NUMBER,"GENDER" VARCHAR2(2 CHAR))(1).使用WHILE循环处理游标create or replace PROCEDURE PROC_STU1 ASBEGIN--显示游标使用,使用while循环declare--1.定义游标,名称为cur_stucursor cur_stu isselect stuno,stuname from student order by stuno;--定义变量,存放游标取出的数据v_stuno varchar(4);v_stuname varchar(20);begin--2.打开游标cur_stuopen cur_stu;--3.将游标的当前行取出存放到变量中fetch cur_stu into v_stuno,v_stuname;while cur_stu%found --游标所指还有数据行,则继续循环loop--打印结果dbms_output.PUT_LINE(v_stuno||'->'||v_stuname); --继续将游标所指的当前行取出放到变量中fetch cur_stu into v_stuno,v_stuname;end loop;close cur_stu; --4.关闭游标end;END PROC_STU1;(2).使用IF..ELSE代替WHILE循环处理游标create or replace PROCEDURE PROC_STU2 AS BEGIN--显示游标使用,使用if判断declare--1.定义游标,名称为cur_stucursor cur_stu isselect stuno,stuname from student order by stuno; --定义变量,存放游标取出的数据v_stuno varchar(4);v_stuname varchar(20);begin--2.打开游标cur_stuopen cur_stu;--3.将游标的当前行取出存放到变量中fetch cur_stu into v_stuno,v_stuname;loopif cur_stu%found then --如果游标cur_stu所指还有数据行--打印结果dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);--继续将游标所指的当前行取出放到变量中fetch cur_stu into v_stuno,v_stuname;elseexit;end if;end loop;close cur_stu; --4.关闭游标end;END PROC_STU2;(3).使用FOR循环处理游标create or replace PROCEDURE PROC_STU3 ASBEGIN--显示游标使用,使用for循环declare--定义游标,名称为cur_stucursor cur_stu isselect stuno,stuname from student order by stuno; beginfor stu in cur_stuloopdbms_output.PUT_LINE(stu.stuno||'->'||stu.stuname); --循环做隐含检查%notfoundend loop;--自动关闭游标end;END PROC_STU3;(4).常用的使用EXIT WHEN处理游标create or replacePROCEDURE PROC_STU1_1 ASBEGIN--显示游标使用,使用exit when循环declare--1.定义游标,名称为cur_stucursor cur_stu isselect stuno,stuname from student order by stuno;--定义变量,存放游标取出的数据v_stuno varchar(4);v_stuname varchar(20);begin--2.打开游标cur_stuopen cur_stu;loop--3.将游标的当前行取出存放到变量中fetch cur_stu into v_stuno,v_stuname;exit when cur_stu%notfound; --游标所指还有数据行,则继续循环--打印结果dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);end loop;close cur_stu; --4.关闭游标end;END PROC_STU1_1;二.隐式游标1.使用演示create or replace PROCEDURE PROC_STU4 ASBEGIN--隐式游标使用update student set stuname='张燕广' where stuno='1104';--如果更新没有匹配则插入一条新记录if SQL%NOTFOUND theninsert into student(STUNO,STUNAME,AGE,GENDER)values('1104','张燕广',18,'男');end if;END PROC_STU4;2.说明所有的SQL语句在上下文区内部都是可执行的,因为都有一个游标指向上下文区,此游标就是SQL游标,与现实游标不同的是,SQL游标在PL/SQL中不需要打开和关闭,而是在执行UPDATE、DELETE是自动打开和关闭。

游标

游标

一游标是什么游标字面理解就是游动的光标。

用数据库语言来描述:游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了,将游标放置到某行后,即可对该行数据进行操作,例如提取当前行的数据等。

二游标的分类显式游标和隐式游标显式游标的使用需要4步:1. 声明游标2. 打开游标open mycur(000627)注:000627是参数3. 读取数据fetch mycur into varno, varprice;4. 关闭游标close mycur;三游标的属性oracle 游标有4个属性:%ISOPEN,%FOUND,%NOTFOUND,%ROWCOUNT。

%ISOPEN判断游标是否被打开,如果打开%ISOPEN等于true,否则等于false;%FOUND %NOTFOUND判断游标所在的行是否有效,如果有效,则%FOUNDD等于true,否则等于false;%ROWCOUNT返回当前位置为止游标读取的记录行数。

四示例set serveroutput on;declarevarno varchar2(20);varprice varchar2(20);CURSOR mycur(vartype number) isselect emp_no,emp_zc from cus_emp_basicwhere com_no = vartype;beginif mycur%isopen = false thenopen mycur(000627);end if;fetch mycur into varno,varprice;while mycur%foundloopdbms_output.put_line(varno||','||varprice);if mycur%rowcount=2 thenPL/SQL记录的结构和C语言中的结构体类似,是由一组数据项构成的逻辑单元。

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

oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,关键字: oracle 隐式游标显示循环动态select 语句游标异常处理自定义游标的概念:游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。

游标的作用就是用于临时存储从数据库中提取的数据块。

在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。

这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。

游标有两种类型:显式游标和隐式游标。

在前述程序中用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标。

但是如果要提取多行数据,就要由程序员定义一个显式游标,并通过与游标有关的语句进行处理。

显式游标对应一个返回结果为多行多列的SELECT语句。

游标一旦打开,数据就从数据库中传送到游标变量中,然后应用程序再从游标变量中分解出需要的数据,并进行处理。

隐式游标如前所述,DML操作和单行SELECT语句会使用隐式游标,它们是:* 插入操作:INSERT。

* 更新操作:UPDATE。

* 删除操作:DELETE。

* 单行查询操作:SELECT ... INTO ...。

当系统使用一个隐式游标时,可以通过隐式游标的属性来了解操作的状态和结果,进而控制程序的流程。

隐式游标可以使用名字SQL来访问,但要注意,通过SQL游标名总是只能访问前一个DML操作或单行SELECT操作的游标属性。

所以通常在刚刚执行完操作之后,立即使用SQL游标名来访问属性。

游标的属性有四种,如下所示。

Sql代码【训练1】使用隐式游标的属性,判断对雇员工资的修改是否成功。

步骤1:输入和运行以下程序:Sql代码运行结果为:步骤2:将雇员编号1234改为7788,重新执行以上程序:运行结果为:说明:本例中,通过SQL%FOUND属性判断修改是否成功,并给出相应信息。

显式游标游标的定义和操作游标的使用分成以下4个步骤。

1.声明游标在DECLEAR部分按以下格式声明游标:CURSOR 游标名[(参数1 数据类型[,参数2 数据类型...])]IS SELECT语句;参数是可选部分,所定义的参数可以出现在SELECT语句的WHERE子句中。

如果定义了参数,则必须在打开游标时传递相应的实际参数。

SELECT语句是对表或视图的查询语句,甚至也可以是联合查询。

可以带WHERE条件、ORDER BY或GROUP BY等子句,但不能使用INTO子句。

在SELECT语句中可以使用在定义游标之前定义的变量。

2.打开游标在可执行部分,按以下格式打开游标:OPEN 游标名[(实际参数1[,实际参数2...])];打开游标时,SELECT语句的查询结果就被传送到了游标工作区。

3.提取数据在可执行部分,按以下格式将游标工作区中的数据取到变量中。

提取操作必须在打开游标之后进行。

FETCH 游标名INTO 变量名1[,变量名2...];或FETCH 游标名INTO 记录变量;游标打开后有一个指针指向数据区,FETCH语句一次返回指针所指的一行数据,要返回多行需重复执行,可以使用循环语句来实现。

控制循环可以通过判断游标的属性来进行。

下面对这两种格式进行说明:第一种格式中的变量名是用来从游标中接收数据的变量,需要事先定义。

变量的个数和类型应与SELECT 语句中的字段变量的个数和类型一致。

第二种格式一次将一行数据取到记录变量中,需要使用%ROWTYPE事先定义记录变量,这种形式使用起来比较方便,不必分别定义和使用多个变量。

定义记录变量的方法如下:变量名表名|游标名%ROWTYPE;其中的表必须存在,游标名也必须先定义。

4.关闭游标CLOSE 游标名;显式游标打开后,必须显式地关闭。

游标一旦关闭,游标占用的资源就被释放,游标变成无效,必须重新打开才能使用。

以下是使用显式游标的一个简单练习。

【训练1】用游标提取emp表中7788雇员的名称和职务。

Sql代码执行结果为:说明:该程序通过定义游标emp_cursor,提取并显示雇员7788的名称和职务。

作为对以上例子的改进,在以下训练中采用了记录变量。

【训练2】用游标提取emp表中7788雇员的姓名、职务和工资。

执行结果为:Sql代码说明:实例中使用记录变量来接收数据,记录变量由游标变量定义,需要出现在游标定义之后。

注意:可通过以下形式获得记录变量的内容:记录变量名.字段名。

【训练3】显示工资最高的前3名雇员的名称和工资。

执行结果为:Sql代码说明:该程序在游标定义中使用了ORDER BY子句进行排序,并使用循环语句来提取多行数据。

游标循环【训练1】使用特殊的FOR循环形式显示全部雇员的编号和名称。

Sql代码执行结果为:Sql代码说明:可以看到该循环形式非常简单,隐含了记录变量的定义、游标的打开、提取和关闭过程。

Emp_record 为隐含定义的记录变量,循环的执行次数与游标取得的数据的行数相一致。

【训练2】另一种形式的游标循环。

执行结果为:Sql代码说明:该种形式更为简单,省略了游标的定义,游标的SELECT查询语句在循环中直接出现。

显式游标属性虽然可以使用前面的形式获得游标数据,但是在游标定义以后使用它的一些属性来进行结构控制是一种更为灵活的方法。

显式游标的属性如下所示。

可按照以下形式取得游标的属性:游标名%属性要判断游标emp_cursor是否处于打开状态,可以使用属性emp_cursor%ISOPEN。

如果游标已经打开,则返回值为“真”,否则为“假”。

具体可参照以下的训练。

【训练1】使用游标的属性练习。

Sql代码执行结果为:说明:本例使用emp_cursor%ISOPEN判断游标是否打开;使用emp_cursor%ROWCOUNT获得到目前为止FETCH语句返回的数据行数并输出;使用循环来获取数据,在循环体中使用FETCH语句;使用emp_cursor%NOTFOUND判断FETCH语句是否成功执行,当FETCH语句失败时说明数据已经取完,退出循环。

【练习1】去掉OPEN emp_cursor;语句,重新执行以上程序。

游标参数的传递【训练1】带参数的游标。

Sql代码执行结果为:说明:游标emp_cursor定义了两个参数:p_deptno代表部门编号,p_job代表职务。

语句OPENemp_cursor(10, 'CLERK')传递了两个参数值给游标,即部门为10、职务为CLERK,所以游标查询的内容是部门10的职务为CLERK的雇员。

循环部分用于显示查询的内容。

【练习1】修改Open语句的参数:部门号为20、职务为ANALYST,并重新执行。

也可以通过变量向游标传递参数,但变量需要先于游标定义,并在游标打开之前赋值。

对以上例子重新改动如下:【训练2】通过变量传递参数给游标。

Sql代码执行结果为:Sql代码说明:该程序与前一程序实现相同的功能。

动态SELECT语句和动态游标的用法Oracle支持动态SELECT语句和动态游标,动态的方法大大扩展了程序设计的能力。

对于查询结果为一行的SELECT语句,可以用动态生成查询语句字符串的方法,在程序执行阶段临时地生成并执行,语法是:execute immediate 查询语句字符串into 变量1[,变量2...];以下是一个动态生成SELECT语句的例子。

【训练1】动态SELECT查询。

执行结果为:说明:SELECT...INTO...语句存放在STR字符串中,通过EXECUTE语句执行。

在变量声明部分定义的游标是静态的,不能在程序运行过程中修改。

虽然可以通过参数传递来取得不同的数据,但还是有很大的局限性。

通过采用动态游标,可以在程序运行阶段随时生成一个查询语句作为游标。

要使用动态游标需要先定义一个游标类型,然后声明一个游标变量,游标对应的查询语句可以在程序的执行过程中动态地说明。

定义游标类型的语句如下:TYPE 游标类型名REF CURSOR;声明游标变量的语句如下:游标变量名游标类型名;在可执行部分可以如下形式打开一个动态游标:OPEN 游标变量名FOR 查询语句字符串;【训练2】按名字中包含的字母顺序分组显示雇员信息。

输入并运行以下程序:运行结果为:说明:使用了二重循环,在外循环体中,动态生成游标的SELECT语句,然后打开。

通过语句letter:=chr(ascii(letter)+1)可获得字母表中的下一个字母。

异常处理错误处理错误处理部分位于程序的可执行部分之后,是由WHEN语句引导的多个分支构成的。

错误处理的语法如下:EXCEPTIONWHEN 错误1[OR 错误2] THEN语句序列1;WHEN 错误3[OR 错误4] THEN语句序列2;WHEN OTHERS语句序列n;END;其中:错误是在标准包中由系统预定义的标准错误,或是由用户在程序的说明部分自定义的错误,参见下一节系统预定义的错误类型。

语句序列就是不同分支的错误处理部分。

凡是出现在WHEN后面的错误都是可以捕捉到的错误,其他未被捕捉到的错误,将在WHEN OTHERS部分进行统一处理,OTHENS必须是EXCEPTION部分的最后一个错误处理分支。

如要在该分支中进一步判断错误种类,可以通过使用预定义函数SQLCODE( )和SQLERRM( )来获得系统错误号和错误信息。

如果在程序的子块中发生了错误,但子块没有错误处理部分,则错误会传递到主程序中。

下面是由于查询编号错误而引起系统预定义异常的例子。

【训练1】查询编号为1234的雇员名字。

Sql代码执行结果为:说明:在以上查询中,因为编号为1234的雇员不存在,所以将发生类型为“NO_DATA_FOUND”的异常。

“NO_DATA_FOUND”是系统预定义的错误类型,EXCEPTION部分下的WHEN语句将捕捉到该异常,并执行相应代码部分。

在本例中,输出用户自定义的错误信息“编号错误,没有找到相应雇员!”。

如果发生其他类型的错误,将执行OTHERS条件下的代码部分,显示“发生其他错误!”。

【训练2】由程序代码显示系统错误。

Sql代码执行结果为:Sql代码说明:程序运行中发生除零错误,由WHEN OTHERS捕捉到,执行用户自己的输出语句显示错误信息,然后正常结束。

在错误处理部分使用了预定义函数SQLCODE( )和SQLERRM( )来进一步获得错误的代码和种类信息。

预定义错误Oracle的系统错误很多,但只有一部分常见错误在标准包中予以定义。

定义的错误可以在EXCEPTION部分通过标准的错误名来进行判断,并进行异常处理。

常见的系统预定义异常如下所示。

相关文档
最新文档