Sybase_游标

本章将介绍如何在Sybase下使用游标

因业务需要,要批量处理一些数据,sql需要用到循环,所以要使用游标,我写了一个简单的游标,sql如下

DECLARE  my_Cursor CURSOR
FOR SELECT c_name,n_age FROM T_USER  --声明游标
OPEN my_Cursor--打开游标
DECLARE @name VARCHAR(32),
        @age INT  --声明两个变量,用来接收游标的值
FETCH  my_Cursor INTO @name,@age  --把游标中的值赋给变量
WHILE @@SQLSTATUS = 0
BEGIN
        INSERT INTO T_NEW (name,age) VALUES (@name,@age) --把数据保存到另一个表
        FETCH  my_Cursor INTO @name,@age --把游标中下一行的值赋给变量
END
CLOSE my_Cursor --关闭游标
DEALLOCATE CURSOR my_Cursor --释放游标

但在Sybase下执行时,一直报错,报错内容如下:

Error (7344) DECLARE CURSOR must be the only statement in a query batch.

经过不断排查,最后发现问题所在:

在声明游标后,没有任何结束标志,Sybase下默认定义的语句没有执行完毕,之后open游标,就会因找不到游标导致报错。
解决方法:
在声明游标后,添加GO标识,GO代表一段语句的终结。

修改后的sql如下:

DECLARE  my_Cursor CURSOR
FOR SELECT c_name,n_age FROM T_USER  --声明游标
GO --代表一段语句的终结。若没有GO,则定义的语句没有执行完毕,后面执行将会报错
OPEN my_Cursor--打开游标
DECLARE @name VARCHAR(32),
        @age INT  --声明两个变量,用来接收游标的值
FETCH  my_Cursor INTO @name,@age  --把游标中的值赋给变量
WHILE @@SQLSTATUS = 0
BEGIN
        INSERT INTO T_NEW (name,age) VALUES (@name,@age) --把数据保存到另一个表
        FETCH  my_Cursor INTO @name,@age --把游标中下一行的值赋给变量
END
CLOSE my_Cursor --关闭游标
DEALLOCATE CURSOR my_Cursor --释放游标

再次执行,妥妥的,没毛病……

时间: 2024-12-18 14:32:45

Sybase_游标的相关文章

SQL Server 游标使用

1.声明游标            DECLARE 游标名 CURSOR SELECT语句(注:此处一定是SELECT语句)        2.打开游标           OPEN 游标名        3.读取游标数据           Fetch [Next | Prior | First | Last | Absolute n | Relative n ]  From 游标名 INTO @name1,@name2...            WHILE(@@FETCH_STATUS =

oracle(sql)基础篇系列(五)——PLSQL、游标、存储过程、触发器

  PL/SQL PL/SQL 简介 每一种数据库都有这样的一种语言,PL/SQL 是在Oracle里面的一种编程语言,在Oracle内部使用的编程语言.我们知道SQL语言是没有分支和循环的,而PL语言是为了补充SQL语言的,是带有了分支和循环的语言. PL/SQL 语法 基本数据类型声明 declare v_name varchar2(20); v_temp number(1); v_count binary_integer := 0; v_sal number(7,2) := 4000.00

[转载]oracle游标概念讲解

原文URL:http://www.2cto.com/database/201203/122387.html ORACLE游标概念讲解 什么是游标?  ①从表中检索出结果集,从中每次指向一条记录进行交互的机制.      ②关系数据库中的操作是在完整的行集合上执行的.   由SELECT 语句返回的行集合包括满足该语句的WHERE 子句所列条件的所有行.由该语句返回完整的行集合叫做结果集.      应用程序,尤其是互动和在线应用程序,把完整的结果集作为一个单元处理并不总是有效的.      这些

ActiveMQ消息游标 --转载

转:http://blog.csdn.net/m13321169565/article/details/8081358 在Activemq以前的版本中,broker会把待发送的消息保存在内存中.这种方式的缺陷是当消费者消费的速度赶不上生产者的速度时,会在broker的内存中积攒大量的消息,当达到一个限额后,broker就不再接收消息.这时生产者就被阻塞了,直到broker将内存清理能保存消息后才能继续发送.     在5.0版本后,Activemq实现了一种新的内存模型来防止慢消费者阻塞快速生产

plsql游标的介绍

3. 游标的介绍    游标:一个指向保存多行SQL查询结果集的工作区的句柄(指针) 3.1 显式游标 (1)显式游标的使用 案例1:定义变量的方式使用游标 declare  cursor csr_org is select h.hrc_descr,o.org_short_name                      from org_tab o,hrc_tab h                     where o.hrc_code=h.hrc_code               

PL/SQL 编程(二)游标、存储过程、函数

游标--数据的缓存区 游标:类似集合,可以让用户像操作数组一样操作查询出来的数据集,实质上,它提供了一种从集合性质的结果中提取单条记录的手段. 可以将游标形象的看成一个变动的光标,他实质上是一个指针,在一段Oracle存放数据查询结果集或者数据操作结果集的内存中,这个指针可以指向结果集任何一条记录. 游标分静态游标和REF游标两类,静态游标包含显式游标和隐式游标. 显式游标: 在使用之前必须有明确的游标声明和定义,这样的游标定义会关联数据查询语句,通常会返回一行或多行.打开游标后,用户可以利用游

python使用游标访问数据

游标是一种数据访问对象,可用于在表中迭代一组行或者向表中插入新行.游标有三种形式:搜索.插入或更新.游标通常用于读取现有几何和写入新几何. 每种类型的游标均由对应的 ArcPy 函数(SearchCursor.InsertCursor 或 UpdateCursor)在表.表格视图.要素类或要素图层上创建.搜索游标可用于检索行.更新游标可用于根据位置更新和删除行,而插入游标可用于向表或要素类中插入行. 游标 说明 InsertCursor(dataset, {spatial_reference})

【MySQL】存储过程、游标、循环简单实例

有时候仅凭 sql 语句可能达不到想要的数据操作目的,有可能需要写一些方法体,通过循环判断等操作最终达到目的.那么在数据库里实现这种方法体就需要存储过程了,个人觉得一个带注释的简单实例可以简单粗暴地解决大部分问题,当然要深入学习了解的话还是要看教程文档了,话不多说,上码: [sql] view plain copy create procedure my_procedure() -- 创建存储过程 begin -- 开始存储过程 declare my_id varchar(32); -- 自定义

mongo数据删除和游标

数据删除 db.集合.remove(删除条件,是否只删除一个数据);默认删多条(false)true删除一条db.集合.remove({}) 删除所有元素但集合还在db.集合.drop() 删除集合 游标指数据可以一行行的进行操作,类似ResultSet数据处理在mongo里是需要使用find()就可以返回游标了对于操作返回的游标,可使用函数操作1.判断是否有下一行数据:hasNext()2.取当前数据: next() var cur=db.web.find();cur.hasNext();cu