求助,关于sybase的存储过程
我以前做的一个基于sybase的系统有一张明细表每月要增加1500万条纪录,为了提高效率现改为按季保存。季末在一个存储过程里调sp_rename对此表改名,然后create一张同名新表.
现在bcp正常,但其他存储过程读出和插入的对象是改名后的表名而不是过程里描述的表名,存储过程都带重编译的参数
求助如何使存储过程使用旧的固定表名(按季新建表)内的数据
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
现象为 卡的临柜交易明细 直接bcp 存于 bd_mx_ctl 里
而金卡交易明细保存到了 bd_mx_ctl_YYYYMM 里而不是过程里描述的bd_mx_ctl 里
检查一下你的Procedure 的 parameter 赋值是不是正确
和parameter无关
我调用 pr_rz9_sav_bd_mx_ctl 结果 bd_mx_ctl 改名为 bd_mx_ctl_YYYYMM 同时建立空表 bd_mx_ctl
bcp 数据到 bd_mx_ctl正常
调用pc_blk_mx_jkls_sp12 数据插到 bd_mx_ctl_YYYYMM 表中而不是bd_mx_ctl 里
create procedure pc_blk_mx_jkls_sp12
@datadate char(,
@datetype int,
@bcpcode char(10),
@bcptable char(30),
@chkcode char(3),
@mbrname char(20),
@datafile char(30),
@datreccount int,
@bcpreccount int,
@errreccount int,
@spname13 char(30),
@strucode int output,
@strudesc char(50) output
WITH RECOMPILE
as
--20040325 平日不删除索引所以要重编译
--明细资料.金卡流水.日全量数据
--数据表 bcp_mx_jkls
--基础表 bdt_kgl.dbo.bd_mx_ctl (明细资料全量数据)
--datastru
-- {<-10000系统错误,表未解锁;<0错误,表已解锁; =0 数据入库成功,表已解锁; >;0 受程序控制,表未解锁}
--@strucode {<-10000系统错误,保留断点 <0 受控的错误可继续执行 =0成功 >;0异常状态,执行其他操作后转为负值}
--最后2位取值范围 <50正常 >;50异常
--本过程失败保留断点,不执行@spname13
declare @bcpendtime datetime
declare @datastru_ok int
declare @datastru_err int
declare @datastru int
declare @daynum int
declare @datacode int
declare @retcode int
declare @ctltrtyp char(1)
select @bcpendtime=getdate(),@datastru_ok=1200,@datastru_err=1250,@datacode=5,@ctltrtyp='4'
select @datastru=@datastru_ok,@strucode=0,@strudesc='明细资料.金卡流水(单成员日全量数据)入库ok'
begin
----------------------------------------------------------------------------------------------------------
--数据修正
--信用卡去'63'
if (@strucode=0)
begin
update bcp_mx_jkls
set pan_v=substring(pan_v,3,16)
where substring(pan_v,1,6) in ('635359','636014','634910')
and transaction_code in ('4300','5300')
if (@@error<>;0)
begin
select @datastru=@datastru_err+2,@strucode=-1,@strudesc='error: update bcp_mx_jkls 失败'
end
end
--选出有用的数据
if (@strucode=0)
begin
select ls.datadate as ctlac_dat,
ls.datacode as datacode,
ka.cltac_no as ctlac_no,
substring(ls.transmission_time,5,6) as ctlac_tim,
ls.center_ssn as ctljrnno,
ls.pan_v as ctlcrdno,
ls.transaction_code as ctltr_cod,
case when ls.transaction_code='4300'
then -ls.transaction_amount
else ls.transaction_amount
end as ctlamt,
ls.merchant as ctltrbr,
ls.terminal_code as ctladr,
ls.authnum as ctlcrdvno,
ls.ctltrtyp as ctltrtyp
into #tmp_jkls
from bcp_mx_jkls ls,bdt_kgl.dbo.bd_ka_clt ka
where ka.cltcrd_no=ls.pan_v and transaction_code in ('4300','5300')
if (@@error<>;0)
begin
select @datastru=@datastru_err+2,@strucode=-1,@strudesc='error: crt #tmp_jkls 失败'
end
end
-----------------------------------------------------------------------------------------------------------------
--以临时表内数据为准
--临时表内为日的全量数据
if (@strucode=0)
begin
--找出临时表内有几日数据
select @daynum=0
select distinct ctlac_dat into #temp1
from #tmp_jkls
if (@@error=0)
select @daynum=count(*) from #temp1
if (@daynum=0)
select @datastru=@datastru_err+1,@strucode=-1,@strudesc='error: ETL_kgl.dbo.bcp_mx_jkls 表内无数据'
end
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--数据备份到 bdt_kgl.dbo.bd_mx_jkls
if (@strucode=0)
begin
--删除基本表内数据
delete bdt_kgl.dbo.bd_mx_jkls
from bdt_kgl.dbo.bd_mx_jkls t1,#temp1 t2
where t1.datadate=t2.ctlac_dat
if (@@error<>;0)
begin
select @datastru=@datastru_err+2,@strucode=-1,@strudesc='error: delete bdt_kgl.dbo.bd_mx_jkls 失败'
end
end
if (@strucode=0)
begin
--插入数据
insert into bdt_kgl.dbo.bd_mx_jkls
(datadate,center_ssn,transmission_time,transaction_code,transaction_amount,
pan_v,cb_code,ob_code,org_ssn,org_amt,merchant,authnum,
terminal_code,checkdetail_flag,center_ssn_true,ctltrtyp,datacode)
select datadate,center_ssn,transmission_time,transaction_code,transaction_amount,
pan_v,cb_code,ob_code,org_ssn,org_amt,merchant,authnum,
terminal_code,checkdetail_flag,center_ssn_true,ctltrtyp,datacode
from bcp_mx_jkls
if @@error<>;0
select @datastru=@datastru_err+3,@strucode=-10001,@strudesc='error: 数据有问题保留断点退出'
end
-------------------------------------------------------------------------------------------------------------------
if (@strucode=0)
begin
--删除基本表内数据
delete bdt_kgl.dbo.bd_mx_ctl
from bdt_kgl.dbo.bd_mx_ctl t1,#temp1 t2
where t1.ctlac_dat=t2.ctlac_dat and t1.ctltrtyp=@ctltrtyp
if (@@error<>;0)
begin
select @datastru=@datastru_err+2,@strucode=-1,@strudesc='error: delete bdt_kgl.dbo.bd_mx_ctl 失败'
end
drop table #temp1
end
------------------------------------------------------------------------------------------------------------------
if (@strucode=0)
begin
--插入数据
insert into bdt_kgl.dbo.bd_mx_ctl
(ctlac_dat,datacode,ctlac_no,ctlac_tim,ctljrnno,ctlcrdno,
ctltr_cod,ctlamt,ctltrbr,ctladr,ctlcrdvno,ctltrtyp,
ctlvc_hn,ctlvchcls,ctlvchno,ctlchgflg,ctlamtind,ctlsmrflg,
ctltl_id,ctljurcod,ctlerrdat,ctlremark)
select ctlac_dat,datacode,ctlac_no,ctlac_tim,ctljrnno,ctlcrdno,
ctltr_cod,ctlamt,ctltrbr,ctladr,ctlcrdvno,ctltrtyp,
space(,0,0,'1','0', '0','JHXF',space(6),space(,
'JHXF'+ctltrbr
from #tmp_jkls
if @@error<>;0
select @datastru=@datastru_err+3,@strucode=-10001,@strudesc='error: 数据有问题保留断点退出'
drop table #tmp_jkls
end
-------------------------------------------------------------------------------------------------------------------
if (@strucode=0)
begin
exec bdt_kgl.dbo.pc_index_bd_mx_ctl 1,@retcode output
if (@retcode<>;0)
begin
select @datastru=@datastru_err+1,@strucode=-1,@strudesc='建索引失败 bdt_kgl.dbo.bd_mx_ctl.Index_mx'
end
end
--------------------------------------------------------------------------------------------------------------------
--修改历史表数据
update ctl_bcp_hst
set bcpendtime=@bcpendtime,
spendtime=getdate(),
datreccount=@datreccount,
bcpreccount=@bcpreccount,
errreccount=@errreccount,
datastru=@datastru,
datadesc=@strudesc
where datadate=@datadate and chkcode=@chkcode and bcpmbr=space(20)
if (@@rowcount<>;1 or @@error<>;0)
select @strucode=-10001,@strudesc='系统错误,修改ctl_bcp_hst失败,已保留断点'
return @strucode
end
检查一下你的Procedure 的 parameter 赋值是不是正确