1. 概念

在数据库中, 游标是一个十分重要的概念。游标是一种能从包括多条数据记录的结果集中,每次提取一条记录的机制。

用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,往往是一个含有多个记录的集合。游标机制允许用户在此结果集内逐行访问每条记录,并按照用户自己的意愿来显示和处理这些记录。

2. 标准写法(以oracle为例)

declare

ursor mycur is select *from books;----定义游标

myrecord books%rowtype; ----%rowtype表示行数据类型,myrecord存储books中的一行数据

begin

open mycur;

fetch mycur into myrecord; ----存入一行数据至myrecord

while mycur%found loop ----%found布尔型,如果有行返回,则为true

dbms_output.put_line(myrecord.books_id||','||myrecord.books_name); ---输出信息

fetch mycur into myrecord; ----存入下一行

end loop;

close mycur;---关闭游标

end;

/

说明:

使用游标逐行访问查询books表获得的结果集,输出每条记录中的bookid与bookname。从该例子可以看出,游标包含两方面的内容:

游标结果集:执行其中的Select语句所得到的结果集。

游标位置:一个指向游标结果集内的某一条记录的指针。

利用游标可以单独操纵结果集中的每一行。游标在定义以后存在两种状态:关闭和打开。当游标关闭时,其查询结果集不存在;只有当游标打开时,才能按行读取或修改结果集中的数据。一般使用完后不写close mycur也不会出现编译错误。

3. 游标的优点

允许程序对由查询语句select返回的行集合中的每一行执行相同或不同的操作,而不是对整个行集合执行同一个操作;

它还提供对基于游标位置而对表中数据进行删除或更新的能力;

游标作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。

上面章节,我们对游标的内容有了些详细的了解。但在使用游标时,往往会出现些问题。下面就打开的游标太多时,出现的一些问题作介绍。

4. 常见报错

如:在Oracle数据库中,会报如下信息:

Caused by: ORA-01000: 超出打开游标的最大数

Oracle系统中,以参数open_cursors来限制打开的游标数,当打开游标超过这个数的时候就会报这个错,提示超出打开游标的最大数。游标个数理论上没有上限,也不是越大越好。

有这样一个测试显示:当这个open_cursor数值大了一定程度之后,会使得内存缩水,缩水的表现就是连接数减少。

如上结论可具体测试,其测试结果如下:

分别设置为以下值,测试数据库的连接,在同样的内存配置下,与用户可以连接的数(独占模式)有很大的区别。

open_cursors=6000000000 -------------连接数45

open_cursors=300 ---------------------连接数超过500.

由以上测试可知,当open_cursors扩大2000万倍之后连接数变为原来的十分之一,因此open_cursors的大小对连接数的影响不大,只要不要在千万级上增加,一般的几千几万跟几十,对连接数的影响甚微。

4.1 解决方案

按照游标的正规写法,打开游标使用完之后,就需关闭游标。

应避免游标打开过大,其可通过修改open_cursors大小,使其尽可能大。

4.2 检查open_cursors数值及修改方法

SQL>show parameter open_cursors; ---显示参数值

SQL>alter system set open_cursors = 1000; ---修改参数值为1000

SQL>commit;----提交

修改成功。

