- 浏览: 1578000 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (289)
- java 语法基础 (51)
- spring (8)
- mvc struct /Ant --build.xml (8)
- SOA (0)
- oracle 9i/10g (23)
- sql server 2000-2005 (3)
- 数据库基础知识 (6)
- 设计模式与软件架构 (10)
- Hibernate 持久化 (9)
- J2SE/J2EE/J2ME/AJAX 技术 (8)
- JSF 技术 (3)
- JAVA 图形化 (0)
- JMS (40)
- Eclipse 3.2 IDE 开发技巧 (13)
- 项目处理方法集合 (2)
- html/jsp/javascript (2)
- Unix/Linux (9)
- j2me/ARM/windriver/嵌入式 (4)
- 电信科学 (8)
- jsp (1)
- c/c++ (1)
- LZW压缩算法(java) (2)
- Android (77)
- 版本管理git/svn (2)
最新评论
-
huihai:
有demo吗?
NamingStrategy实现动态表名映射 -
cangbaotu:
推荐给大家一些有用的爬虫源码:https://github.c ...
网络爬虫(源代码参考) -
tuspark:
除了.classpath文件以外,.project文件也应该了 ...
Eclipse .classpath文件浅谈 -
tuspark:
造成eclipse自动关闭的原因有很多,这里有很多介绍:ecl ...
eclipse 自动关闭 解决方案 -
DEMONU:
网上都是这些,这种文章。。。
ActiveMQ中的消息持久性
与windows或DOS的“光标”不同,MS-SQL的游标是一种临时的数据库对象,既对可用来旋转储存在系统永久表中的数据行的副本,也可以指向储存在系统永久表中的数据行的指针。
游标为您提供了在逐行的基础上而不是一次处理整个结果集为基础的操作表中数据的方法。
1.如何使用游标
1)定义游标语句 Declare <游标名> Cursor For
2)创建游标语句 Open <游标名>
3)提取游标列值、移动记录指针 Fetch <列名列表> From <游标名> [Into <变量列表>]
4)使用@@Fetch_Status利用While循环处理游标中的行
5)删除游标并释放语句 Close <游标名>/Deallocate <游标名>
6)游标应用实例
--定义游标
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department into @DeptID,@DeptName
--创建游标
Open cur_Depart
--移动或提取列值
Fetch From cur_Depart into @DeptID,@DeptName
--利用循环处理游标中的列值
While @@Fetch_Status=0
Begin
Print @DeptID,@DeptName
Fetch From cur_Depart into @DeptID,@DeptName
End
--关闭/释放游标
Close cur_Depart
Deallocate cur_Depart
2.语句的详细及注意
1)定义游标语句
Declare <游标名> [Insensitive] [Scroll] Cursor
For <Select 语句> [FOR {Read Only | Update [ OF <列名列表>]}]
Insensitive DBMS创建查询结果集数据的临时副本(而不是使用直接引用数据库表中的真实数据行中的列)。游标是Read Only,也就是说不能修改其内容或底层表的内容;
Scroll 指定游标支持通过使用任意Fetch 选项(First Last Prior Next Relative Absolute)选取它的任意行作为当前行。如果此项省略,则游标将只支持向下移动单行(即只支持游标的Fetch Next);
Select语句 定义游标结果集的标准 SELECT 语句。在游标声明的 <Select语句>内不允许使用关键字 COMPUTE、COMPUTE BY、FOR BROWSE 和 INTO;
Read Only 防止使用游标的用户通过更新数据或删除行改变游标的内容;
Update 创建可更新游标且列出值能被更新的游标列。如果子句中列入了任意列,则只有被列入的列才能被更新。如果Declare Cursor语句中只指定的UPDATE(没有列名列表),则游标将允许更新它的任何或所有列。
Declare cur_Depart Cursor
For Select * From Department For Update OF cDeptID,cDeptName
2)提取游标列值、移动记录指针语句
Fetch [Next | Prior | First | Last | {Absolute <行号>} | {Relative <行号>}]
From <游标名> [Into <变量列表……>]
每次执行Fetch语句时,DBMS移到游标中的下一行并把游标中的列值获取到Into中列出的变量中。因此Fetch语句的Into子句中列出的变量必须与游标定义中Select 语句中的列表的类型与个数相对应;
仅当定义游标时使用Scroll参数时,才能使用Fetch语句的行定位参数(First Last Prior Next Relative Absolute);如果Fetch语句中不包括参数Next | Prior | First | Last,DBMS将执行默认的Fetch Next;
Next 向下、向后移动一行(记录);
Prior 向上、向前移动一行(记录);
First 移动至结果集的第一行(记录);
Last 移动至结果集的最后一行(记录);
Absolute n 移动到结果集中的第n行。如果n是正值,DBMS从结果集的首部向后或向下移动至第n行;如果n是负数,则DBMS从结果集的底部向前或向上移动n行;
Fetch Absolute 2 From cur_Depart Into @DeptID,@DeptName
Relative n 从指针的当前位置移动n行。如果n是正值,DBMS将行指针向后或向下移动至第n行;如果n是负数,则DBMS将行指针向前或向上移动n行;
Fetch Relative 2 From cur_Depart Into @DeptID,@DeptName
3)基于游标的定位DELETE/UPDATE语句
如果游标是可更新的(也就是说,在定义游标语句中不包括Read Only 参数),就可以用游标从游标数据的源表中DELETE/UPDATE行,即DELETE/UPDATE基于游标指针的当前位置的操作;
举例:
--删除当前行的记录
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department into @DeptID,@DeptName
Open cur_Depart
Fetch From cur_Depart into @DeptID,@DeptName
Delete From Department Where CURRENT OF cur_Depart
--更新当前行的内容
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department into @DeptID,@DeptName
Open cur_Depart
Fetch From cur_Depart into @DeptID,@DeptName
Update Department Set cDeptID=’2007’ + @DeptID Where CURRENT OF cur_Depart
3.游标使用技巧及注意
1)利用Order By改变游标中行的顺序。此处应该注意的是,只有在查询的中Select 子句中出现的列才能作为Order by子句列,这一点与普通的Select语句不同;
2)当语句中使用了Order By子句后,将不能用游标来执行定位DELETE/UPDATE语句;如何解决这个问题,首先在原表上创建索引,在创建游标时指定使用此索引来实现;例如:
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department With INDEX(idx_ID)
For Update Of cDeptID,cDeptName
通过在From子句中增加With Index来实现利用索引对表的排序;
游标为您提供了在逐行的基础上而不是一次处理整个结果集为基础的操作表中数据的方法。
1.如何使用游标
1)定义游标语句 Declare <游标名> Cursor For
2)创建游标语句 Open <游标名>
3)提取游标列值、移动记录指针 Fetch <列名列表> From <游标名> [Into <变量列表>]
4)使用@@Fetch_Status利用While循环处理游标中的行
5)删除游标并释放语句 Close <游标名>/Deallocate <游标名>
6)游标应用实例
--定义游标
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department into @DeptID,@DeptName
--创建游标
Open cur_Depart
--移动或提取列值
Fetch From cur_Depart into @DeptID,@DeptName
--利用循环处理游标中的列值
While @@Fetch_Status=0
Begin
Print @DeptID,@DeptName
Fetch From cur_Depart into @DeptID,@DeptName
End
--关闭/释放游标
Close cur_Depart
Deallocate cur_Depart
2.语句的详细及注意
1)定义游标语句
Declare <游标名> [Insensitive] [Scroll] Cursor
For <Select 语句> [FOR {Read Only | Update [ OF <列名列表>]}]
Insensitive DBMS创建查询结果集数据的临时副本(而不是使用直接引用数据库表中的真实数据行中的列)。游标是Read Only,也就是说不能修改其内容或底层表的内容;
Scroll 指定游标支持通过使用任意Fetch 选项(First Last Prior Next Relative Absolute)选取它的任意行作为当前行。如果此项省略,则游标将只支持向下移动单行(即只支持游标的Fetch Next);
Select语句 定义游标结果集的标准 SELECT 语句。在游标声明的 <Select语句>内不允许使用关键字 COMPUTE、COMPUTE BY、FOR BROWSE 和 INTO;
Read Only 防止使用游标的用户通过更新数据或删除行改变游标的内容;
Update 创建可更新游标且列出值能被更新的游标列。如果子句中列入了任意列,则只有被列入的列才能被更新。如果Declare Cursor语句中只指定的UPDATE(没有列名列表),则游标将允许更新它的任何或所有列。
Declare cur_Depart Cursor
For Select * From Department For Update OF cDeptID,cDeptName
2)提取游标列值、移动记录指针语句
Fetch [Next | Prior | First | Last | {Absolute <行号>} | {Relative <行号>}]
From <游标名> [Into <变量列表……>]
每次执行Fetch语句时,DBMS移到游标中的下一行并把游标中的列值获取到Into中列出的变量中。因此Fetch语句的Into子句中列出的变量必须与游标定义中Select 语句中的列表的类型与个数相对应;
仅当定义游标时使用Scroll参数时,才能使用Fetch语句的行定位参数(First Last Prior Next Relative Absolute);如果Fetch语句中不包括参数Next | Prior | First | Last,DBMS将执行默认的Fetch Next;
Next 向下、向后移动一行(记录);
Prior 向上、向前移动一行(记录);
First 移动至结果集的第一行(记录);
Last 移动至结果集的最后一行(记录);
Absolute n 移动到结果集中的第n行。如果n是正值,DBMS从结果集的首部向后或向下移动至第n行;如果n是负数,则DBMS从结果集的底部向前或向上移动n行;
Fetch Absolute 2 From cur_Depart Into @DeptID,@DeptName
Relative n 从指针的当前位置移动n行。如果n是正值,DBMS将行指针向后或向下移动至第n行;如果n是负数,则DBMS将行指针向前或向上移动n行;
Fetch Relative 2 From cur_Depart Into @DeptID,@DeptName
3)基于游标的定位DELETE/UPDATE语句
如果游标是可更新的(也就是说,在定义游标语句中不包括Read Only 参数),就可以用游标从游标数据的源表中DELETE/UPDATE行,即DELETE/UPDATE基于游标指针的当前位置的操作;
举例:
--删除当前行的记录
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department into @DeptID,@DeptName
Open cur_Depart
Fetch From cur_Depart into @DeptID,@DeptName
Delete From Department Where CURRENT OF cur_Depart
--更新当前行的内容
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department into @DeptID,@DeptName
Open cur_Depart
Fetch From cur_Depart into @DeptID,@DeptName
Update Department Set cDeptID=’2007’ + @DeptID Where CURRENT OF cur_Depart
3.游标使用技巧及注意
1)利用Order By改变游标中行的顺序。此处应该注意的是,只有在查询的中Select 子句中出现的列才能作为Order by子句列,这一点与普通的Select语句不同;
2)当语句中使用了Order By子句后,将不能用游标来执行定位DELETE/UPDATE语句;如何解决这个问题,首先在原表上创建索引,在创建游标时指定使用此索引来实现;例如:
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department With INDEX(idx_ID)
For Update Of cDeptID,cDeptName
通过在From子句中增加With Index来实现利用索引对表的排序;
发表评论
-
oacle数据库服务器字符集更改步骤
2009-11-20 11:25 188010 数据库服务器字符集更改步骤问题描述:在客户端插入字符“咪 ... -
ResultSet 的Type属性 TYPE_FORWARD_ONLY, TYPE_SCROLL_I
2009-04-10 23:06 13081说明:Statement stmt = con.createS ... -
OracleOraHome92TNSListener 无法启动
2009-03-30 19:44 2871先看如下有没有 如果路径不见了: 1 ... -
oracle导出文件字符集修改
2009-02-22 17:49 7027我们知道在导出文件中,记录着导出使用的字符集id,通过查看导出 ... -
oracle字符集的更改2
2009-02-21 21:47 1624前面我们提到,通过修改props$的方式更改字符集在Oracl ... -
oracle字符集的更改
2009-02-21 20:53 23282. 字符集的更改 数 ... -
oracle 字符集
2009-02-21 16:10 31801、字符集的一些基本知 ... -
Oracle安装的一些问题收集
2009-01-13 17:18 6855Oracle安装的一些问题收 ... -
请教 EXP-00056: 遇到 ORACLE 错误 6550 的问题
2009-01-13 16:43 10912这个问题解决了已经。与其他机器的9201版本进行比对,发现db ... -
Oracle 9i 在Linux 下的安装
2009-01-13 16:42 1844Oracle 9i 在Linux 下的安装 2008-09-0 ... -
Oracle ExpImp导入导出工具性能调优
2008-12-16 14:53 1833Oracle Exp/Imp工具是一个操作简单、方便灵活的备 ... -
Oracle新手常碰到的错误及解决方案
2008-11-27 18:12 12341、ORA-12541:TNS:没有监听器 原因:没有 ... -
存储过程基本语法
2008-11-27 15:46 11501.基本结构 CREATE OR REPLACE PROCE ... -
UTL_FILE
2008-11-27 14:22 3141最近用到了Oracle的包UTL_ ... -
ORACLE SQL PLUS 使用技巧:
2008-11-27 14:05 1943---- 一. ORACLE SQL PLUS 使 ... -
pl/sql中读入一个文本文件到一个UTL_FILE.FILE_TYPE变量中,如何对该变量中的数据
2008-11-27 13:51 2851create or replace procedu ... -
浅谈Oracle数据库的建模与设计
2008-10-17 23:49 1185要开发一个基于数据库的应用系统,其中最关键的一步就是整个系统 ... -
Oracle平台应用数据库系统的设计与开发
2008-10-17 23:47 1329Oracle是目前应用最广泛的数据库系统。一个完整的数据库系 ... -
oracle10g下JDBC驱动包的区别
2008-09-05 18:17 7398oracle10g下JDBC驱动包的区别 2008年06月27 ... -
Oracle触发器应用
2008-08-21 12:57 3071触发器 是特定事件出现的时候,自动执行的代码块。类似于存储过 ...
相关推荐
本文提供了在MS SQL SERVER 中应用游标所应具有的有关游标的必要知识和各种语法。从中读者可以了解游标的优点、种类、作用、学会如何定义、打开、存取、关闭、释放游标以及游标的应用。除此之外,在本章的后半部分...
自己讲课用的课件,关于在MSSQLSERVER中游标和锁的使用,分享一下
游标 ms sql 例子----- 大概模式 临时表使用等-——---
MS-SQL游标的使用及理解 windows或DOS的“光标”不同,MS-SQL的游标是一种临时的数据库对象,既对可用来旋转储存在系统永久表中的数据行的副本,也可以指向储存在系统永久表中的数据行的指针。
使用MS SQL Server这样久,游标一直没有使用过。以前都是使用WHILE循环加临时表来实现。刚刚联系个示例了解到游标概念与语法
一个存储过程的示例,简单展示了如下方面: ...4,对于嵌套游标STATUS的互相影响问题的解决办法《注意001和002的注释位置,fetch的位置》。 对于初学者,存储过程重要的几个方面,都有展示到,大虾们请忽略。
NULL 博文链接:https://modiliany.iteye.com/blog/786230
从不同的方面介绍了PostgreSQL_与_MS_SQLServer之间的差异,包括变量的定义和语法结构,存储过程、函数、游标等等
使用MS QUERY 来完成链接290 将VISUAL C++与SQL 结合使用292 将DELPHI 与SQL 结合使用296 总结302 问与答303 校练场303 练习303 第二周回顾304 第三周概貌305 应用你对SQL 的知识305 第15 天对SQL 语句优化以提高...
m_pDbProcPic = new CDBProcess("sqlserver"); m_pDbProc->openDB("mysvr", "mydb", "myusername", "mypwd"); m_pDbProcPic = new CDBProcess("mysql"); m_pDbProc->openDB("localhost", "mydb", "root", "password...
(3)使用“实验一”中的数据库“abc”,练习使用游标, 写出按如下报表形式显示结果的SQL语句,该报表查询每年每种产品总销售金额,(总销售金额=价格*销量),报表显示格式如下所示: 年 产品号 产品名 销售总量 ...
MS SQL Server查询优化方法 查询速度慢的原因很多,常见如下几种 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。...
、数据库基本对象的查看(库、表、主键、过程、函数、触发器、游标、视图等) 、数据库相关系统信息 、建表脚本 、表字段相关信息 、表内数据前100条 、存储过程脚本 、过程参数列表 、数据库基本操作(分离、...
SQL Server里函数的两种用法与些同时这两种用法可以代替游标。本文将为大家介绍MS SQL Server里函数的两种用法。
21天学习SQL V1.0.pdf 66 SQL 21 日自学通(V1.0) 翻译人笨猪 EMAIL wyhsillypig@163.com 2 日期/时间函数.........................................................................................................
(3)使用"实验一"中的数据库"abc",练习使用游标, 写出按如下报表形式显示结果的SQL语句,该报表查询每年每种产品总销售金额,( 总销售金额=价格*销量),报表显示格式如下所示: 年 产品号 产品名 销售总量 总...
昨天的那篇分页存储过程(二)在MS SQL Server中返回更加准确的分页结果 中使用了游标,有很多热心的朋友参与讨论,感谢大家的参与。
通过从 pyodbc 游标(表名、数据类型等)获取信息并生成要由 psycopg2 执行的 SQL 语句来工作。 基本用法: >> > converter = Converter ( access_con_string , pg_con_string , print_SQL ) >> > converter . ...
并且在临时表与目标表之间的合并过程中,摒弃了传统的游标逐条插入方式,取而代之的是SQL Server 2008中的Merge技术,极大地加快了数据库端不同表之间数据的同步过程。实验测试结果表明,整个系统导入100 万条数据...