Oracle-游标

Oracle会创建一个存储区域,被称为上下文区域,用于处理SQL语句,其中包含需要处理的语句,例如所有的信息,行数处理,等等。

游标:是指向这一上下文的区域。 PL/SQL通过控制光标在上下文区域。游标持有的行(一个或多个)由SQL语句返回。行集合光标保持的被称为活动集合。

游标(CURSOR):用来处理使用select语句从数据库中检索到的多行记录的工具。

分类:显式游标、隐式游标。

隐式游标:在oracle的sql语句中,如果没有显式游标的语句时,oracle会自动创建隐式游标。隐式游标是无法控制的。

每当发出一个DML语句(INSERT,UPDATE和DELETE),隐式游标与此语句关联。对于INSERT操作时,光标保持一个需要插入的数据。对于UPDATE和DELETE操作,光标标识会受到影响的行。

%FOUND:用于检验游标是否成功,通常在FETCH语句前使用,当游标按照条件查询出一条记录时,返回true

%NOTFOUND:与%found的作用相反,当按照条件无法查询到记录时,返回true

%ISOPEN:隐式游标总是返回FALSE,因为Oracle执行其相关的SQL语句之后自动关闭SQL游标。

%ROWCOUNT:返回受INSERT,UPDATE影响的行数,或DELETE语句,或者通过一个SELECT INTO语句返回。循环执行游标读取数据时,返回检索出的记录数据的行数。

游标的声明:CURSOR cursor_name [ ( parameter [ , parameter]……)][ RETURN return_type ] IS selectsql

  • CURSOR:用于声明一个游标
  • parameter:可选参数,用于指定参数类型、模式等
  • return:可选,指定游标的返回类型
  • selectsql:需要处理的select语句,不能含INTO子句

打开游标:open cursor_name

提取游标:FETCH cursor_name INTO variable_list
注意:使用FETCH语句实现对游标内容的读取;variable_list必须与从游标提取的结果集类型相同

关闭游标:close cursor_name 关闭后资源被释放,且不能再次被打开。

DECLARE
     fname varchar2(20);
     lname varchar2(20);
     --声明一个游标 并将查询结果保存在游标中
     CURSOR c_student is select firstname, lastname from students where id=1001 ;
BEGIN
     --打开游标
    OPEN c_student;
    - - 判断游标是否返回记录  如果为true 说明游标中没记录
    if c_student%NOTFOUND THEN
           dbms_output.put_line('没有找到相应的记录');
    else
    - -从游标中读取记录
          fetch c_student into fname,lname;
          dbms_output.put_line(fname||''||lname);
    end if;
   CLOSE c_student;  --关闭游标
END;
--使用for循环时,自动打开游标,而无需使用OPEN语句;PL/SQL会自动对变量进行隐式声明;当循环结束后,游标会总动关闭。

DECLARE
     fname varchar2(20);
     lname varchar2(20);
     CURSOR t_student is select firstname, LASTNAME  from students where id<=1005 ;
BEGIN
    FOR t_students IN t_student LOOP
         fname:=t_students.firstname;
         lname:=t_students.lastname;
         dbms_output.put_line('学员姓名:'||fname||''||lname);
    END LOOP;
END;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EngineerForSoul

你的鼓励是我孜孜不倦的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值