博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle游标
阅读量:5337 次
发布时间:2019-06-15

本文共 2338 字,大约阅读时间需要 7 分钟。

游标

  游标是sql的一个内存工作区,由系统或用户以变量的形式定义,用于临时存储从数据库中提取的数据块。

  游标分为显式游标和隐式游标,可自定义显式游标用来存储多行多列的数据。

  显式游标一旦打开,就相当于执行了select语句,执行的结果集就存储在游标中。

隐式游标

  在进行DML操作和单行SELECT语句(select...into...)数据库会自动使用隐式游标,可通过调用隐式游标变量直接取值,隐式游标只存储单个数据。

  四个隐式游标:

    sql%rowcount:整型,用于记录DML语句成功修改记录的条数。

    sql%found:布尔型,true表示crud的操作成功。

    sql%notfount:布尔型,与sql%found属性的值相反。

    sql%isopen:布尔型,DML执行过程中为true,执行结束后为false。

显式游标

  使用步骤:

    1.声明游标

      在declear声明,

      语法:

        corsor 游标名[参数1 数据类型[,参数2 数据类型...]] is select语句;

    2.打开游标

      游标在使用前必须打开;

      open 游标名[(参数1[,参数2.....])];--相当于执行is后面的select语句,并把查询结果存入游标中。

    3.提取数据

      fetch 游标名 into 变量1[,变量2....];--取一条(row)数据到变量中,变量的个数和类型要和select语句中字段变量的个数和类型一致。

      游标打开后有一个指针指向数据区,fetch语句每一次返回一行的数据,每次执行完指针指向下一行。可通过循环实现返回多行数据,控制循环可通过游标的属性%found和%notfount控制。

    4.关闭游标

      close 游标名;

      游标关闭后占用的资源就被释放,游标变为无效。

    显式游标必须手动关闭,显式游标打开的数量有限制,默认为300,超过限制会报错:ORA-01000: maximum open cursors exceeded

 

  使用游标的属性,在游标名后面带上属性以取得属性的值。如:游标名%FOUND;

    %FOUND:指针当前指向数据区有数据时为true,无数据为false;

    %NOTFOUND:与%found相反,无数据为true;

    %ISOPEN:当前游标已打开为true,未打开为false;

    %ROWCOUNT:已从游标中取出的数据的行数;

 

游标变量(动态游标)ref cursor:

  游标变量和普通游标基本相同,不同之处在于游标变量更加灵活,在声明时不需要绑定查询,并且游标变量没有参数。

  游标变量分为强类型和弱类型

    强类型:列的数量和列的数据类型在定义游标变量时即定义好。

    弱类型:定义游标变量时不定义列的数据的类型,在游标被打开时再确定每列的数据类型和列的数量,游标的列数量和列的数据类型一旦被确定不能再更改。

  用法:

    1.声明动态游标类型

      弱类型,不指定return type:type cur_type is ref cursor;   

      强类型,指定return type:type cur_type is ref cursor return 表名%rowtype;

    2.声明自定义的动态游标类型的变量:游标名 cur_type;  

    3.打开动态游标:open 游标名 for select语句;

    4.获取游标中的数据:fatch 游标名 into 变量1[,变量2....];

    5.关闭游标:close 游标名;

 

使用动态游标的实例:

set serveroutput ondeclare  type re_type is record(  name varchar2(200)  );  type ref_cursor is ref cursor return re_type;  c1 ref_cursor;  message varchar2(200);begin  open c1 for select name from t_test;  loop    fetch c1 into message;    exit when c1%notfound;    dbms_output.put_line('第'||c1%rowcount||'个:'||message);  end loop;  close c1;end;

 

数据库中关于游标的设置

  1.查看Oracle游标最大打开数

    show parameter cursor; --查看所有和curcor有关的参数,自带like关键字

  2.查看当前打开的游标

    select * from v$open_cursor;

  3.修改游标的最大打开数

    alter system set open_cursors = 500 scope=both;--修改游标的最大打开数为500,

    其中scope的取值为:

      memory:仅修改内存,只会影响当前的使用,重启数据库就会失效。

      spfile:仅修改配置文件,不会影响本次使用,重启数据库才生效。

      both:两个都修改。

 

转载于:https://www.cnblogs.com/waynelo/p/9291719.html

你可能感兴趣的文章
java数据结构之线性表
查看>>
Yii2 CSRF
查看>>
高德地图接口测试地址
查看>>
shell 获取不同目录下指定文件,并把文件复制到一个文件夹下面
查看>>
hdu-3790最短路刷题
查看>>
微信小程序开发技巧总结 (一)-- 数据传递和存储
查看>>
Java基础编程题——分别统计出其中汉字、英文字母、空格、数字和其它字符的个数...
查看>>
物理机以及不同的虚拟机的转换方法
查看>>
express get和post方法
查看>>
关于日历实现代码里lunarInfo(农历)数组
查看>>
【转】winrar命令行详解
查看>>
#!/usr/bin/python3 和 #!/usr/bin/env python3的区别
查看>>
AWK中的OFS的问题
查看>>
带你彻彻底底弄懂Scroller
查看>>
前端开发 Web SQL Database
查看>>
待解谜题(持续更新)
查看>>
python操作数据库产生中文乱码问题【已解决】
查看>>
母版页中引用图片,外部js、css文件的路径问题 [转]
查看>>
微信小程序_(组件)组件基础
查看>>
原生Js_制作简易日历
查看>>