`
pippo25
  • 浏览: 29631 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

存储过程中游标的使用

阅读更多

      游标分为动态游标与静态游标,在本文中只是讲述一下,我在使用动态游标的一点心得,至于游标定义使用具体操作在SQL server帮助中可以查询。

     在创建一个游标,目的是为了读取基表A中的test字段的值并把该值插入到一个临时表temp中,在循环读取游标中的值并把插入到临时表的时候,这时候对基表有插入操作,那么新插入的纪录能不能动态的加入到游标中呢?能不能马上看到这种变化呢?

   存储过程:

 

CREATE PROCEDURE TEST
 AS
CREATE TABLE #TEMP
(
    [TEST] [VARCHAR]
)

DECLARE T  CURSOR  FOR SELECT TEST FROM A ORDER BY TEST
DECLARE @NUM  BIGINT
DECLARE @VARINT VARCHAR(50)
--一定要赋初值,不然在循环中@NUM的值不会改变
SELECT @NUM = 0
OPEN T
FETCH NEXT FROM T INTO @VARINT
WHILE @@FETCH_STATUS = 0
BEGIN
    SELECT @NUM = @NUM+1
    INSERT INTO #TEMP VALUES  (@VARINT)
    --在变量等于5的时候插入基表纪录,验证该纪录会不会插入临时表#tenp,从而验证该内容是否动态加入游标
    IF(@NUM = 5)
    INSERT INTO A VALUES('3')
    FETCH NEXT FROM T INTO @VARINT
END
--释放游标
CLOSE T
DEALLOCATE T

SELECT * FROM #TEMP
GO

   下面分一下几种情况具体分析:

1.在上面的存储过程中给游标存入结果集的SQL查询语句中要求按照test字段升序排列,游标指向第五条纪录的时候,插入一条纪录数值为3,肯定也已经加入到了游标的结果集,只是由于结果集是按照test升序排列的,游标指向的当前位置不会改变,所以对于新插入的3 这条纪录是不会加入到临时表中的

2 .如果修改上面存储过程的语句如下:

 DECLARE T  CURSOR  FOR SELECT TEST FROM A

去掉ORDER BY TEST,那么在执行存储过程后会看到新插入的3这条纪录,因为在没有排序的情况下,游标结果集是按照基表顺序来的,在没有定义基表的聚集索引的情况下,插入一条记录到基表,是插入到最后面,这种情况下,新插入的的记录也显示在游标结果集的最后面,那么这种情况下,循环中就可以把信插入基表中的3 这条记录插入到临时表,也就可以显示出来了

3.上面提到聚集索引,在对基表创建聚集索引后,将会影响基表的实际无力存储顺序,所以在这种情况下,如果DECLARE T  CURSOR  FOR SELECT TEST FROM A语句或者DECLARE T  CURSOR  FOR SELECT TEST FROM A ORDER BY TEST情况下都不会看到新插入的3这条记录,原因如2 所述

总之,在动态游标的情况下,基表变化后会马上影响到游标结果集,至于能不能马上读出这种变化,就要看具体的游标声明语句

分享到:
评论

相关推荐

    sql存储过程和游标的运用

    然后,我们使用`fetch`语句来逐行处理游标中的成绩,并根据成绩的值来更新相应的变量。 在第二个实验中,我们使用了存储过程来计算任一门课程的平均成绩。我们定义了一个存储过程`gradeavg`,该过程接受课程号作为...

    Oracle存储过程、游标、函数的详解

    函数是另一种在Oracle数据库中使用的编程组件,它可以接受输入参数并返回一个计算结果。 - **特点**: - 可以在SQL语句中调用。 - 必须返回一个值。 - 可以包含复杂的逻辑处理。 - **应用场景**: - 数据验证:...

    SQL SERVER中的存储过程和游标的使用大综合

    在"存储过程和游标创建使用大综合"的压缩包文件中,你可以找到更多关于这两个主题的实际例子和练习,帮助你深入理解和掌握SQL Server中存储过程和游标的使用方法。不断学习和实践这些知识,将有助于提升你在数据库...

    存储过程和游标

    在实际开发中,开发者通常会使用编程语言如Java、C#等来与数据库交互,通过特定的数据库连接库(如JDBC、ADO.NET等)来执行存储过程和管理游标。 综上所述,存储过程和游标是数据库开发中的重要工具,它们有助于...

    存储过程触发器 游标

    本文将深入探讨存储过程、触发器和游标,以及它们在实际应用中的综合使用。 首先,让我们来理解存储过程。存储过程是预编译的SQL语句集合,它封装了一系列数据库操作并在需要时执行。这种高级的SQL构造可以提高性能...

    Oracle存储过程out游标

    在这个场景中,我们有三个文件:TESTPACKAGE.txt,CURSOR_TEST2.txt和OracleProcedure.java,分别涉及Oracle存储过程的创建、游标的使用以及Java代码如何与Oracle存储过程交互。 首先,`TESTPACKAGE.txt`很可能包含...

    mysql存储过程_游标_项目练习

    3. 条件判断与循环:可能需要在存储过程中使用IF-ELSE结构进行条件判断,或者使用WHILE或LOOP结构进行循环操作,这在处理复杂逻辑时非常常见。 4. 结果集处理:根据项目需求,可能需要对游标遍历的结果进行更新、...

    Java调用oracle存储过程通过游标返回临时表

    这将打开一个游标,我们可以从游标中获取结果。 5. **处理游标结果**:使用`ResultSetMetaData`获取游标的列信息,然后通过`ResultSet`迭代读取每一行数据。由于游标返回的是临时表数据,所以需要逐行处理并存储在...

    oracle存储过程使用游标对多表操作例子

    本文将深入探讨如何在Oracle存储过程中使用游标进行多表操作,具体通过一个示例来展示这一过程。 ### 标题与描述分析 标题:“oracle存储过程使用游标对多表操作例子”直接指出了文章的主题是关于在Oracle环境下,...

    MS SQL Server2005存储过程、游标、游标嵌套综合例子

    在提供的示例文件`sqlserver2005_procedure_cursor_sample_20101015.sql`中,很可能是包含了存储过程的定义,这些存储过程可能涉及到游标的使用,甚至游标嵌套,以解决特定的业务问题。通常,这样的示例会展示如何在...

    存储过程和游标详解

    存储过程和游标是数据库设计和开发中的重要工具,它们不仅增强了SQL语言的功能,还提供了更高效、安全和灵活的数据处理方式。理解并熟练掌握这两种技术,对于提升数据库应用程序的性能和可靠性至关重要。

    自己做的存储过程含游标例子

    自己做的存储过程含游标例子,对于初学存储过程和游标的人有帮助

    oracle存储过程返回游标数据集

    存储过程中通过返回数据集,通过游标方式实现,以及在java中如何接收的整个过程

    oracle 的函数、存储过程、游标、简单实例

    本主题将深入探讨Oracle中的几个核心概念:函数、存储过程、游标以及简单的实例,这些都是数据库管理员和开发人员日常工作中不可或缺的部分。 首先,我们来了解**Oracle函数**。函数是预定义的代码块,接受零个或多...

    Oracle存储过程实例使用显示游标

    3. **提取数据**:使用`FETCH`语句从游标中获取一行数据。 4. **处理数据**:在循环中对提取的数据进行操作,如更新、插入或删除。 5. **关闭游标**:完成操作后,关闭游标以释放资源。 示例中的存储过程可能如下:...

    JAVA调用ORACLE存储过程游标使用

    执行`cs.execute()`后,我们可以从`cs.getObject(1)`获取到游标对象,将其转换为`ResultSet`,然后像处理普通查询结果一样遍历游标中的数据。 请注意,为了运行这段代码,你可能需要在项目中添加Oracle的JDBC驱动...

    pl/sql语句(包含存储过程和游标)一

    如题,初步研究了pl/sql的写法,现给出存储过程,游标等的使用,后续会给出其他的用法

    PLSQL 存储过程 游标使用

    PLSQL 存储过程 语法

    TSQL 存储过程 和 游标

    存储过程是SQL Server中的一种重要数据库对象,它是预编译的SQL语句集合,可以视为可重复使用的、有名字的批处理。它们解决了批处理语句的两个主要问题:无法传递参数和无法多次调用。存储过程允许用户通过参数传递...

Global site tag (gtag.js) - Google Analytics