帆软报表FineReport数据连接中游标问题解决方案汇总的更多相关文章

  1. 帆软报表FineReport中数据连接之Jboss配置JNDI连接

    使用sqlsever 2000数据库数据源来做实例讲解,帆软报表FineReport数据连接中Jboss配置JNDI大概的过程和WEBSPHERE以及WEBLOGIC基本相同,用JDBC连接数据库制作 ...

  2. 帆软报表FineReport中数据连接之Weblogic配置JNDI连接

    1. 制作报表的原理 在帆软报表FineReport设计器中先用JDBC连接到数据库,建立数据库连接,然后用SQL或者其他方法创建数据集,使用数据集制作报表,然后把建立的数据库连接从JDBC连接改成J ...

  3. 帆软报表FineReport中数据连接之Websphere配置JNDI连接

    以oracle9i数据源制作的模板jndi.cpt为例来说明如何在FineReport中的Websphere配置JNDI连接.由于常用服务器的JNDI驱动过大,帆软报表FineReport中没有自带, ...

  4. 帆软报表FineReport中数据连接之Tomcat配置JNDI连接

    1. 问题描述 在帆软报表FineReport中,通过JNDI方式定义数据连接,首先在Tomcat服务器配置好JNDI,然后在设计器中直接调用JNDI的名字,即可成功使用JNDI连接,连接步骤如下: ...

  5. 帆软报表FineReport中数据连接的JDBC连接池属性问题

    连接池原理 在帆软报表FineReport中,连接池主要由三部分组成:连接池的建立.连接池中连接使用的治理.连接池的关闭.下面就着重讨论这三部分及连接池的配置问题. 1. 连接池原理 连接池技术的核心 ...

  6. 帆软报表FineReport SQLServer数据库连接失败常见解决方案

    1. 问题描述 帆软报表FineReport客户端连接SQLServer(2000.2005等),常常会出现如下错误:com.microsoft.sqlserver.jdbc.SQLServerExc ...

  7. 帆软报表FineReport数据库连接编码转换

    1. 问题描述 数据库会以某种编码方式保存与读取数据,FineReport解析时默认使用GBK字符集,若数据库端编码与设计器端编码不一致时,就会导致中文及特殊字符的乱码. FineReport在定义数 ...

  8. 帆软报表(FineReport)实现跨数据源父子查询(2阶段查询)

    问题描述: 在报表中需要查询多个系统多个数据源,且有一个数据源的入参是另一个数据源的返回值.所以当用户点击查询到展现报表数据这个过程中,需要先做父查询,查询出的结果在作为子查询. 实现方案: 方案一: ...

  9. 帆软发布大数据直连引擎FineDirect,对焦大数据BI

    摘要:近日,帆软官方正式发布大数据直连引擎FineDirect模块.通过该模块,企业在应用FineBI原有功能的基础上,可直接对接现有数据源,无论是传统的关系型数据库,还是Hadoop生态圈.Mpp构 ...

随机推荐

  1. c#获取光标在屏幕中位置

    需要调用win32api,winform.wpf通用 代码如下: [DllImport("user32.dll")] public static extern bool GetCu ...

  2. should be mapped with insert="false" update="false

    SSH项目出现了 should be mapped with insert="false" update="false 错误,仔细检查后发现,是两个不同的属性映射了表中的 ...

  3. Python_实现三级目录展示

    要求: 1.三级菜单 2.可依次选择进入各子菜单,选择序号进入目录 3.输入b返回上级目录,q退出更改目录 代码实现: #!/bin/env python #!--*--coding:utf-8 -- ...

  4. Lind.DDD.ILogicDeleteBehavor~逻辑删除的实现

    回到目录 关于逻辑删除 对于逻辑删除之前的做法是在实体类中加个字段,一般是status,其中一种状态是删除,当然也有其它做法,如加个bool的字段IsDeleted,这些其实都过于武断,即它在基类里加 ...

  5. 【工业串口和网络软件通讯平台(SuperIO)教程】五.二次开发图形显示界面

    SuperIO相关资料下载:http://pan.baidu.com/s/1pJ7lZWf 1.1    图形显示接口的作用 用于显示采集终端设备的数据,可以把不同类型设备的数据以多种形式集成显示在不 ...

  6. 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore

    本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...

  7. input输入框限制仅能输入数字且规定数字长度(使用与输入手机号)

    现在越来越多的账户名使用手机号来登录,为了减少前后端的交互,需要用户在输入时就要进行格式的判断, 目前的常规办法是,在输入完成后进行判断. 下面的方法是在输入时就规定只能输入数字,其他格式的字符是无法 ...

  8. 使用原生JS封装一个ajax

    function ajax(data){ //第一步,创建XHR对象 var xhr = null; if(window.XMLHttpRequest){ xhr = new XMLHttpReque ...

  9. iOS 开发技术牛人博客

    dark_gmn 的博客   http://blog.csdn.net/dark_gmn?viewmode=contents Tel_小超 的博客  http://blog.csdn.net/qq_2 ...

  10. SharePoint 2013 母版页取消和HTML页关联

    前言:在新版本的SharePoint 2013上,有新的功能可以通过HTML导入母版页,然后HTML和Master页面相关联,更改HTML页的时候,Master会自动同步修改,然而,有些时候我们不需要 ...