如何执行存储过程以及如何进行调试?

    今天主管让我在PL/SQL里面执行存储过程~这部分很生疏,以至于不知道如何下手,只好求救google,还好google里面有很多例子,可是在我这里就是死活不成功,其实主要的问题,在于输出参数的如何定义~

   首先定义存储过程如下:

   CREATE OR REPLACE PROCEDURE "JK_DATA_CHECK_TABLE" (SRC_TABLE_NAME in varchar2,dataType in varchar2,bat_id in varchar2,flag out varchar2)
is
stable      varchar2(100) := SRC_TABLE_NAME||'@JIEKOU';
insertSql   varchar2(4000);
increment   varchar2(32) := 'ins';    --增量ins/全量full
begin
  if dataType='site' then --局站
    if increment='ins' then--增量
       insertSql:='insert into iodso.gxzy_ods_site_temp(ID,NAME,CODE,PXJ,PARENT_ID,PARENT_CODE,CREATE_TIME,EDIT_TIME,STATUS,INS_DATE,BAT_ID,AREA_ID)
                                                 select ID,NAME,CODE,PXJ,PARENT_ID,PARENT_CODE,CREATE_TIME,EDIT_TIME,STATUS,INS_DATE,BAT_ID,AREA_ID
                                                 from '||stable||' where bat_id=:bat_id';
       execute immediate insertSql using bat_id;
       commit;
       odso.data_check_site(bat_id,flag);
    else
       insertSql:='insert into odso.gxzy_ods_site(ID,NAME,CODE,PXJ,PARENT_ID,PARENT_CODE,CREATE_TIME,EDIT_TIME,STATUS,INS_DATE,BAT_ID,AREA_ID)
                                           select ID,NAME,CODE,PXJ,PARENT_ID,PARENT_CODE,CREATE_TIME,EDIT_TIME,STATUS,INS_DATE,BAT_ID,AREA_ID
                                           from '||stable||' where bat_id=:bat_id';
       execute immediate insertSql using bat_id;
       commit;
    end if;
   
  elsif dataType='ccp' then --交接箱,添加了新的字段,odso比接口库多write_time子都
    if increment='ins' then--增量
       insertSql:='insert into iodso.gxzy_ods_ccp_temp(CCP_ID,CCP_CODE,XBZ,INSTALLEDADDRESS,DP_ID,DP_CODE,PARENT_DP_ID,PARENT_DP_CODE,SITE_ID,SITE_CODE,CREATE_TIME,EDIT_TIME,STATUS,INS_DATE,BAT_ID,AREA_ID)
                                                select CCP_ID,CCP_CODE,XBZ,INSTALLEDADDRESS,DP_ID,DP_CODE,PARENT_DP_ID,PARENT_DP_CODE,SITE_ID,SITE_CODE,CREATE_TIME,EDIT_TIME,STATUS,INS_DATE,BAT_ID,AREA_ID
                                                from '||stable||' where bat_id=:bat_id';
       execute immediate insertSql using bat_id;
       commit;
       odso.data_check_ccp(bat_id,flag);
    else
       insertSql:='insert into odso.gxzy_ods_ccp(CCP_ID,CCP_CODE,XBZ,INSTALLEDADDRESS,DP_ID,DP_CODE,PARENT_DP_ID,PARENT_DP_CODE,SITE_ID,SITE_CODE,CREATE_TIME,EDIT_TIME,STATUS,INS_DATE,BAT_ID,AREA_ID)
                                          select CCP_ID,CCP_CODE,XBZ,INSTALLEDADDRESS,DP_ID,DP_CODE,PARENT_DP_ID,PARENT_DP_CODE,SITE_ID,SITE_CODE,CREATE_TIME,EDIT_TIME,STATUS,INS_DATE,BAT_ID,AREA_ID
                                          from '||stable||' where bat_id=:bat_id';
       execute immediate insertSql using bat_id;
       commit;
    end if;
   
  elsif dataType='usercard' then  --用户卡片
    if increment='ins' then--增量
       insertSql:='insert into iodso.gxzy_ods_user_card_temp select * from '||stable||' where bat_id=:bat_id';
       execute immediate insertSql using bat_id;
       commit;
       odso.data_check_usercard(bat_id,flag);
    else
       insertSql:='insert into odso.gxzy_ods_user_card( ACC_NUMBER,CCP_ID,CCP_CODE,DP_ID,DP_CODE,ADDRESS_ID,CREATE_TIME,EDIT_TIME,STATUS,INS_DATE,WRITE_TIME,BAT_ID,AREA_ID)
                                                 select ACC_NUMBER,CCP_ID,CCP_CODE,DP_ID,DP_CODE,ADDRESS_ID,CREATE_TIME,EDIT_TIME,STATUS,INS_DATE,WRITE_TIME,BAT_ID,AREA_ID
                                                 from '||stable||' where bat_id=:bat_id';
       execute immediate insertSql using bat_id;
       commit;
    end if;
   
  elsif dataType='address' then   --标准地址
     if increment='ins' then--增量
       insertSql:='insert into iodso.gxzy_ods_standard_address_temp select * from '||stable||' where bat_id=:bat_id';
       execute immediate insertSql using bat_id;
       commit;
       odso.data_check_adrress(bat_id,flag);
     else
       insertSql:='insert into odso.gxzy_ods_standard_address(COMBINE_ID,COMBINE_LEGACY_ID,ID1,LEGACY_ID1,NAME,ID2,LEGACY_ID2,NAME2,ID3,LEGACY_ID3,NAME3,ID4,LEGACY_ID4,NAME4,ID5,LEGACY_ID5,NAME5,ID6,LEGACY_ID6,NAME6,CREATE_TIME,EDIT_TIME,STATUS,INS_DATE,WRITE_TIME,BAT_ID,AREA_ID)
                                                       select COMBINE_ID,COMBINE_LEGACY_ID,ID1,LEGACY_ID1,NAME,ID2,LEGACY_ID2,NAME2,ID3,LEGACY_ID3,NAME3,ID4,LEGACY_ID4,NAME4,ID5,LEGACY_ID5,NAME5,ID6,LEGACY_ID6,NAME6,CREATE_TIME,EDIT_TIME,STATUS,INS_DATE,WRITE_TIME,BAT_ID,AREA_ID
                                                       from '||stable||' where bat_id=:bat_id';
       execute immediate insertSql using bat_id;
       commit;
     end if
     
    

  else
     flag :='false';
  end if;
  exception when others then
      flag:='false';
      rollback;
      raise;
