`
yinter
  • 浏览: 244041 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

好久没用游标了,为了方便查询,记一下

阅读更多


alter procedure [dbo].[p_sync_sms_records]
as
declare @type            varchar(5)
declare @send_number    varchar(21)
declare @recv_number    varchar(21)
declare @content        varchar(256)
declare @created_at        datetime
declare @area_id        varchar(5),
        @sql            varchar(5000),
        @row_value        varchar(120),
        @row_a            varchar(20),
        @row_b            varchar(20),
        @row_c            varchar(20),
        @row_d            varchar(20),
        @row_e            varchar(20),
        @row_f            varchar(20)
/*
exec [p_sync_sms_records]
*/

    --初始化游标
    DECLARE cur CURSOR FOR
    SELECT type,send_number,recv_number,content,created_at
    FROM original_sms_records
    WHERE convert(varchar(10),created_at,121)=convert(varchar(10),getdate(),121)

    --打开游标
    OPEN cur
    FETCH next FROM cur INTO @type,@send_number,@recv_number,@content,@created_at

    --置游标于下一条
    WHILE @@FETCH_STATUS = 0
    BEGIN
        select @area_id=dbo.f_region(@recv_number)

        DECLARE row_value CURSOR FOR
        SELECT value FROM f_splitstring(@content,' ')

        OPEN row_value
        FETCH next FROM row_value INTO @row_value
       
        declare @i int
        set @i=1
        set @row_a=''
        set @row_b=''
        set @row_c=''
        set @row_d=''
        set @row_e=''
        set @row_f=''
        WHILE @@FETCH_STATUS = 0
        BEGIN
            if @i<=6
            begin
                if @i=1
                    set @row_a=@row_value
                else if @i=2
                    set @row_b=@row_value
                else if @i=3
                    set @row_c=@row_value
                else if @i=4
                    set @row_d=@row_value
                else if @i=5
                    set @row_e=@row_value
                else
                    set @row_f=@row_value

                set @i=@i+1
                FETCH NEXT FROM row_value INTO @row_value
            end
            else
            begin
                FETCH NEXT FROM row_value
                break
            end
        END
       
        select top 1 1 from detail_sms_records
            where send_number=@send_number and recv_number=@recv_number and area_id=area_id
                    and row_a=@row_a and row_b=@row_b and row_c=@row_c and row_d=@row_d and row_e=@row_e and row_f=@row_f
       
        if @@ROWCOUNT=0
        begin
            insert into detail_sms_records
            (type,send_number,recv_number,area_id,row_a,row_b,row_c,row_d,row_e,row_f,content,created_at)
            values (@type,@send_number,@recv_number,@area_id,@row_a,@row_b,@row_c,@row_d,@row_e,@row_f,@content,@created_at)
        end

        CLOSE row_value
        DEALLOCATE row_value

        FETCH next FROM cur INTO @type,@send_number,@recv_number,@content,@created_at
    END

    --关闭游标
    CLOSE cur
    DEALLOCATE cur





分享到:
评论

相关推荐

    使用游标浏览学生记录

    使用游标浏览学生记录,创建存储过程,包含游标,浏览学生记录

    利用游标多数据库查询单条数据方法

    在SQL编程中,游标(Cursor)是一种非常重要的工具,特别是在处理多数据库查询时,它允许我们逐行处理结果集,而不是一次性加载所有数据。在标题"利用游标多数据库查询单条数据方法"中提到的场景,游标被用于在10多...

    oracle数据库的游标

    使用游标可以方便地访问查询结果集中的每一行,这对于处理大量数据是非常有用的。游标主要分为两种类型:显式游标和隐式游标。显式游标是用户通过编程定义的,可以处理多行数据;而隐式游标则是由数据库系统自动处理...

    jdbcTemplate分页彻底解决,使用游标滚动

    在Java的Spring框架中,`JdbcTemplate`是一个非常重要的组件,它提供了数据库操作的简单抽象,使得开发者可以方便地执行SQL语句而无需编写复杂的DAO(数据访问对象)层。在处理大量数据时,传统的分页方法可能会导致...

    利用游标执行删除查询统计 cursor

    利用游标执行删除查询统计 cursor, 执行动态sql

    oracle游标的总结oracle游标的总结

    Oracle 游标是一种非常重要的概念,它可以帮助开发者更方便地查询数据库,获取记录集合(结果集)的指针,并对其进行处理。本文对 Oracle 游标的概念、分类、声明方式、属性和应用进行了详细的介绍,希望能够帮助...

    JDBC使用游标实现分页查询的方法

    在Java数据库连接(JDBC)中,游标(Cursor)是一种重要的概念,它允许我们以迭代的方式处理查询结果集。游标提供了前后移动查询结果的能力,这对于实现分页查询非常有用,尤其是处理大数据量时,避免一次性加载全部...

    oracle 隐式游标,显示游标,游标循环

    在Oracle数据库中,游标是一种非常重要的机制,它允许用户在程序中对查询结果进行逐行处理。游标分为两种主要类型:**隐式游标**和**显示游标**。此外,还可以利用游标进行循环处理,以实现更复杂的数据操作需求。 ...

    oracle解决游标多维度循环查询效率过低方案

    多维度查询时通常需要建立多个游标循环,查询效率无法得到保障,现在通过游标和substr()函数相结合的方式提高查询效率

    oracle 游标

    Oracle 游标是一种数据库编程工具,它允许程序员逐行处理查询结果集,而不仅仅是一次性获取所有数据。在Oracle中,游标尤其适用于处理大量数据,或者需要根据当前数据行进行决策的情况。游标通常与存储过程结合使用...

    关于pb游标的详细描述

    PB游标,全称PowerBuilder游标,是PowerBuilder编程环境中用于处理数据库查询结果的一种机制。游标允许程序逐条处理查询结果集,而不是一次性获取所有数据,这在处理大量数据或需要动态过滤数据时非常有用。以下是...

    数据库游标使用详细介绍

    在数据库领域,游标(Cursor)是一种用于处理数据查询结果集的强大工具,尤其在Oracle数据库中,游标的应用极为广泛且功能强大。本文将深入探讨Oracle数据库中游标的基本概念、类型、使用方法以及其在数据处理中的...

    Oracle存储过程游标详解

    当查询返回结果超过一行时,就需要一个显式游标。 REF 游标是动态关联结果集的临时对象。游标的状态是通过属性来表示,可以通过 %Found、%NotFound、%ISOpen、%RowCount 等属性来获取游标的状态。 在使用游标时,...

    Mysql游标(循环操作)

    通过定义游标、打开游标、获取数据、处理数据、关闭游标这一系列步骤,我们可以有效地对查询结果进行逐行处理。这种技术特别适用于需要对每一行数据进行复杂操作或者需要根据查询结果动态调整处理逻辑的情况。同时,...

    数据库实验 游标及游标并发

    在数据库实验中,游标(Cursor)是一种重要的数据库对象,它允许开发者逐行处理查询结果,从而实现复杂的业务逻辑。在本实验中,我们将探索游标的使用和并发control机制,以提高数据库的性能和可靠性。 游标的概念...

    波形图游标功能_获取游标_

    波形图游标功能在许多科学计算和数据分析应用中都是一种非常重要的工具,它允许用户在可视化图形上精确地定位和测量数据点。在LabVIEW(Laboratory Virtual Instrument Engineering Workbench)这样的图形化编程环境...

    ORACLE 游标使用示例

    游标允许我们逐行处理查询结果,这对于迭代、条件判断或者数据更新等任务非常实用。下面,我们将深入探讨Oracle游标的使用示例及其相关的知识点。 首先,游标的基本概念是它提供了一种方式来跟踪并控制SQL查询的...

    快速掌握Oracle数据库游标的使用方法

    Oracle 数据库游标是处理多行查询结果的重要工具,可以帮助开发者更方便地处理数据。在使用游标时,需要注意声明、打开、提取数据、关闭等步骤,以确保数据的正确性和安全性。 在实际应用中,游标可以用于各种场景...

    游标最简单教程

    游标是数据库管理系统中的一个重要概念,主要用于处理查询结果集中的数据记录。它允许用户逐行地读取和处理这些记录,这对于需要对每一行数据进行特定操作的情况非常有用。在SQL语言中,游标通常用于存储过程或函数...

Global site tag (gtag.js) - Google Analytics