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游标详解

Oracle游标详解

Oracle游标详解1、游标的概念游标(CURSOR):游标是把从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有⼀个数据指针,在初始状态下指向的是⾸记录,利⽤fetch语句可以移动该指针,从⽽对游标中的数据进⾏各种操作。

2、游标的作⽤游标是⽤来处理使⽤SELECT语句从数据库中检索到的多⾏记录的⼯具。

借助于游标的功能,数据库应⽤程序可以对⼀组记录逐条进⾏处理,每次处理⼀⾏。

3、游标的类型显式游标(Explicit Cursor):显式游标需要定义声明,在使⽤前要打开和获取,使⽤完毕后要关闭。

多⽤于返回多⾏的SELECT语句隐式游标(Implicit Cursor):在执⾏⼀个SQL语句时,服务器将⾃动创建⼀个隐式游标,该游标是内存中的⼯作区,存储了执⾏SQL 语句的结果,可通过游标的属性获得SQL的执⾏结果及状态信息。

多⽤于只返回⼀⾏的SQL语句4、隐式游标(ORACLE在创建隐式游标时,默认的游标名为SQL)1)游标的主要属性(显⽰游标、隐式游标)%FOUND 布尔型属性,当SQL语句⾄少影响⼀⾏时为TRUE,否则为FALSE%NOTFOUND 布尔型属性,当SQL语句没有影响的⾏时为TRUE,否则为FALSE%ISOPEN 布尔型属性,当游标已打开时返回TRUE,否则为FALSE(对⽤户⽽⾔,隐式游标永远是false)%ROWCOUNT 数字型属性,返回受到SQL影响的⾏数注意:属性名与游标名之间没有空格。

游标的属性只能在PL/SQL块中使⽤,⽽不能在SQL语句中使⽤例1 将PRODUCTS表中类型为1的所有产品的单价打9折,并显⽰该更新所影响的⾏数.BEGINUPDATE productsSET unitprice=unitprice*0.9WHERE categoryid=1;IF SQL%FOUND THENdbms_output.put_line(‘更新了’||SQL%ROWCOUNT||’条记录’);ELSEdbms_output.put_line(‘没有更新记录’);END IF;END;5、显式游标1)定义游标在使⽤显⽰游标之前,必须先在声明部分定义游标,其定义语法如下:CURSOR cursor_name[(parameter,…)]IS select_statement;说明:参数parameter形式如下:para_name [IN] data_type [:=|DEFAULT value](2)打开游标当打开游标时,ORACLE会执⾏游标所对应的SELECT语句,并将结果存放到结果集,其定义语法如下:OPEN cursor_name[(parameter,…)];(3)提取数据语法如下:FETCH cursor_name INTO variable[,…];说明:对游标第⼀次执⾏FETCH语句时,它将⼯作区中的第⼀条记录赋给赋给变量,并使⼯作区内的指针指向下⼀条记录。

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循环写法;单条处理⼤概就是上⾯那些范例的写法。

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还可以作为过程的参数进行传递,在不同的过程中复用相同的查询逻辑。

Java教程:oracle中的游标类型

Java教程:oracle中的游标类型

Java教程:oracle中的游标类型数据库中的游标(以下内容以Oracle为例):游标是sql的一个内存工作区,由系统或用户以变量的形式定义游标的作用就是用于临时存储从数据库中提取的数据块,通俗的讲游标就是一个结果集;游标的属性:%found:用于检测游标结果集是否存在数据,如果存在,则返回true;%notfound:用于检测游标结果集是否存在数据,如果不存在,则返回true;%isopen:用于检测游标是否打开,如果打开,则返回true;%rowcount:用于返回已提取的实际行数;例,当提取5行数据时关闭游标;常见游标分类:显式游标、隐式游标显式游标的定义步骤:声明游标declare cursor cursor_name[(parameter_name datatype)] is select_statementcursor_name emp%rowtype;打开游标 open cursor_name提取数据 fetch cursor_name into variable1...循环提取:loopexit when cursor_name%notfoundend loop;----------------------------------或者while cursor_name%found loopend loop;关闭游标 close cursor_name隐式游标:由系统隐含创建的游标,主要用于非查询语句;隐式游标的名字为sql,这是由oracle系统定义的;系统会自动打开游标、提取数据、关闭游标等操作;主要应用于:DML操作和select...into...的单行查询语句;隐式游标的属性:通过sql游标名总是只能访问前一个DML操作或单行select操作的游标属性;sql%found:为true时,表示DML或单行SELECT操作成功sql%notfoundsql%isopen:DML操作执行过程中,为true;结束为false;sql%rowcound:DML成功执行后的数据的行数;例:根据用户输入的员工号,更新指定员工的工资(+100);beginDML操作语句;if sql%found then执行语句并提交事务;else执行语句并回滚事务;end if;end;。

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,实际上他返回的是提取到相关集合的⾏数。

