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

来源:互联网 发布:安卓6.0的数据库在哪 编辑:程序博客网 时间:2024/06/07 06:03

    今天主管让我在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问题。 

 

 

原创粉丝点击