求助,关于sybase的存储过程

发布于 2022-06-25 21:48:41 字数 205 浏览 22 评论 3

我以前做的一个基于sybase的系统有一张明细表每月要增加1500万条纪录,为了提高效率现改为按季保存。季末在一个存储过程里调sp_rename对此表改名,然后create一张同名新表.

现在bcp正常,但其他存储过程读出和插入的对象是改名后的表名而不是过程里描述的表名,存储过程都带重编译的参数

求助如何使存储过程使用旧的固定表名(按季新建表)内的数据

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

绮筵 2022-06-27 17:41:38

现象为 卡的临柜交易明细 直接bcp 存于 bd_mx_ctl 里
而金卡交易明细保存到了 bd_mx_ctl_YYYYMM 里而不是过程里描述的bd_mx_ctl 里

-奴爱 2022-06-27 16:24:44

检查一下你的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

天涯沦落人 2022-06-26 14:40:51

检查一下你的Procedure 的 parameter 赋值是不是正确

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文