cursor用法

cursor用法

cursor用法游标(Cursor)是在数据库系统中用于访问和操作数据的一个指针。

它允许用户在数据库中的表中沿着行进行定位,并可以根据需要检索和更新数据。

在本文中,将详细介绍游标的用法,包括游标的类型、创建和使用游标、游标的属性和方法等方面的内容。

一、游标的类型在数据库系统中,通常有两种类型的游标:静态游标和动态游标。

1. 静态游标(Static Cursor):静态游标在创建时会将所有满足条件的记录复制到临时表中,然后通过游标进行操作。

静态游标可以在遍历期间更新和插入数据,但是插入和更新的数据只能在遍历结束后对表进行操作。

2. 动态游标(Dynamic Cursor):动态游标在创建时不会复制数据,而是直接通过游标访问源表。

动态游标可以在遍历期间实时更新和插入数据,而不需要等到遍历结束。

这种类型的游标通常用于需要及时反馈修改结果的应用场景。

二、创建和使用游标创建游标的一般步骤如下:1. 声明游标变量:首先,需要在数据库系统中声明一个游标变量,用于存储游标的信息和状态。

游标变量通常是根据游标类型和数据库系统的相关规则进行声明。

以Oracle为例,可以使用以下语法来声明一个游标变量:DECLARE cursor_name CURSOR [STATIC , DYNAMIC][FORWARD_ONLY , SCROLL]FOR select_statement;在这个语法中,cursor_name是游标变量的名称,STATIC或DYNAMIC用于指定静态游标或动态游标的类型,FORWARD_ONLY或SCROLL用于指定游标的滚动性。

2.打开游标:在声明游标变量之后,需要通过打开操作将游标变量与数据相关联。

可以使用OPEN语句打开游标,语法如下:OPEN cursor_name;这个语句将打开游标变量,并使其与SELECT语句关联起来。

