作業呼叫的游標
--用途:每天晚上執行,對所有未贈送積分的訂單進行贈送積分
--修改 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...