您的位置:首页 > 数据库

Microsoft SQL Server 存储过程举例

2015-05-28 10:36 113 查看
-- if SP is existed, drop it.
if (object_id('InvHoldToDPS', 'P') is not null)
drop proc InvHoldToDPS
GO

-- craete new SP.
CREATE PROCEDURE dbo.InvHoldToDPS
AS
BEGIN
SET NOCOUNT ON

-- delete target table.
--delete from inv1_holdsForPrice

-- delte temp table.
--delete from inv1_holdsForPriceTemp

declare @headLine char(2000)
-- get the first record which is title info.
set @headLine = (select top 1 feedValue from inv1_holdsForPriceTemp)

IF LEFT(@headLine, 6) <> 'IMAHDR'
BEGIN
print 'Error'
-- wirte the info to the log table.
-- exit (return)
END

declare @priceDate char(8)
select @priceDate = SUBSTRING(@headLine, 26,8) -- store Price Date "YYYYMMDD"

declare @j int
select @j = 0

declare curFV_cur cursor for
select feedValue from inv1_holdsForPriceTemp for read only

declare @feedValue char(2000)
select @feedValue = ''

open curFV_cur
fetch next from curFV_cur into @feedValue

while (@@fetch_status = 0)
begin
if(LEFT(@feedValue, 6) <> 'IMAHDR' And Left(@feedValue, 6) <> 'IMATRL') --  Head and Feet record
begin
if(LEN(ltrim(rtrim(SUBSTRING(@feedValue, 39, 9))))) = 9
begin
declare @inv1_acct_num     decimal
declare @inv1_grp_acct_num varchar
declare @fmr_fund_num      varchar
declare @fmr_subport_num   char
declare @fmr_cusip         varchar
declare @acct              varchar
declare @scty_cusip        varchar
declare @scty_date         varchar
declare @scty_qual         varchar
declare @hold_date         varchar
declare @shares            decimal
declare @cost               decimal
declare @amort             decimal
declare @accr_incom        decimal
declare @market            decimal
declare @price             decimal
declare @fx_rate           decimal
declare @price_date        varchar

select @inv1_acct_num     = LTRIM(RTRIM(SUBSTRING(@feedValue,  1, 15)))
select @inv1_grp_acct_num = LTRIM(RTRIM(SUBSTRING(@feedValue, 16, 15)))
select @fmr_fund_num      = LTRIM(RTRIM(SUBSTRING(@feedValue, 31,  6)))
select @fmr_subport_num   = LTRIM(RTRIM(SUBSTRING(@feedValue, 37,  2)))
select @fmr_cusip         = LTRIM(RTRIM(SUBSTRING(@feedValue, 39,  9)))
select @acct              = LTRIM(RTRIM(SUBSTRING(@feedValue, 59, 15)))
select @scty_cusip        = LTRIM(RTRIM(SUBSTRING(@feedValue, 74,  9)))
select @scty_date         = LTRIM(RTRIM(SUBSTRING(@feedValue, 83,  8)))
select @scty_qual         = LTRIM(RTRIM(SUBSTRING(@feedValue, 91,  5)))
select @hold_date         = LTRIM(RTRIM(SUBSTRING(@feedValue, 96,  8)))
select @shares            = SUBSTRING(@feedValue, 104, 15) + '.' + SUBSTRING(@feedValue, 109, 4)
select @cost              = SUBSTRING(@feedValue, 123, 16) + '.' + SUBSTRING(@feedValue, 139, 2)
select @amort             = SUBSTRING(@feedValue, 141, 16) + '.' + SUBSTRING(@feedValue, 157, 2)
select @accr_incom        = SUBSTRING(@feedValue, 159, 16) + '.' + SUBSTRING(@feedValue, 175, 2)
select @market            = SUBSTRING(@feedValue, 177, 16) + '.' + SUBSTRING(@feedValue, 193, 2)
select @price             = SUBSTRING(@feedValue, 195, 77) + '.' + SUBSTRING(@feedValue, 206, 8)
select @fx_rate           = SUBSTRING(@feedValue, 214,  7) + '.' + SUBSTRING(@feedValue, 211, 9)
select @price_date        = @priceDate

if(SUBSTRING(@feedValue, 48, 1)) = '1'
begin
exec dbo.spUpd_inv1_holdsForPrice
@inv1_acct_num,
@inv1_grp_acct_num,
@fmr_fund_num,
@fmr_subport_num,
@fmr_cusip,
@acct,
@scty_cusip,
@scty_date,
@scty_qual,
@hold_date,
@shares,
@cost,
@amort,
@accr_incom,
@market,
@price,
@fx_rate,
@price_date

end
else if(SUBSTRING(@feedValue, 48, 1)) = '2'
begin
declare @inv1_acct_num2     decimal
declare @inv1_grp_acct_num2 varchar
declare @fmr_fund_num2      varchar
declare @fmr_subport_num2   char
declare @fmr_cusip2         varchar
declare @sec_desc           varchar
declare @sec_country_code   varchar
declare @traded_ccy         varchar
declare @income_ccy         varchar
declare @unit_of_calc       decimal

select @inv1_acct_num2     = LTRIM(RTRIM(SUBSTRING(@feedValue,  1, 15)))
select @inv1_grp_acct_num2 = LTRIM(RTRIM(SUBSTRING(@feedValue, 16, 15)))
select @fmr_fund_num2      = LTRIM(RTRIM(SUBSTRING(@feedValue, 31,  6)))
select @fmr_subport_num2   = LTRIM(RTRIM(SUBSTRING(@feedValue, 37,  2)))
select @fmr_cusip2         = LTRIM(RTRIM(SUBSTRING(@feedValue, 39,  9)))

select @sec_desc           = LTRIM(RTRIM(SUBSTRING(@feedValue, 59, 30)))
select @sec_country_code   = LTRIM(RTRIM(SUBSTRING(@feedValue, 89,  4)))
select @traded_ccy         = LTRIM(RTRIM(SUBSTRING(@feedValue, 93,  4)))
select @income_ccy         = LTRIM(RTRIM(SUBSTRING(@feedValue, 97,  4)))
select @unit_of_calc       = LTRIM(RTRIM(SUBSTRING(@feedValue, 158,  10))) + '.' + LTRIM(RTRIM(SUBSTRING(@feedValue, 168,  4)))

exec spUpd_inv1_holdsForPrice2
@inv1_acct_num2,
@inv1_grp_acct_num2,
@fmr_fund_num2,
@fmr_subport_num2,
@fmr_cusip2,
@sec_desc,
@sec_country_code,
@traded_ccy,
@income_ccy,
@unit_of_calc
end
end
end

select @j = @j + 1
fetch next from curFV_cur into @feedValue
end
close curFV_cur
deallocate curFV_cur

END
SET NOCOUNT OFF

--exec spUpdateBDAatInv1

--exec spUpdateEquitiesMasterInv1

GO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