3.检索数据:一旦游标打开,就可以使用FETCH语句从游标中检索数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
以下是使用显式游标的一个简单练习。
【训练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循环中可以定义查询,由于没有显式声明所以游标没有名字,记录名通过游标查询来定义。
游标中的子查询
语法如下:
可以看出与SQL中的子查询有没什么区别。
游标பைடு நூலகம்的更新和删除
在PL/SQL中依然可以使用UPDATE和DELETE语句更新或删除数据行。显示游标只有在需要获得多行数据的情况下使用。PL/SQL提供了仅仅使用游标就可以执行删除或更新记录的方法。
语法:
在多表查询中,使用OF自居来锁定特定的表,如果忽略了OF子句,那么所有表中选择的数据行都将被锁定。如果这些数据行已经被其他会话锁定,那么正常情况下oracle将等待,直到数据行解锁。
在UPDATE和DELETE中使用WHERE CURRENT OF子串的语法如下:
WHERE {CURRENT OF cursor_name|search_condition}
DBMS_OUTPUT.PUT_LINE(v_ename||','||v_job);
CLOSE emp_cursor;
END;
执行结果为:
Sql代码:
1.SCOTT,ANALYST
2.PL/SQL 过程已成功完成。
SCOTT,ANALYST
PL/SQL 过程已成功完成。
说明:该程序通过定义游标emp_cursor,提取并显示雇员7788的名称和职务。
Sql代码:
隐式游标的属性返回值类型意义
1.SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数
2.SQL%FOUND布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功
3.SQL%NOTFOUND 布尔型 与SQL%FOUND属性返回值相反
4.SQL%ISOPEN布尔型 DML执行过程中为真,结束后为假
7.ELSE
8.DBMS_OUTPUT.PUT_LINE('修改雇员工资失败!');
9.END IF;
10.END;
SET SERVEROUTPUT ON
BEGIN
UPDATE emp SET sal=sal+100 WHERE empno=1234;
IF SQL%FOUND THEN
DBMS_OUTPUT.PUT_LINE('成功修改雇员工资!');
Sql代码:
1.成功修改雇员工资!
2.PL/SQL 过程已成功完成。
成功修改雇员工资!
PL/SQL 过程已成功完成。
说明:本例中,通过SQL%FOUND属性判断修改是否成功,并给出相应信息。
显式游标:
游标的定义和操作
游标的使用分成以下4个步骤。
1.声明游标
在DECLEAR部分按以下格式声明游标:
CURSOR 游标名[(参数1 数据类型[,参数2 数据类型...])]
例:
SET SERVERIUTPUT ON
DECLARE R_emp EMP%ROWTYPE;
CURSOR c_emp IS select * from emp;
BEGIN
OPEN c_emp;
Loop
FETCH c_emp into r_emp;
EXIT WHEN C_EMP%NOTFOUND;
Dbms_output.put_line(\’Salary of Employee\’||r_emp.ename||\’is’\)
COMMIT;
ELSE
DBMS_OUTPUT.PUT_LINE('修改雇员工资失败!');
END IF;
END;
运行结果为:
Sql代码:
1.修改雇员工资失败!
2.PL/SQL 过程已成功完成。
修改雇员工资失败!
PL/SQL 过程已成功完成。
步骤2:将雇员编号1234改为7788,重新执行以上程序:
运行结果为:
4.emp_record emp_cursor%ROWTYPE;
5.BEGIN
6.OPEN emp_cursor;
7.FETCH emp_cursor INTO emp_record;
8.DBMS_OUTPUT.PUT_LINE(emp_record.ename||','|| emp_record.job||','|| emp_record.sal);
隐式游标的属性返回值类型意 义
SQL%ROWCOUNT整型代表DML语句成功执行的数据行数
SQL%FOUND布尔型值为TRUE代表插入、删除、更新或单行查询操作成功
SQL%NOTFOUND布尔型与SQL%FOUND属性返回值相反
SQL%ISOPEN布尔型DML执行过程中为真,结束后为假
【训练1】 使用隐式游标的属性,判断对雇员工资的修改是否成功。
WHERE CURRENT OFc1;
ENDLOOP;
END
=====================================================
oracle 隐式游标,显示游标,游标循环
动态SELECT语句和动态游标,异常处理,自定义异常
游标的概念:
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。
Oracle游标使用方法及语法大全
当查询返回结果超过一行时,就需要一个显式游标,此时用户不能使用select into语句。PL/SQL管理隐式游标,当查询开始时隐式游标打开,查询结束时隐式游标自动关闭。显式游标在PL/SQL块的声明部分声明,在执行部分或异常处理部分打开,取出数据,关闭。
使用游标语法:
2.打开游标
在可执行部分,按以下格式打开游标:
OPEN 游标名[(实际参数1[,实际参数2...])];
打开游标时,SELECT语句的查询结果就被传送到了游标工作区。
3.提取数据
在可执行部分,按以下格式将游标工作区中的数据取到变量中。提取操作必须在打开游标之后进行。
FETCH 游标名 INTO 变量名1[,变量名2...];
7.BEGIN
8.OPEN emp_cursor;
9.FETCH emp_cursor INTO v_ename,v_job;
10.DBMS_OUTPUT.PUT_LINE(v_ename||','||v_job);
11.CLOSE emp_cursor;
12.END;
SET SERVEROUTPUT ON
实例:
DELCARE
CURSORc1IS
SELECT empno,salary FROM emp
WHERE comm IS NULL
FOR UPDATE OFcomm;
v_comm NUMBER(10,2);
BEGIN
FOR r1 INc1 LOOP
IFr1.salary<500 THEN
v_comm:=r1.salary*0.25;

FETCH 游标名 INTO 记录变量;
游标打开后有一个指针指向数据区,FETCH语句一次返回指针所指的一行数据,要返回多行需重复执行,可以使用循环语句来实现。控制循环可以通过判断游标的属性来进行。
下面对这两种格式进行说明:
第一种格式中的变量名是用来从游标中接收数据的变量,需要事先定义。变量的个数和类型应与SELECT语句中的字段变量的个数和类型一致。
步骤1:输入和运行以下程序:
Sql代码:
1.SET SERVEROUTPUT ON
2.BEGIN
3.UPDATE emp SET sal=sal+100 WHERE empno=1234;
4.IFSQL%FOUNDTHEN
5.DBMS_OUTPUT.PUT_LINE('成功修改雇员工资!');
相关文档
最新文档