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資料庫觸發器,儲存過程,定時器job,package的基本用法總結
--定時器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語句的集合。可將其視為批檔案。雖然他們的