目录
1游标
游标:是构建在PL/SQL中用来记录查询数据库结果的指针,他能够一次性访问一行结果集。允许以编程的方式访问数据,在oralce 系统中分为显示游标和隐式游标。
1.1 定义游标
主要是定义一个名词来对应一条sql查询语句,从而可以利用该游标对查询结果集进行业务操作。
语法 cursor cursor_name [(parameter....) ] [return result_type] is select statement
cursor_name 游标名称
parameter 输入参数,用户在使用游标时输入参数辅助,也可以使用默认值。输入参数有多个,用逗号分隔
return result_type 操作返回类型 可选项
select statement 将要处理的查询语句
如:
declare
cursor test (dept number:=10)
is
select * from emp where dept:=dept;
begin
..
end;
1.2 打开游标
在声明过游标以后,该游标并不会被oracle执行,只有在打开过游标后才能执行查询语句。在打开游标过程中,如果有输入参数,这时候需要为这些参数赋值。
语法 open cursor_name [value[....]]
当打开游标时会完成以下几件事情:
- 检查联遍变量的取值
- 根据取值,确定活动集
- 活动集的指针指向第一行
open test(10)
1.3 从游标中获取数据
在打开游标后,如果想获取结果集中的数据,就需要从游标中获取数据,这时候使用fetch语句,把获取的单行数据保存到定义的变量中。
语法: fetch cursor_name into variable(,...) /pl/sql记录
游标中包含一个数据行指针,打开游标后,指针指向结果集的第一行,fetch每执行一次,游标向后移动一行,直到结束,游标只能逐个向后移动,不能跳跃移动或者向前移动。当游标的最后一条记录是不存在的,为空时,表示数据行已经遍历完成,这时候游标的%found 属性为false。
1.4 游标for循环
使用for循环可以遍历游标,在打开游标的过程中,不需要打开和关闭游标,也不需要手动判断游标是否还有返回记录。并在for循环语句中设置的循环变量值存储了当前检索记录的所有值,所以不需要定义变量接受记录值。
语法: for var_record in cursor_name loop
pl/sql statement
end loop;
var_record 类型变量 cursor_name 游标名称 pl/sql statement pl/sql 语句
declare
cursor test (dept number:=10) -- 定义游标
is
select * from emp where dept=dept ;
begin
for current in test loop
....
end loop;
end;
1.5 游标属性
在游标检索的过程中检索的时单行数据,而游标返回的时一个结果集合,存在多行数据。这时候如何知道检索的数据是结果集中的那一行,这时候我们就用到游标的属性%isopen %found %notfound %rowcount 。这些属性描述游标操作的执行情况。这些属性只能存在PL/SQL的流程控制语句中,而不能使用在sql语句中
1%found
该属性表示当前游标是否指向有效一行,返回结果为布尔值。通过这个属性我们可以判断是否结束游标的使用
2% notfound
该属性表示当前游标是否指向有效一行,返回结果为布尔值。通过这个属性我们可以判断是否结束游标的使用。这个属性值与%found类型 但是值正好相反。
3%rowcount
该属性为当前游标所在的行数。这个属性在循环判断中有效,这时候不必检索所有行,就可以中断操作。
4%isopen
是否打开游标
declare
vid number;-- 声明变量
cursor test (vno number) is -- 定义游标
select * from emp where dept= vno;
begin
if test%isopen = false then -- 判断游标是否打开
open test(20)
end if;
fetch test into vid ; -- 读取当前游标的数据
while test%found ; -- 如果游标有效,则执行循环
loop
if test%rowcount = 4 then
exit
end if;
end loop;
end;
参考oracle 从入门到精通
下一篇 oracle 存储过程 https://blog.csdn.net/lilongwangyamin/article/details/104405655