1. 程式人生 > >SQLserver2008,儲存過程,遊標的使用。

SQLserver2008,儲存過程,遊標的使用。

當我們需要用到 儲存過程的時候,你會發現,有時候不僅僅是對資料的增刪改查,經常需要對中間表的結果集進行操作,下面我先講一下我這裡的業務邏輯,然後再貼程式碼塊,

我們微信上面由客戶經理髮放企業紅包,需要粉絲們去搶,經理建立一個紅包活動,沒有被搶完的情況下,需要我們後面把紅包剩餘的錢返回給客戶經理,首先我們判斷所有需要返還的紅包活動ID,然後根據每個活動ID去計算應該返還多少錢給客戶經理。大概邏輯是就是這個樣子,下面貼程式碼,程式碼也會有相應的註釋。

--計算客戶經理紅包餘額
create proc DealRedPaper
as
	declare @redTotal decimal(20,6)  --客戶經理紅包總金額
	declare @redCount int  --客戶經理紅包總數
	declare @getTotal decimal(20,6)  --粉絲一共領用的紅包總金額
	declare @getCount int   --有多少粉絲領到了紅包
	declare @redId varchar(32)  --活動ID
	declare @redLeft decimal(20,6)  --紅包餘額
	declare @redMid varchar(32)  --經理ID
	
	--查詢活動過期且active_flag=Y的資料
	declare c_redPaper cursor FAST_FORWARD for
	select row_id,total,amount,mid from APP_SEND_PAPER_ACT where ACTIVE_FLAG='Y' and DELETE_FLAG='N' and GETDATE() > END_DATE


下面就需要用到遊標了,遍歷每一個紅包活動,去計算每個紅包活動還剩下多少錢。

--開啟遊標
	open c_redPaper
	--取第一條記錄
	FETCH NEXT FROM c_redPaper into @redId,@redTotal,@redCount,@redMid
	WHILE @@FETCH_STATUS=0
	begin
		--根據活動ID查詢領用情況
		select  @getCount=count(1),@getTotal=SUM(isnull(TOTAL,0)/100) from APP_SEND_RECORD where [email protected] 
		--如果紅包總個數大於領取的個數,則把剩餘的錢退回給客戶經理
		if @redCount > @getCount
			begin
				set @
[email protected]
@getTotal --計算餘額 update APP_SEND_PAPER_ACT set ACTIVE_FLAG='N' where [email protected] --修改紅包的狀態為N update APP_MANAGER set [email protected] where [email protected] --把剩餘的錢返還給客戶經理 end --遍歷下一條資料 FETCH NEXT FROM c_redPaper into @redId,@redTotal,@redCount,@redMid end CLOSE c_redPaper DEALLOCATE c_redPaper


這樣就OK了,剩下的是寫一個JOB,每天結算一下紅包活動就OK了。

相關推薦

SQLserver2008儲存過程遊標的使用

當我們需要用到 儲存過程的時候,你會發現,有時候不僅僅是對資料的增刪改查,經常需要對中間表的結果集進行操作,下面我先講一下我這裡的業務邏輯,然後再貼程式碼塊, 我們微信上面由客戶經理髮放企業紅包,需要粉絲們去搶,經理建立一個紅包活動,沒有被搶完的情況下,需要我們後面把紅包剩

SQL語句優化索引檢視觸發器儲存過程函式等

    一,SQL優化        主要解決海量資料操作時的全表搜尋,所以減少不必要的全表搜尋是SQL優化的主要目的,下面總結一下常用的優化有哪些:        1,避免在where條件中使用!=或者<>,這樣會是的查詢放棄索引而進行全域性掃描       

ORACLE PL/SQL語法應用:遊標儲存過程觸發器函式

--遊標 --do while迴圈 declare    cursor c is select * from t_t_student order by id;   v_record c%rowtype

mysql 神器 if 語句儲存過程遊標

BEGIN declare key_list varchar(255) default '';  declare mykey varchar(255) default '';  declare int_flag int default 0;  declare done int

MySql基礎教程二(檢視儲存過程遊標觸發器事務許可權資料型別)

檢視 檢視是虛擬的表。與包含資料的表不一樣,檢視只包含使用時動態檢索資料的查詢。比如下面的語句: select cust_name, cust_contact from customers, orders, orderitems where customers.cust_id=orders.cust_i

如何使用plsql匯出oracle資料建表語句儲存過程檢視以及表中資料

