• 存储过程


    存储过程在我们后端开发很常用,我们经常在开发过程中需要写存储过程,其实存储过程没啥难的,就是一个固定的格式,最难的在于存储过程中我们要写的逻辑,业务方面的东西,这些就需要我们对业务逻辑比较熟悉才行。

    存储过程的代码结构如下

    CREATE  PROCEDURE [dbo].[存储过程名称]
        (
          -----参数
          @ReceiveAmount MONEY , --收款金额   
          @Result INT OUTPUT--返回值
        )
    AS
        BEGIN TRY
            BEGIN TRANSACTION; 
           --判断条件
            IF @ReceiveAmount > 0
                BEGIN
                    SET @Result = 1;
                    ROLLBACK TRANSACTION;  --回滚到最初状态
                    RETURN;
                END;
                --定义游标
            DECLARE SKW_cursor CURSOR LOCAL
            --LOCAL指定该游标的作用域对在其中创建它的批处理、存储过程或触发器是局部的。该游标名称仅在这个作用域内有效。在批处理、存储过程、触发器或存储过程 OUTPUT 参数中,该游标可由局部游标变量引用。OUTPUT 参数用于将局部游标传递回调用批处理、存储过程或触发器,它们可在存储过程终止后给游标变量指派参数使其引用游标。除非 OUTPUT 参数将游标传递回来,否则游标将在批处理、存储过程或触发器终止时隐性释放。如果 OUTPUT 参数将游标传递回来,游标在最后引用它的变量释放或离开作用域时释放。
            FOR
                SELECT  a.FIndex ,
                        a.FContractID ,
                        a.FEntryID ,
                        a.FAmount
                FROM    t_RPContractScheme a
                ORDER BY a.FIndex;
                --OPEN 语句填充结果集,
                --FETCH 从结果集返回行。
                --CLOSE 语句释放与游标关联的当前结果集。
                --DEALLOCATE 语句释放游标所使用的资源。
            OPEN SKW_cursor;
            FETCH NEXT FROM SKW_cursor INTO @findex, @fcontractid, @FSchemeEntryID, @famount;  
            --获取SKW_cursor的下一条数据,其中为字段分别赋值给对应参数
            WHILE @@FETCH_STATUS = 0  --假如检索到了数据继续执行
                BEGIN--1
                    IF ( @sumAmount < @ReceiveAmount )
                        BEGIN
                           ----SQL语句
                        END;
                    FETCH NEXT FROM SKW_cursor INTO @findex, @fcontractid,
                        @FSchemeEntryID, @famount;  
                END;--1
    
            CLOSE SKW_cursor;--关闭游标
            DEALLOCATE SKW_cursor;
    
            COMMIT TRANSACTION;--提交事务,此时数据才真正保存到数据库
        END TRY
    
    
        BEGIN CATCH 
            ROLLBACK TRANSACTION;  --出现异常的时候,回滚到最初状态
            SET @Result = 1;
            SELECT  ERROR_NUMBER() AS ErrorNumber ,
                    ERROR_MESSAGE() AS ErrorMessage;
        END CATCH;
    
    GO
  • 相关阅读:
    gc buffer busy/gcs log flush sync与log file sync
    给Oracle年轻的初学者的几点建议
    Android 编程下帧动画在 Activity 启动时自动运行的几种方式
    Android 编程下 Touch 事件的分发和消费机制
    Java 编程下 static 关键字
    Java 编程下 final 关键字
    Android 编程下模拟 HOME 键效果
    Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated ?
    Extjs4 大型项目目录结构重构
    [转]SQLServer 2008 允许远程连接的配置方法
  • 原文地址:https://www.cnblogs.com/MirZhai/p/11249033.html
Copyright © 2020-2023  润新知