作業呼叫的游標

2021-05-11 11:06:44 字數 4224 閱讀 2607

作業呼叫的游標

--用途:每天晚上執行,對所有未贈送積分的訂單進行贈送積分

--修改 07-03-12 新增的積分啟用

--修改 07-03-13 註冊驗證積分啟用限制在3個月

--修改 07-03-14 註冊驗證積分07-03--15前不受3個月限制

create procedure [dbo].[getetorderscore]

as

declare

@get_id int, --獲取積分記錄表id

@pkid int, --機票訂單id

@dicsountprice int, --訂單優惠金額

@ticket_type smallint, --機票型別

@t_id int, --會員id

@source int, --消費平台

@sailtype smallint, --航程型別

@memberlevel int --會員級別

begin

--迴圈找出所有可贈送積分的機票訂單

declare cur_order cursor for

select et.pkid,et.discount_price,et.ticket_type,et.t_id,left(et.order_source,3) order_source,et.sail_type ,cm.client_rank

from et_order et join cms_member cm on et.t_id=cm.t_id

where

--原sql is_return <> 1 --沒有退票,部分退票

--原sql and (status = 11 or status = 20) --已退票 ,完成

status = 20

and (sail_type =1 or sail_type = 4)

and (datediff(day,dep_time,getdate()) >=0) --當天起飛

and et.get_score = 0

open cur_order

fetch next from cur_order into @pkid,@dicsountprice,@ticket_type,@t_id,@source,@sailtype,@memberlevel

while @@fetch_status = 0

begin

print @pkid

if ( exists(select 1 from score_get where get_workflow_id = 1003 and get_orderid = @pkid ) )

begin

--1.獲取積分記錄表中的記錄id

select @get_id = get_id

from score_get

where get_workflow_id = 1003

and get_orderid = @pkid and get_status <>-1--部分退票已經失效的積分不能被啟用

--2.更新積分記錄表的狀態為已啟用,新增備註

update score_get

set get_status = 1,

get_remark = '系統自動確認已贈送積分

' + isnull(get_remark,'')

where

get_id = @get_id

--3.記錄積分日誌score_log 先不做

--4.更新et_order表的get_score為1 已獲得

update et_order set get_score = 1 where pkid = @pkid

end

--因有效消費,相關積分被啟用(07-03-12)

--註冊驗證積分啟用,有三個月啟用限制

begin

--07-03-15之後

update score_get

set get_status = 1,

get_remark = '系統自動確認已贈送積分

' + isnull(get_remark,'')

where

get_t_id = @t_id and dateadd(mm,3,get_start_date) > getdate() and (get_workflow_id = 1001 or get_workflow_id = 1002) and get_status = 0 and get_start_date >= '2007-03-15 00:00:00' --限制在3個月

--07-03-15之前

update score_get

set get_status = 1,

get_remark = '系統自動確認已贈送積分

' + isnull(get_remark,'')

where

get_t_id = @t_id and (get_workflow_id = 1001 or get_workflow_id = 1002) and get_status = 0 and get_start_date < '2007-03-15 00:00:00' --不受限制在3個月限制

end

--推薦人積分啟用

declare @getscore_id int

declare @recommendgetscoreid int

declare @history_id int

if ( exists(select 1 from score_recommend where recommend_t_id = @t_id ))

begin

select top 1 @getscore_id = recommend_getscore_id, @recommendgetscoreid = recommend_recommendgetscoreid, @history_id = recommend_history_id

from score_recommend where recommend_t_id = @t_id

if ( @recommendgetscoreid is not null)

begin

update score_get

set get_status = 1,

get_remark = '系統自動確認已贈送積分

' + isnull(get_remark,'')

where

get_id = @recommendgetscoreid

end

--print ( convert(varchar(1000),@recommendgetscoreid))

if ( @history_id is not null)

begin

update score_recommend_history

set history_scorestate = 1, --推薦積分狀態true:啟用

history_state = 2, --被推薦使用者的狀態2.有效消費會員

history_updatetime = getdate() --最後更新的日期

where

history_id = @history_id and history_scorestate = 0

end

end

fetch next from cur_order into @pkid,@dicsountprice,@ticket_type,@t_id,@source,@sailtype,@memberlevel --游標下移,繼續處理

end

close cur_order

deallocate cur_order

end

游標作業1

1 編寫一段程式,通過輸入的員工編碼,查詢並列印員工的姓名 職位和薪水,並定義異常處理。預定義異常 2 獲得所有員工的平均工資,如果平均工資大於2000,視為使用者定義的異常,提示 員工工資有點高 否則列印平均工資。使用者定義異常 3 使用顯式游標,輸入乙個員工工資數 根據員工工資 sal 引數,查...

包內包含游標型別過程的呼叫!

今天在 上看到了這樣乙個問題 create or replace package pkg aa as type myrctype is ref cursor procedure get p id number,p rc out myrctype end pkg dept 我怎麼樣在sql plus中...

mybatis呼叫儲存過程,獲取返回的游標

將呼叫儲存過程引數放入map中,由於返回的游標中包含很多引數,所以再寫乙個resultmap與之對應,型別為hashmap。設定返回的jdbctype cursor,resultmap設定為id對應的值。最後游標中的值就輸出到list中了。如下 service層 public hashmap tes...