轉載自:http://blog.csdn.net/u010735684/article/details/48524727 侵刪 第一:匯出資料建表語句,儲存過程,檢視等 開啟plsql,如圖,點選工具————匯出使用者物件  點選匯出使用者物件。如圖所示:  如圖勾

視圖觸發器事物儲存過程函數流程控制

tro then database lap data rtrim( -s sun .com 一視圖 建表 create database o; use o; create table teacher( tid int primary key auto_increment

查詢資料庫中當前使用者下的所有表儲存過程檢視觸發器

user_objects是oracle字典表的試圖,他包含了通過DDL建立的所有物件。表,試圖,索引。。等 all_table,  dba_table  , user_table   同理 Select object_name From user_obj

Oracle學習筆記 -分頁儲存過程自增

Oracled 的欄位自增,查詢,遊標的返回,儲存過程。 1,自增(觸發器) //還有一個條件需要增加一個佇列 create or replace TRIGGER MYSYSTEM.CBOUNCEID BEFORE INSERT ON MYSYSTEM.BOUNCERECORD

檢視儲存過程觸發器

檢視的特點 檢視只是一種邏輯物件,是一種虛擬表,它並不是物理物件,因為檢視不佔物理儲存空間,在檢視中被查詢的表稱為檢視的基表,大多數的select語句都可以用在建立檢視中 優點:集中使用者使用的資料,掩碼資料的複雜性,簡化許可權管理以及為向其他應用程式輸出而重新組織資料等等 語法

mysql 檢視事務儲存過程觸發器

一 檢視 檢視是一個虛擬表(非真實存在),是跑到記憶體中的表,真實表是硬碟上的表。使用檢視我們可以把查詢過程中的臨時表摘出來,儲存下來,用檢視去實現,這樣以後再想操作該臨時表的資料時就無需重寫複雜的sql了,直接去檢視中查詢即可,但檢視有明顯地效率問題,並且檢視是存放在資料庫中的,如果我們程式中使用的sql

MySQL(四)檢視儲存過程觸發器

一:檢視 什麼是檢視? 檢視(View)是一種虛擬存在的表,對於使用檢視的使用者來說基本上是透明的。檢視並 不在資料庫中實際存在,行和列資料來自定義檢視的查詢中使用的表,並且是在使用檢視時 動態生成的 檢視的優點? 簡單:使用檢視的使用者完全不需要關心後面對應的表的

Sql Server 資料庫表結構儲存過程檢視比較指令碼

  頂級乾貨   用來比較兩個資料庫之間 表結構,儲存過程及檢視差異的儲存過程,直接複製對應的儲存過程,無需改動,直接在資料庫中執行(傳遞要比較的資料庫引數)即可 1.兩個資料庫之間儲存過程及檢視差異比較的儲存過程 --測試指令碼 --exec [p_com

SQL增刪改查迴圈觸發器儲存過程以及sql語法

                                      可以直接貼上程式碼使用 --建立資料庫命令 create database j1216 on ( name=j1216, filename='E:\shuju\j1216\j1216.mdf', s

在java應用程式下呼叫儲存函式儲存過程

建立connection連結,釋放關閉連結 package demo.untils; import java.sql.Connection; import java.sql.DriverManage

mysql觸發器儲存過程預處理語句

建立t1表 create table t1(id varchar(10),name varchar(10),age varchar(20)); 建立t2表 create table t2(id varchar(10),name varchar(10),age varc

oracle資料庫觸發器儲存過程定時器jobpackage的基本用法總結

--定時器job語法引數解析 使用Submit()過程,工作被正常地計劃好。 這個過程有五個引數:job、what、next_date、interval與no_parse。 PROCEDURE Submit ( job       OUT binary_ineger, W

sqlserver檢視觸發器儲存過程檢視及表的一些命令

select name from sysobjects where xtype='TR' --所有觸發器 select name from sysobjects where xtype='P' --所有儲存過程 select name from sysobjects

mysql設定使用者名稱密碼儲存過程觸發器

mysql的總結的練習題 修改root使用者密碼 mysql -u root; mysql> use mysql; mysql> UPDATE user SET Password = PASSWORD(‘newpass

資料庫儲存過程觸發器遊標函式

MySQL5 中添加了儲存過程的支援。  大多數SQL語句都是針對一個或多個表的單條語句。並非所有的操作都這麼簡單。經常會有一個完整的操作需要多條才能完成。  儲存過程簡單來說,就是為以後的使用而儲存的一條或多條MySQL語句的集合。可將其視為批檔案。雖然他們的