PL/SQL 会为程序中执行的每一条UPDATE,DELETE,INSERT 语句使用一个隐式游标。隐式游标有SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT三个属性,这些属性用于控制程序流程或者了解程序的状态。
当运行DML语句时,PL/SQL打开一个内建游标并处理结果,游标是维护查询结果的内存中的一个区域,游标在运行DML语句时打开,完成后关闭。隐式游标只使用SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT三个属性。SQL%FOUND,SQL%NOTFOUND是布尔值,SQL%ROWCOUNT是整数值。
1. SQL%FOUND和SQL%NOTFOUND
在执行任何DML语句前SQL%FOUND和SQL%NOTFOUND的值都是NULL,在执行DML语句后,SQL%FOUND的属性值将是:
a. TRUE :INSERT
b. TRUE :DELETE和UPDATE,至少有一行被DELETE或UPDATE.
c. TRUE :SELECT INTO至少返回一行
当SQL%FOUND为TRUE时,SQL%NOTFOUND为FALSE。
2. SQL%ROWCOUNT
在执行任何DML语句之前,SQL%ROWCOUNT的值都是NULL,对于SELECT INTO语句,如果执行成功,SQL%ROWCOUNT的值为1,如果没有成功,SQL%ROWCOUNT的值为0,同时产生一个异常NO_DATA_FOUND.
3. SQL%ISOPEN
SQL%ISOPEN是一个布尔值,如果游标打开,则为TRUE, 如果游标关闭,则为FALSE.对于隐式游标而言SQL%ISOPEN总是FALSE,这是因为隐式游标在DML语句执行时打开,结束时就立即关闭。
Declare
/* 定义静态游标 */
Cursor emps is
Select * from users where rownum<6 order by 1;
company_id users%rowtype;
Row number :=1;
Begin
Open emps; /* 打开静态游标 */
Fetch emps into company_id; /* 读取游标当前行 */
Loop
If emps%found then
Dbms_output.put_line('Looping over record '||row|| ' of ' || emps%rowcount);
Fetch emps into company_id;
Row := row + 1;
Elsif emps%notfound then
Exit;
End if;
End loop;
If emps%isopen then
Close emps; /* 关闭游标 */
End if;
End;
分享到:
相关推荐
sql server 游标实例sql server 游标实例sql server 游标实例sql server 游标实例
--以下是把批号拆分的游标 declare @EntryID int --定义变量行号 declare @BillNo varchar(100) --定义变量单据号 declare @Number varchar(100) --定义变量物料代码 declare @qty decimal(18,6) --定义变量数量 ...
oracle游标实例
Oracle游标实例.txt
既简单,又使用的游标实例
触发器,游标,实例。拿出来供同学们一起学习。
实现了游标的一些使用方法,两种定义与使用的方法,存储过程的定义一使用调用返回结果集的存储过程
几程SQL游标的使用技巧.
oracle 的函数、存储过程、游标、简单实例 oracle常用语句oracle 的函数、存储过程、游标、简单实例 oracle常用语句
oracle job 存储过程 视图 游标 实例
内涵增删查改实例 如果能不用游标,尽量不要使用游标 用完用完之后一定要关闭和释放 性能上,游标会吃更多的内存,减少可用的并发,占用宽带,锁定资源
这是个人学习的游标的总结,希望能和大家分享。 通过具体实例,可以帮助学者学习游标的使用。
mysql游标使用的整个过程为: 1.创建游标 代码如下:DECLARE calc_bonus CURSOR FOR SELECT id, salary, commission FROM...实例代码如下所示: 代码如下:begindeclare temp_user_id int default null;declare stop int
关于oracle数据库隐式游标、显式游标相关用法的详细实例,还不错
教你怎么使用sql游标实例分享,需要的朋友参考下
SQL语句\sql 游标总结SQL语句\sql 游标总结SQL语句\sql 游标总结
FETCH NEXT FROM stu_corsor --下一条记录 FETCH PRIOR FROM stu_corsor --上一条记录
有俩种方法: 一种是声明系统游标,一种是声明自定义游标,然后后面操作一样,参数类型为 in out 或out (1)声明个人系统游标.(推荐) 代码如下: create or replace p_temp_procedure ( cur_arg out sys_refcursor;...
sql游标遍历实例