Oracle数据库游标使用

合集下载

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:返回游标当前处理的行数。

oracle 游标循环用法

oracle 游标循环用法

oracle 游标循环用法游标循环是在Oracle数据库中常用的一种技术,它允许我们按行循环访问查询结果集,并对每一行的数据进行操作。

在本文中,我将逐步解释Oracle游标循环的用法,并提供一些示例来帮助读者更好地理解。

第一步:游标的定义在使用游标之前,我们需要先定义一个游标。

游标是一个指向结果集的指针,用于从结果集中逐行获取数据。

在Oracle中,我们可以使用DECLARE 语句定义游标。

例如:DECLARECURSOR cursor_name ISSELECT column1, column2, ...FROM table_nameWHERE condition;在上面的示例中,我们定义了一个名为cursor_name的游标,它选择具有满足条件的结果集。

游标名可以根据需要进行自定义。

第二步:游标的打开和关闭在使用游标之前,我们需要先打开它,以便开始遍历结果集。

这可以通过使用OPEN语句来实现。

例如:OPEN cursor_name;在执行OPEN语句之后,游标将指向结果集的第一行。

在完成游标的使用后,我们应该关闭它。

这可以通过使用CLOSE语句来实现。

例如:CLOSE cursor_name;关闭游标后,游标将不再指向结果集的任何行。

第三步:游标的循环遍历一旦游标打开,我们可以使用游标的名称在循环中获取结果集的每一行。

在Oracle中,我们有两种循环方法可以使用游标:FOR循环和WHILE 循环。

1. FOR循环:FOR循环是使用游标的一种常用方法。

它允许我们在循环中自动遍历游标的所有行。

以下是FOR循环的语法:FOR record_name IN cursor_nameLOOP在这里可以对每一行的数据进行操作END LOOP;在上面的示例代码中,record_name是一个记录变量,表示结果集的一行数据。

在循环中,我们可以使用record_name来访问每一行的列值,并进行相应的操作。

2. WHILE循环:WHILE循环是另一种使用游标的循环方法。

Oracle数据库的游标和for循环使用

Oracle数据库的游标和for循环使用

Oracle数据库的游标和for循环使⽤1. 游标的概念和作⽤游标是 sql 的⼀个内存⼯作区,由系统或⽤户以变量的形式定义游标的作⽤就是⽤于临时存储从数据库中提取的数据块(结果集)。

它有⼀个指针,从上往下移动(fetch),从⽽能够遍历每条记录。

⽤牺牲内存来提升 SQL 执⾏效率,适⽤于⼤数据处理。