end JK_DATA_CHECK_TABLE;

 

 

下面是在command window里面的执行语句,我搞好长时间才搞出来。

  1  declare

  2  v_out_test varchar2(10);

  3  begin

  4  JK_DATA_CHECK_TABLE(SRC_TABLE_NAME=>'SRM.GXZY_ODS_CCP',dataType => 'cpp',bat_id => 'oss_resource#5113',flag => v_out_test);

  5  end;

  6  /

这样就可以执行成功了

如果有异常也就会报些异常了

 

 

我们在来总结一下如何进行debuger

第一步:首先在存储过程的名字上右键点击 ——》test  我们就会看到一个界面 在左上角有个小的按钮就是用来调试的

第二步:要在下面的界面上输入所有用到的参数,除了输出参数以外。

第三步:这样我们就可以通过界面的按钮step into step over stepout 不过还有一个按钮式 step next exception下一个异常很有用处,如果你进行批量插入的话,只是中间有个异常,一步步执行肯定要累死,她的好处就在此,

第四步:还有我们想查找中间的变量的值的话,左下角有有个输入变量的地方,这样我们就可以随时查找变量的值了

还是没有myeclipse方便,不过做的已经很好了,能解决我们一般遇到的sql问题。 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
存储过程的开发调试是一项重要而复杂的任务,需要遵循一些最佳实践和技巧。首先,正确设定游标的返回类型是一项关键的实践。这样可以确保在存储过程执行后,游标返回的结果集能够被正确处理和使用。其次,异常处理也是一个需要特别注意的方面。在存储过程中,合理地处理异常可以保证程序的稳定性和可靠性。此外,合理使用临时表是一种常用的技巧。通过使用临时表,我们能够在存储过程中暂时存储数据,用于后续的处理和操作。最后,寻找并重新绑定非法的存储过程也是一个重要的实践。在开发过程中,我们经常会遇到存储过程无法正常执行的情况,这时就需要进行调试并重新绑定存储过程。 综上所述,存储过程的开发调试需要注意实践和技巧,包括正确设定游标的返回类型、异常处理、合理使用临时表和寻找并重新绑定非法的存储过程。这些方法和步骤将有助于提高存储过程的开发效率和准确性。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [DB2存储过程开发最佳实践](https://download.csdn.net/download/weixin_38714637/15535245)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Java企业报表管理系统源码](https://download.csdn.net/download/m0_55416028/88269629)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值