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类型.