oracle cursor(静态)记录

游标定义:
游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。可以把游标当作一个指针,利用游标可以返回它当前指向的行记录(只能返回一行)若要返回多行,则需要不断的滚动,把想要的数据全部查询一遍。游标可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理。
游标的优点:
1)允许程序对由查询语句select返回的行集合中的每一行执行相同或不同的操作
,而不是对整个行集合执行同一个操作。
2)提供对基于游标位置的表中的行进行删除和更新的能力。
游标的缺点:
在创建游标时,最需要考虑的事情是,“是否有办法避免使用游标?”因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。
静态游标分为:
显式游标和隐式游标
显示游标部分:-->
1.游标的语法:
CURSOR cursor_name (parameter_name datatype) IS select...
2.显示游标的使用步骤:
1.声明游标 2.打开游标 3.读取游标 4.关闭游标
3.显示游标的四个属性:
1.Cursorname%found
2.Cursorname%notfound
3.Cursorname%isopen
4.Cursorname%rowcount
4.显示游标示例:
示例1:
declare
cursor c is select * from dj_djb where slbh like ‘201708%‘;
v_djb dj_djb%rowtype;
begin
open c;
loop
--exit when c%notfound;
if c%isopen then
dbms_output.put_line(‘游标已经打开!‘);
fetch c into v_djb;
exit when c%notfound;
dbms_output.put_line(v_djb.slbh);

dbms_output.enable(buffer_size=>null);
dbms_output.put_line(c%rowcount);
else
  dbms_output.put_line(‘游标未打开!‘);
  end if;
  end loop;

end;
示例2
使用: cursor for loop ......
declare
cursor c is select * from dj_djb where slbh like ‘201708%‘;
v_djb dj_djb%rowtype;
begin
for i in c loop
dbms_output.put_line(i.slbh);
dbms_output.put_line(c%rowcount);
end loop;
end;

使用 bulk collect into ....进行批量提取数据

declare
cursor c is select * from dj_djb where slbh like ‘201708%‘;
type v_djb_tmp is table of dj_djb%rowtype index by binary_integer;
v_djb v_djb_tmp;
begin
open c;
loop
fetch c bulk collect into v_djb limit 10;
for i in 1..v_djb.count loop
dbms_output.enable(buffer_size=>null);
dbms_output.put_line(v_djb(i).slbh||‘ 对应的行数:‘||i);
end loop;
dbms_output.put_line(c%rowcount);
exit when c%notfound;
end loop;
close c;
end;
隐式游标部分-->
隐式游标则由则由系统自动定义,非显示定义游标的DML语句即被赋予隐式游标属性。其过程由oracle控制,完全自动化。隐式游标的名称是SQL,不能对SQL游标显式地执行OPEN,FETCH,CLOSE语句。
隐式游标的属性:
类似于显示游标,隐式游标同样具有四种属性,只不过隐式游标以SQL%开头,而显示游标以Cursor_name%开头。通过SQL%总是只能访问前一个DML操作或单行SELECT操作的游标属性,用于判断DML执行的状态和结果,进而控制程序的流程。
SQL%ISOPEN :
游标是否打开。当执行select into ,insert update,delete时,Oracle会隐含地打开游标,且在该语句执行完毕或隐含地关闭游标,因为是隐式游标,故SQL%ISOPEN总是false
SQL%FOUND :
判断SQL语句是否成功执行。当有作用行时则成功执行为true,否则为false。SQL%NOTFOUND :
判断SQL语句是否成功执行。当有作用行时否其值为false,否则其值为true。
SQL%ROWCOUNT:
在执行任何DML语句之前,SQL%ROWCOUNT的值都是NULL。

                                                                                              by wolihaito  2018.03.26

原文地址:http://blog.51cto.com/wolihaito/2091221

时间: 2024-10-10 11:53:27

oracle cursor(静态)记录的相关文章

初探oracle删除重复记录,只保留rowid最小的记录

如题,初探oracle删除重复记录,只保留rowid最小的记录(rowid可以反映数据插入到数据库中的顺序) 一.删除重复记录可以使用多种方法,如下只是介绍了两种方法(exist和in两种). 1.首先创建一个测试表. create table my_users( id number, username varchar2(20), sal number ) 2.插入测试数据 begin for i in 1..10 loop insert into my_users values(i,'carl

查询ORACLE数据库操作记录

代码: SELECT a.First_Load_Time,        a.Sql_Text,        s.Sid,        s.Serial#,        s.Program --,        ,        a.* --       Utl_Inaddr.Get_Host_Address(s.Terminal) Ip   FROM V$sqlarea a, V$session s  WHERE s.Sql_Address(+) = a.Address    AND U

Oracle随机获取记录

1 SELECT A.* FROM TableA A CROSS JOIN (SELECT TRUNC(DBMS_RANDOM.VALUE(0, 999999999999999999999)) RANDOMNUM FROM DUAL) B ORDER BY B.RANDOMNUM Oracle随机获取记录,布布扣,bubuko.com

Oracle解析 xml 记录一下(未完待续)

Oracle解析 xml 记录一下. SQL> desc xmlparser; PROCEDURE FREEPARSER Argument Name                  Type                    In/Out Default? ------------------------------ ----------------------- ------ -------- P                              RECORD          

Oracle多行记录合并的几种方法

今天正好遇到需要做这个功能,顺手搜了一下网络,把几种方法都列出来,方便以后参考. 1 什么是合并多行字符串(连接字符串)呢,例如: SQL> desc test; Name Type Nullable Default Comments ------- ------------ -------- ------- -------- COUNTRY VARCHAR2(20) Y CITY VARCHAR2(20) Y SQL> select * from test; COUNTRY CITY ---

Oracle系列:记录Record

Oracle系列:记录Record 分类: [Oracle] (15) 版权声明:本文为博主原创文章,未经博主允许不得转载. Oracle系列:记录(Record) 一,什么是记录(Record)? 由单行多列的标量构成的复合结构.可以看做是一种用户自定义数据类型.组成类似于多维数组.将一个或多个标量封装成一个对象进行操作.是一种临时复合对象类型.  记录可以直接赋值.RECORD1 :=RECORD2: 记录不可以整体比较. 记录不可以整体判断为空. 二,%ROWTYPE和记录(Record)

oracle 查询当天记录 三种方法效率比较

-- 查询一表中当天生成的数据 -- 原表mobilefrends中的cdate字段上有索引,创建索引语句是:create index mobilefrends_cdate_idx on mobilefrends(cdate); --------------------------------------------------------------------------------------------------------------------- -- 方法一:用to_char()

转 oracle cursor 游标

转自:http://blog.csdn.net/liyong199012/article/details/8948952 游标的概念:     游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库.这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率. 游标有两种类型:显式游标和隐式游标.在前述程序中用到的SELECT...I

Oracle Cursor的使用

When Oracle Database executes a SQL statement, it stores the result set and processing information in an unnamedprivate SQL area. A pointer to this unnamed area, called acursor, lets youretrieve the rows of the result set one at a time.Cursor attribu