.Bat、Cmd批处理文件

详解 Oracle bat 批处理执行 SQL 文件的方法

    bat批处理文件调用独立的sql文件和数据库中的存储过程。

(1)bat文件调用sql文件

1)、建立sql文件(log.sql)。

2)、建一个bat批处理文件(log.bat)。

ex:

 log.sql文件

createtablelog

(

  PROBLEMID    VARCHAR2(40),

  PROBLEMNAME  VARCHAR2(260),

  PROBLEMLEVEL VARCHAR2(40),

  PROBLEMORDER VARCHAR2(260),

  PARENTID     VARCHAR2(40),

  ROOTTYPEDESC VARCHAR2(260),

  IFLEAF       VARCHAR2(40),

  MEMO         VARCHAR2(1000),

  IFVALID      VARCHAR2(40),

  ROOTTYPE     VARCHAR2(20)

);

exit;

log.bat文件

@echo off

sqlplus cssp/cssp@gxcssp @H:\bat_sql\log.sql > log.txt

exit

注:log.txt日志文件。双击log.bat执行,就创建了表log

Ex: sqlplus cgs11/[email protected]:1521/oral11 @c:\bat_sql\file.sql

cgs11用户名,cgs11密码,127.0.0.1:1521/oral11数据库地址。

(2)bat文件调用数据库中的存储过程

这个调用过程和上面的调用过程原理是一样的,在此就做个简单的说明。

    假设数据库中一个存储过程,名称为Produce_log

    只需要修改独立的sql文件如下即可:

    sqlplus cssp/cssp@gxcssp @:Produce_log> log.txt
    ex: @echo off

sqlplus cgs11/[email protected]:1521/oral11 @MS_LxsLhzj.sql

存储过程:MS_LxsLhzj.sql

-------将2007年至现在的免税人员(留学人员,来华专家)过滤到jm_ygc_nsr表中。执行此脚本前,需建立省局jm_ygc_nsr表。对省局数据过滤。

declare

   s1 int;

 v_temp JM_YGC_NSR%ROWTYPE;

   -- 检索记录

   CURSOR msnsr IS

        select  a.sbb_bs ,a.nsr_mc,a.nsr_zjzl_dm,a.nsr_zjhm, a.nsr_yb,a.nsr_dz,a.nsr_dh,b.JMTJ_DM,a.GDRQ,a.cpxh,a.cldl_dm,a.clzl_dm,a.cpsm,a.dw,a.zw,a.pql,d.FDJHM,a.vin,a.fdjhm,d.GZRQ,a.swjg_dm,SUBSTR(cjwz,12,9),'S' from gd_nssb a,gd_nssb_ms b,dm_swjg c,gd_clda d where a.sbb_bs=b.sbb_bs

and a.da_bs=D.DA_BS and A.SWJG_DM=C.SWJG_DM

and to_date('20070101000000','yyyymmddhh24miss')<JDRQ and (b.jmtj_dm='222503'  or b.jmtj_dm='222504') and d.da_zt='00';

 

 begin

     ---删除免税表中原来记录

        delete  from jm_ygc_nsr;

  --打开游标

  open msnsr;

    s1:=0;

   loop

    s1:=s1+1;

    -----开始写入

  begin

    v_temp := null;

        fetch msnsr into v_temp.msxx_bs,v_temp.nsr_mc,v_temp.nsr_zjzl_dm, v_temp.nsr_zjhm, v_temp.nsr_yb,v_temp.nsr_dz,v_temp.nsr_dh,v_temp.jm_tj,v_temp.rece_time,v_temp.VEH_XH,v_temp.VEH_LB,   

 v_temp.VEH_LX, v_temp.VEH_XZJ,v_temp.VEH_DW,v_temp.VEH_ZW, v_temp.VEH_PQL, v_temp.VEH_FP,v_temp.VEH_SBDH,v_temp.VEH_FDJH,v_temp.GC_DATE,v_temp.sljg_dm,v_temp.sljg_dm_sj,v_temp.sendstate;

        exit when msnsr%notfound ;

    --写入免税人员信息表数据

      

       insert into jm_ygc_nsr(msxx_bs,nsr_mc,nsr_zjzl_dm, nsr_zjhm, nsr_yb,nsr_dz,nsr_dh,jm_tj,rece_time,VEH_XH,VEH_LB,  

 VEH_LX, VEH_XZJ,VEH_DW,VEH_ZW, VEH_PQL, VEH_FP,VEH_SBDH,VEH_FDJH,GC_DATE,sljg_dm,sljg_dm_sj,sendstate)

       values

    (v_temp.msxx_bs,v_temp.nsr_mc,v_temp.nsr_zjzl_dm, v_temp.nsr_zjhm, v_temp.nsr_yb,v_temp.nsr_dz,v_temp.nsr_dh,v_temp.jm_tj,v_temp.rece_time,v_temp.VEH_XH,v_temp.VEH_LB,  

 v_temp.VEH_LX, v_temp.VEH_XZJ,v_temp.VEH_DW,v_temp.VEH_ZW, v_temp.VEH_PQL, v_temp.VEH_FP,v_temp.VEH_SBDH,v_temp.VEH_FDJH,v_temp.GC_DATE,v_temp.sljg_dm,v_temp.sljg_dm_sj,'S');

     ----出现异常,结束此条记录,然后继续写入

     exception

     when others then

       null;

       end;

----50条记录提交一次

   if s1=50 then

     s1:=0;

      commit;

     end if;

   end loop;

        dbms_output.put_line('成功写入记录');

      commit;

   close msnsr;  ---关闭游标

 

     end;

说明:

%TYPE:属性的一种方式是在变量声明中使用。%ROWTYPE是用于取得表或游标中的字段类型。  

%ROWTYPE 使用%ROWTYPE属性可以声明一个基于表或游标的行对象,也称为记录对象,

%TYPE是跟表中的字段的类型一致,是变量类型.而%ROWTYPE是跟表中的行类型一致,是record类型.   

你可能感兴趣的:(sql,数据库,exception,Date,cmd,存储)