游标
游标是由结果集(可以是零条、一条或由相关的select语句查出的多条记录)和结果集中指向特定记录的游标位置组成的,游标充当了指针的作用
Oracle数据库中常用的是静态游标,静态游标分两类
1、显示游标:此类型的游标有明确的游标声明和定义。他需要自己写代码完成,一切由用户控制
2、隐式游标:它又PL/SQL自动管理。也成为SQL游标,用户无法控制
① 显示游标
游标的声明和定义
CURSOR cuesor_name
[(parameter_name datatype...)]
IS select_statement;
cursor_name 游标名称
[(parameter_name datatype...)] 可选。 参数名 参数类型,可以为多个
select_statement select语句
eg: 无参的游标定义
DECLARE
CURSOR mycursor
IS select * from READERINFO;
游标使用的四部曲
1、声明游标
2.、打开游标 open cursor_name
3、读取数据 fetch cursor_name into record_name
4、关闭游标 close cursor_name
用一个例子来说明一切,游标一般和loop循环一起使用,不然它只能返回一条数据
eg:
declare
cursor test_cursor is
select t.*
from PROM_SUB_PRODUCT t
where rownum < 10
order by t.created_date desc;
cur_test_cursor PROM_SUB_PRODUCT%rowtype;
begin
open test_cursor;
loop
fetch test_cursor
into cur_test_cursor;
exit when test_cursor %notfound;
dbms_output.put_line(cur_test_cursor.product_id || '--' ||
cur_test_cursor.must_buy);
end loop;
close test_cursor;
end;
注:%rowtype前面已经说到过,是表示用表的字段类型匹配变量类型,但是只能和select * 用,如果select 某几个特定字段 就不能这样使用,应该使用%type
eg:
declare
cursor test_cursor is
select t.prom_product_id,t.price_type
from PROM_SUB_PRODUCT t
where rownum < 10
order by t.created_date desc;
prom_product_id PROM_SUB_PRODUCT.Prom_Product_Id%type;
price_type PROM_SUB_PRODUCT.Price_Type%type;
begin
open test_cursor;
loop
fetch test_cursor
into prom_product_id,price_type;
exit when test_cursor %notfound;
dbms_output.put_line(prom_product_id || '--' ||
price_type);
end loop;
close test_cursor;
end;
注:此段是定义游标是select某两个特定字段,而不是* ,所以下面不能用%rowtype,应该用%type,这个例子已经写得很清楚了
② 隐式游标
四大特点
1、隐式游标默认名称为"SQL"
2、查询或DML语句操作PLSQL将自动生成隐式游标
3、由PLSQL管理,不由用户控制
4、隐式游标属性值始终指向最新之行的sql语句
隐式游标的属性。
1. %ISOPEN 该属性有oracle控制。永远返回false
2.%ROWCOUNT 反映DML操作对数据影响数量
3.%FOUND 反映DML操作是否影响数据
4.%NOTFOUNT 与%FOUNT相反