(摘抄⾃https:///qq_34745941/java/article/details/81294166)。

2.游标结构图3.具体⽤法 游标有四⼤属性,分别是1. “SQL%ISOPEN” :布尔类型。

判断游标是否打开 2.“SQL%FOUND”:布尔类型。

判断上⼀条fetch语句是否有值,有则为true,否则为false; 3.“SQL%NOTFOUND”:布尔类型。

与2相反,常⽤作退出循环的条件。

4.“SQL%ROWCOUNT”:整型。

当前成功执⾏更改的数据⾏数。

3.1 静态游标 3.1.1 隐式游标 使⽤DML操作(增删改)或select……into……会⾃动创建隐式游标,名称是“sql”,该游标会⾃动声明,打开和关闭。

⽆需⼈为开启或关闭。

create or replace procedure ATest(O_Result Out VarChar2)isv_id staff.id%type;begininsert into staff(id,name) values(1,'张三');if sql%found thenO_Result:='添加成功';end if;update staff set name ='李四'where id =1;if sql%found thenO_Result:='更新成功';end if;delete from staff where id =1;if sql%found thenO_Result:='删除成功';end if;select id into v_id from staff;if sql%found thenO_Result:='查询成功';end if;if sql%isopen thenO_Result:='游标为开启状态,但不可能⾛到这⼀步'; --游标只有在执⾏上述增删改操作才会开启并⾃动关闭elseO_Result:='游标为关闭状态';end if;exceptionwhen Others thenbeginO_Result:='N_SQLCODE is '||SQLCODE||' and SQLERRM is '||SQLERRM;rollback;end;end; 3.1.2 显式游标 显⽰游标⼜分为不带参数和带参数两种 ⽆参:create or replace procedure ATest(O_Result Out VarChar2)isv_cur_info staff%rowtype;cursor v_cur is--声明游标为staff表的数据集select*from staff;beginopen v_cur; --打开游标fetch v_cur into v_cur_info; --赋值给游标O_Result:='ID:'||v_cur_info.id||',Name:'||v_cur_;--输出值close v_cur; --关闭游标exceptionwhen Others thenbeginO_Result:='N_SQLCODE is '||SQLCODE||' and SQLERRM is '||SQLERRM;rollback;end;end;输出结果: ID:1,Name:张三带参:create or replace procedure ATest(O_Result Out VarChar2)isv_cur_info staff%rowtype;cursor v_cur(v_id staff.id%type) is--声明游标为staff表的数据集select*from staff where id =v_id; --参数:v_idbeginopen v_cur(1); --打开游标fetch v_cur into v_cur_info; --赋值给游标O_Result:='ID:'||v_cur_info.id||',Name:'||v_cur_;close v_cur; --关闭游标exceptionwhen Others thenbeginO_Result:='N_SQLCODE is '||SQLCODE||' and SQLERRM is '||SQLERRM;rollback;end;end;输出结果: ID:1,Name:张三 3.2 动态游标 3.2.1 ⾃定义类型游标 ⾃定义游标类型声明写法:TYPE ref_type_name IS REF CURSOR[RETURN return_type];ref_type_name代表我们⾃定义类型的名称,cursor是系统默认的return_type代表数据库表中的⼀⾏,或⼀个记录类型,是⼀个返回类型;返回值不是必要的,⽆返回值则称为弱类型,更加灵活;有返回值称为强类型,减少错误;弱类型写法:create or replace procedure ATest(O_Result Out VarChar2)isv_cur_info staff%rowtype;type v_cur_type is ref cursor; --⾃定义游标类型v_cur v_cur_type;beginopen v_cur for--打开游标并声明select*from staff where id<5;loop --开始循环fetch v_cur into v_cur_info; -- 赋值exit when v_cur%notfound; --判断没有值就退出循环O_Result:= O_Result||chr(10)||'ID:'||v_cur_info.id||',Name:'||v_cur_;end loop;close v_cur;exceptionwhen Others thenbeginO_Result:='N_SQLCODE is '||SQLCODE||' and SQLERRM is '||SQLERRM;rollback;end;end;另⼀种写法:create or replace procedure ATest(O_Result Out VarChar2)isv_sql varchar(1000);v_param staff.id%type:=5;v_cur_info staff%rowtype;type v_cur_type is ref cursor; --⾃定义游标类型v_cur v_cur_type;beginv_sql:='select * from staff where id <:id';open v_cur for v_sql --打开游标并声明using v_param; --绑定参数⽅法loop --开始循环fetch v_cur into v_cur_info; -- 赋值exit when v_cur%notfound; --判断没有值就退出循环O_Result:= O_Result||chr(10)||'ID:'||v_cur_info.id||',Name:'||v_cur_;end loop;close v_cur;exceptionwhen Others thenbeginO_Result:='N_SQLCODE is '||SQLCODE||' and SQLERRM is '||SQLERRM;rollback;end;end;强类型写法:三个注意事项:1.强类型⽆法使⽤绑定参数⽅法 2.for后⾯必须是sql,不能是字符串,如上⾯的v_sql; 3.参数必须对应;create or replace procedure ATest(O_Result Out VarChar2)isv_cur_info staff%rowtype;type v_cur_type is ref cursor return staff%rowtype ; --⾃定义游标类型v_cur v_cur_type;beginopen v_cur for--打开游标并声明select*from staff where id <5;loop --开始循环fetch v_cur into v_cur_info; -- 赋值exit when v_cur%notfound; --判断没有值就退出循环O_Result:= O_Result||chr(10)||'ID:'||v_cur_info.id||',Name:'||v_cur_;end loop;close v_cur;exceptionwhen Others thenbeginO_Result:='N_SQLCODE is '||SQLCODE||' and SQLERRM is '||SQLERRM;rollback;end;end; 3.2.2 系统类型游标 简写⼿动声明⾃定义游标的过程type v_cur_type is ref cursor return staff%rowtype ; --⾃定义游标类型v_cur v_cur_type;等同于 v_cur sys_refcursor;4.效率问题没有实际测试过,根据其他博客总结是这样:⼀般来说批量处理的速度要最好,隐式游标的次之,单条处理的最差以下是⽰例:1、批量处理open游标;loopfetch游标bulk collect into集合变量(也就是table类型哦) limit 数值; -- ⼀般 500 左右exit when条件--(变量.count = 0,如果⽤ sql%notfound 不⾜ limit 的记录就不会被执⾏哦)close游标;2、隐式游标for x in (sql 语句) loop... 逻辑处理end loop;3、单条处理open游标;loopfetch游标into变量;exit when条件end loop;close游标;————————————————原⽂链接:https:///qq_34745941/java/article/details/81294166批量处理的关键字不是很了解,下次学习下在记录起来;隐式游标写法最简洁明了,类似于程序中的for循环写法;单条处理⼤概就是上⾯那些范例的写法。

python oracledb cursor用法

python oracledb cursor用法

python oracledb cursor用法Python在与Oracle数据库交互时,使用oracledb模块是一种高效的方式。

oracledb是一个Python库,它允许Python程序与Oracle数据库进行连接和交互。

本文旨在详细介绍oracledb中cursor(游标)的用法,为开发者提供一个清晰的指南。

游标的基本概念在数据库操作中,游标是一个非常重要的概念。

它是一个数据库查询的结果集,允许程序逐行访问查询的结果。

在使用oracledb与Oracle数据库进行交互时,游标用于执行SQL语句,并且通过游标来处理SQL语句的结果。

连接数据库在介绍游标的使用之前,首先需要建立与Oracle数据库的连接。

这一步骤是通过oracledb模块的connect方法完成的。

以下是一个简单的连接示例:```pythonimport oracledb数据库连接字符串,格式:用户名/密码@数据库地址:端口/服务名dsn = "user/password@localhost:1521/orcl"connection = oracledb.connect(dsn)```成功连接数据库后,就可以创建游标并使用它来执行SQL语句了。

创建和使用游标游标的创建是通过连接对象的cursor()方法完成的。

创建游标后,可以使用它来执行SQL语句,并遍历结果集。

以下是创建游标并执行一个简单查询的示例:```python创建游标cursor = connection.cursor()使用游标执行SQL查询cursor.execute("SELECT * FROM employees WHEREdepartment_id = :id", [10])遍历查询结果for row in cursor:print(row)```在这个示例中,`:id`是一个参数化查询的一部分,这意味着其值在执行时被提供,这有助于防止SQL注入攻击。

oracle open cursor参数

oracle open cursor参数

oracle open cursor参数摘要:1.Oracle 概述2.Oracle 中的游标3.Oracle Open Cursor 参数4.游标的打开和关闭5.Oracle Open Cursor 参数的使用示例6.总结正文:1.Oracle 概述Oracle 是一款广泛使用的关系型数据库管理系统,它以其高效、稳定和安全而著称。

Oracle 数据库中,游标(Cursor)是一种重要的数据处理工具,用于从数据库中检索数据并进行逐行处理。

2.Oracle 中的游标在Oracle 中,游标允许用户在记录行间移动,从而方便地对记录执行插入、更新和删除操作。

游标可以分为静态游标和动态游标两种类型。

静态游标在声明时需要指定结果集,而动态游则不需要。

3.Oracle Open Cursor 参数Oracle Open Cursor 参数是在执行动态游标操作时需要使用的参数。

它用于定义游标的属性,如游标的名称、打开方式、排序方式等。

Oracle Open Cursor 参数的使用可以提高游标操作的效率和灵活性。

4.游标的打开和关闭在Oracle 中,游标的打开和关闭是非常重要的操作。

打开游标时,需要使用OPEN CURSOR 语句,同时指定游标的名称、打开方式和结果集等参数。

关闭游标时,需要使用CLOSE CURSOR 语句,同时指定游标的名称。

5.Oracle Open Cursor 参数的使用示例以下是一个使用Oracle Open Cursor 参数的示例:```-- 创建一个游标DECLAREv_cursor SYS_REFCURSOR;BEGIN-- 打开游标OPEN CURSOR v_cursor FOR "SELECT * FROM employees WHERE department = 10";-- 获取游标的属性FETCH CURSOR v_cursor INTO v_employee;-- 对游标中的数据进行处理WHILE v_cursor%NOTFOUND = 0 LOOP-- 输出游标中的数据DBMS_OUTPUT.PUT_LINE(v_employee.employee_id || " " ||v_employee.employee_name);-- 获取下一行数据FETCH NEXT FROM v_cursor INTO v_employee;END LOOP;-- 关闭游标CLOSE CURSOR v_cursor;END;```6.总结Oracle Open Cursor 参数是Oracle 数据库中游标操作的重要组成部分。

oracle 游标 参数

oracle 游标 参数

oracle 游标参数(原创版)目录1.Oracle 游标的概念2.Oracle 游标的作用3.Oracle 游标的参数4.Oracle 游标的使用方法5.Oracle 游标的注意事项正文1.Oracle 游标的概念Oracle 游标是 Oracle 数据库中的一种对象,用于从 SQL 查询结果集中检索数据。

游标允许用户在记录行间移动,同时对记录执行插入、更新和删除操作。

游标在存储过程中非常有用,因为它允许用户在记录行间进行遍历和操作。

2.Oracle 游标的作用Oracle 游标的主要作用有以下几点:- 在记录行间移动:游标允许用户在查询结果集中遍历记录行,方便对记录执行插入、更新和删除操作。

- 对记录执行操作:游标提供了对记录执行插入、更新和删除操作的途径。

- 灵活处理查询结果:游标允许用户按照需要对查询结果进行处理,提高了代码的可读性和可维护性。

3.Oracle 游标的参数Oracle 游标包含多个参数,下面介绍几个常用的参数:- %NOTFOUND:表示游标中的记录不存在。

当游标遍历到结果集的最后一行时,%NOTFOUND 为真。

- %FOUND:表示游标中的记录存在。

当游标遍历到结果集中的任意一行时,%FOUND 为真。

- %ROWCOUNT:表示游标当前行号。

该参数用于确定游标在结果集中的位置。

- %NOTFOUND_COUNT:表示游标中不存在的记录数量。

该参数用于确定游标在结果集中的非空记录数量。

4.Oracle 游标的使用方法以下是使用 Oracle 游标的基本步骤:- 声明游标:使用 DECLARE 语句声明游标。

声明中需要指定游标的名称、打开的表名和 SQL 查询语句。

- 打开游标:使用 OPEN 语句打开游标。

需要指定游标名称和 SQL 查询语句。

- 获取游标数据:使用 FETCH 语句从游标中获取数据。

需要指定游标名称和用于保存查询结果的变量。

- 关闭游标:使用 CLOSE 语句关闭游标。

oracle cursor正确用法

oracle cursor正确用法

oracle cursor正确用法Oracle Cursor正确用法什么是Oracle Cursor在Oracle数据库中,Cursor(游标)是一种用于检索和操作结果集的数据库对象。

它可以被视为内存中的一个指针,用于指向查询结果集的当前行。

通过游标,我们可以对查询结果进行遍历和操作。

Cursor的声明和打开(OPEN)使用Cursor之前,需要先声明并打开它。

采用以下步骤:1.声明Cursor:CURSOR cursor_name IS query;–cursor_name是游标的名称,可以根据实际情况自行命名。

–query是查询的语句,可以是简单的SELECT语句,也可以包括一些复杂的逻辑。

2.打开Cursor:OPEN cursor_name;–cursor_name是要打开的游标名称。

Cursor的使用遍历结果集可以使用LOOP语句来遍历Cursor的结果集。

LOOPFETCH cursor_name INTO variable1, variable2, ...;EXIT WHEN cursor_name%NOTFOUND;-- 进行一些逻辑操作END LOOP;•FETCH语句用于获取当前行的数据,将其赋值给变量。

•EXIT WHEN cursor_name%NOTFOUND用于在结果集遍历完后跳出循环。

关闭Cursor在使用Cursor之后需要关闭它,释放资源。

CLOSE cursor_name;Cursor的参数传递Cursor还可以作为过程的参数进行传递。

通过传递Cursor,可以在不同的过程中复用相同的查询逻辑。

PROCEDURE procedure_name(cursor_name IN OUT SYS_REF CURSOR) IS...总结通过声明、打开、遍历和关闭Cursor,我们可以有效地操作Oracle数据库中的结果集。

同时,Cursor还可以作为过程的参数进行传递,在不同的过程中复用相同的查询逻辑。

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存储过程游标的用法进行深入探讨,我对游标的作用和使用方式有了更清晰的认识。

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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle数据库游标使用
较好的PL/SQL程序设计是在PL/SQL块中使用象DBMS_SQL这样的内建 包或执行EXECUTE IMMEDIATE命令建立动态SQL来执行DDL命令, PL/SQL编译器保证对象引用以及用户的权限。 SELECT [DISTICT|ALL]{*|column[,column,...]} INTO (variable[,variable,...] |record) FROM {table|(sub-query)}[alias] WHERE............ 该sql是隐性游标, SELECT语句只返回一行数据。如果超过一行数据, 那么就要使用显式游标.
举例
• DELETE FROM emp • WHERE empno=p_empno; • UPDATE former_emp • SET date_deleted=SYSDATE • WHERE empno=p_empno; • EXCEPTION • • • WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(Employee Number Not Found!); END
隐性游标的处理
• 当运行DML语句时,PL/SQL打开一个内建游标并处理结果,游标是维护 查询结果的内存中的一个区域,游标在运行DML语句时打开,完成后关 闭。隐式游标只使用SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT, SQL%ISOPEN四个属性.SQL%FOUND,SQL%NOTFOUND是布尔值, SQL%ROWCOUNT是整数值, SQL%ISOPEN是布尔值。
%ROWTYPE
• 使用%ROWTYPE属性可以声明一个基于表或游标的行对象,也称为记录 对象,例如,可以基于ARTIST声明一个行对象: • declare • newXmUnitBg kwmis_xm_unit_bg%rowtype; • 一旦生成这条记录,那么就可以通过游标使用句号来提取newXmUnitBg 的字段值, • cursor frdm_cursor is SELECT FRDM_TZH FROM kwmis_xm_unit_bg WHERE bgoid=V_BGOID and bg_flag='1' • AND FRDM_TZH in(select frdm from kwmis_unit_baseinfo); • begin • OPEN frdm_cursor; • LOOP • FETCH frdm_cursor INTO v_frdm; • if frdm_cursor%notfound then frdm_cursor%found • exit when frdm_cursor%notfound frdm_cursor%found • %TYPE是跟表中的字段的类型一致,是变量类型.而%ROWTYPE是跟表中的 行类型一致,是record类型.
SQL%ROWCOUNT和SQL%ISOPEN
• 在执行任何DML语句之前,SQL%ROWCOUNT的值都是NULL,对于SELECT INTO语句,如果执行成功,SQL%ROWCOUNT的值为1,如果没有成功, SQL%ROWCOUNT的值为0,同时产生一个异常NO_DATA_FOUND. • SQL%ISOPEN是一个布尔值,如果游标打开,则为TRUE, 如果游标关闭, 则为FALSE.对于隐式游标而言SQL%ISOPEN总是FALSE,这是因为隐式 游标在DML语句执行时打开,结束时就立即关闭。
存储过程
• create [or replace] procedure procedure_name • [ (argment [ { in| in out }] TYPE, • argment [ { in | out | in out } ] type • { is | as } • <类型.变量的说明> • ( 注: 不用 declare 语句 ) • Begin • <执行部分> • exception • <可选的异常处理说明> • end;
显式游标
• • • • • • • • • • • • • • • • • • • • 当查询返回结果超过一行时,就需要一个显式游标,此时用户不能使用select into语句。 cursor cursor_name is 查询语句 查询语句; open cursor_name; Fetch cursor_name into 变量列表; Close cursor_name; declare cursor c1 is select ename, sal from emp where rownum<11; v_ename varchar2(10); v_sal number(7,2); begin open c1; fetch c1 into v_ename, v_sal; while c1%found loop dbms_output.put_line(v_ename||to_char(v_sal) ); fetch c1 into v_ename, v_sal; end loop; close c1; end;
显性游标的处理
• 在执行任何DML语句前cursor_name%FOUND和 cursor_name%NOTFOUND的值都是NULL,在执行DML语句后, cursor_name%FOUND的属性值将是: • . TRUE :fetch成功返回true. • 当cursor_name%FOUND为TRUE时, cursor_name%NOTFOUND 为FALSE。
数字式循环
• • • • • • • • • • • • • • • • • For 循环计数器 in 下限 .. 上限 loop 要执行的语句; end loop; 例子: DECLARE V_counter number := 7; Begin Inert into temp_table (num_col) Values ( v_counter ); For v_counter IN 20 .. 30 loop Insert into temp_table (num_col ) Values ( v_counter ); End loop; Inert into temp_table (num_col ) Values( v_counter ); End ;
举例
• CREATE OR REPLACE PROCEDURE FIRE_EMPLOYEE (pempno in number) • AS
• v_ename EMP.ENAME%TYPE; • BEGIN
• SELECT ename INTO v_ename • FROM emp • WHERE empno=p_empno; • INSERT INTO FORMER_EMP(EMPNO,ENAME) • VALUES (p_empno,v_ename);
WHILE 循环
• While <布尔表达式> loop • 要执行的语句; • end loop; • 例子. • declare • x number; • begin • x:= 1; • while x<10 loop • dbms_output.put_line(to_char(x)||’还小于10’); • x:= x+1; • end loop; • end;
%type
• %TYPE:属性的一种方式是在变量声明中使用。%TYPE是用于取的表或游 标中的字段类型, • 例如,可以使用它来生命和ARTIST表中字段类型相同的变量,注意可以 在表中名和字段之间使用点号(.)。 • DEALARE • V_UNIT_NAME kwmis_xm_unit_bg.UNIT_NAME%TYPE; • V_BGOID kwmis_xm_unit_bg.BGOID%TYPE; • 通过这种方式就不需要明确指定SQL数据类型,从而改善了代码的可维 护性,因为表中字段类型的改变会自动反映在PL/SQL中
SQL%FOUΒιβλιοθήκη D和SQL%NOTFOUND• 在执行任何DML语句前SQL%FOUND和SQL%NOTFOUND的值都是NULL,在执 行DML语句后,SQL%FOUND的属性值将是: • . TRUE :INSERT,至少有一行被insert成功 • . TRUE :DELETE和UPDATE,至少有一行被DELETE或UPDATE. • . TRUE :SELECT INTO至少返回一行 • 当SQL%FOUND为TRUE时,SQL%NOTFOUND为FALSE。
简单循环
• • • • Loop 要执行的语句; exit where 条件; end loop;
• 例子. • declare • x number; • begin • x:= 0; • loop • x:=x+1; • dbms_output.put_line(to_char(x)); • exit when x=10; • end loop; • end;
cursor_name%rowcount和cursor_name%isopen
• 在执行任何DML语句之前,cursor_name%ROWCOUNT的值都是NULL,对于 fetch语句,如果执行成功,cursor_name%ROWCOUNT的值为1,如果没 有成功,cursor_name%ROWCOUNT的值为0,同时产生一个异常 NO_DATA_FOUND. • cursor_name%ISOPEN是一个布尔值,如果游标打开,则为TRUE, 如果 游标关闭,则为FALSE.对于隐式游标而言cursor_name%ISOPEN总是 FALSE,这是因为隐式游标在DML语句执行时打开,结束时就立即关闭。
相关文档
最新文档