如何写一个bat文件,循环执行 oracle.package 要求:如何写一个bat文件,循环执行 oracle.package bat 接受一个参数。例如 传递给bat 2个带参数的变量(i,ID),bat 循环执行i次oracle.package(ID),每次循环并生成一个字符串:ID+"_nameWork".谢谢大虾们能帮帮我。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为什么要在bat里面循环呢?你直接再写一个package A,在A里面循环调用这个package不就行了? 因为 每进行一次循环 我就要调用一下外部的应用程序,所以想到了些bat -- 我以前写的一个例子,敬请参考:-- (1) D:\sqlldr\sqlldr_script.bat 其内容如下:@echo off & setlocal PATH %PATH;D:\app\Administrator\product\11.1.0\db_1\BIN;D:\sqlldr\call D:\sqlldr\getyesterday.batrem echo %result%rem echo %result:~0,4%%result:~5,2%%result:~8,2%copy D:\sqlldr\sohu-sms-mt-%result%-7258.txt D:\sqlldr\sohu-sms-mt.txtcopy D:\sqlldr\%result:~0,4%%result:~5,2%%result:~8,2%.txt D:\sqlldr\sina-sms-mt.txtsqlldr hll/szty2009hll control=sqlldr_sohu.ctl log=D:\sqlldr\log_bad\sohu-sms-mt%result%.log bad=D:\sqlldr\log_bad\sohu-sms-mt%result%.bad errors=1000sqlldr hll/szty2009hll control=sqlldr_sina.ctl log=D:\sqlldr\log_bad\sina-sms-mt%result%.log bad=D:\sqlldr\log_bad\sina-sms-mt%result%.bad errors=1000del D:\sqlldr\sohu-sms-mt.txtdel D:\sqlldr\sina-sms-mt.txtsqlplus hll/szty2009hll @D:\sqlldr\sql_script.sql-- *(2) D:\sqlldr\sql_script.sql 的内容如下:UPDATE Internalsyndata_sina u1SET u1.spname='新浪', u1.status=(case when u1.status='0' and u1.sendstatus='0' then 'DELIVRD' else u1.status end), u1.syndate= to_date(to_char(sysdate-1,'YYYY-MM-DD')||' '||nvl(times,'00:00:00'),'YYYY-MM-DD HH24:MI:SS'), u1.feeprice=100;COMMIT;UPDATE Internalsyndata_sohuSET spname='搜狐';COMMIT;INSERT INTO Internalsyndata(spname, linkid, mobile, productid, feeprice, status, channel, syndate, toicp, sendstatus)SELECT distinct t1.spname, t1.linkid, t1.mobile, t1.productid, t1.feeprice, t1.status, t1.channel, t1.syndate, t1.toicp, t1.sendstatusFROM Internalsyndata_sina t1WHERE NOT EXISTS ( SELECT 1 FROM Internalsyndata t2 --WHERE t2.syndate >= trunc(sysdate-1) -- AND t2.syndate < trunc(sysdate) WHERE t2.spname=t1.spname AND t2.linkid=t1.linkid AND t2.mobile=t1.mobile AND t2.productid=t1.productid AND t2.feeprice=t1.feeprice AND t2.status=t1.status AND t2.channel=t1.channel AND t2.syndate=t1.syndate AND t2.toicp=t1.toicp AND t2.sendstatus=t1.sendstatus );COMMIT;INSERT INTO Internalsyndata(spname, linkid, mobile, productid, feeprice, status, syndate, toicp)SELECT distinct t1.spname, t1.linkid, t1.mobile, t1.productid, t1.feeprice, t1.status, t1.syndate, t1.toicpFROM Internalsyndata_sohu t1WHERE NOT EXISTS ( SELECT 1 FROM Internalsyndata t2 -- WHERE t2.syndate >= trunc(sysdate-1) -- AND t2.syndate < trunc(sysdate) WHERE t2.spname = t1.spname AND t2.linkid = t1.linkid AND t2.mobile = t1.mobile AND t2.feeprice = t1.feeprice AND t2.status = t1.status AND t2.channel = t1.channel AND t2.syndate = t1.syndate AND t2.toicp = t1.toicp AND t2.sendstatus = t1.sendstatus );DELETE FROM Internalsyndata_sohu;DELETE FROM Internalsyndata_sina;COMMIT;EXIT;-- *(3) 同时 D:\sqlldr 目录下还有 getyesterday.bat 文件(用于获取昨天的日期),其内容如下:@echo off call :GetDayDiff %date:~0,10% -1 &goto :EOF:GetDayDiff call :Date2Day %1 days set/a days=%days%+%2 call :Day2Date %days% result rem echo %result%goto :EOF :Date2Day setlocal ENABLEEXTENSIONS for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do (set yy=%%a & set mm=%%b & set dd=%%c ) set /a dd=100%dd%%%100,mm=100%mm%%%100 set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2 set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633 endlocal&set %2=%j%&goto :EOF :Day2Date setlocal ENABLEEXTENSIONS set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5 set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10 (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%) endlocal&set %2=%yy%-%mm%-%dd%&goto :EOF -- *(4) D:\sqlldr\ 目录下还有文件 -- 形如:sohu-sms-mt-2010-05-17-7258.txt 的将要导入的数据文件,其内容如类似下:1066666620,13357883025,7258,05170213070200391991,DELIVRD,2010-05-17 02:13:15,951066666620,15061615109,7258,01474929684322039766,DELIVRD,2010-05-17 01:47:54,1001066666620,15061615109,7258,01480204659322021294,DELIVRD,2010-05-17 01:48:04,1001066666620,13553836658,7258,02131911590326327310,DELIVRD,2010-05-17 02:13:27,1001066666620,15916666860,7258,01461811677326218044,DELIVRD,2010-05-17 01:46:28,1001066666620,15916666860,7258,01451311611326211694,DELIVRD,2010-05-17 01:45:16,1001066666620,15916666860,7258,01453211595326213750,DELIVRD,2010-05-17 01:45:36,1001066666620,13504871142,7258,09044312002316274928,DELIVRD,2010-05-17 09:04:48,1001066666620,13547605681,7258,10144021676360317456,,2010-05-17 10:15:10,100-- *(6) D:\sqlldr 目录下还有类似于 20100611.txt 这样的文件,其格式如下:19:10:09,15121082604,19100328285320495128,0,0,106698887,900292,49212-- *(7) D:\sqlldr\sql_script.sql 文件中涉及的三张表,其建表代码如下: CREATE TABLE "HLL"."INTERNALSYNDATA_SINA" ( "SPNAME" VARCHAR2(40), "LINKID" VARCHAR2(40), "MOBILE" VARCHAR2(20), "PRODUCTID" VARCHAR2(20), "FEEPRICE" VARCHAR2(10), "CONTENT" VARCHAR2(100), "STATUS" VARCHAR2(10), "CHANNEL" VARCHAR2(20), "MSGID" VARCHAR2(60), "SYNDATE" DATE, "TOICP" VARCHAR2(20), "SENDSTATUS" VARCHAR2(20), "TIMES" VARCHAR2(10) ); CREATE TABLE "HLL"."INTERNALSYNDATA" ( "SPNAME" VARCHAR2(40), "LINKID" VARCHAR2(40), "MOBILE" VARCHAR2(20), "PRODUCTID" VARCHAR2(20), "FEEPRICE" VARCHAR2(10), "CONTENT" VARCHAR2(100), "STATUS" VARCHAR2(10), "CHANNEL" VARCHAR2(20), "MSGID" VARCHAR2(60), "SYNDATE" DATE DEFAULT SYSDATE, "TOICP" VARCHAR2(20), "SENDSTATUS" VARCHAR2(20), CONSTRAINT "PK_INTERNALSYNDATA" PRIMARY KEY ("SPNAME", "LINKID", "MOBILE") );-- 索引什么的,从略!-- 所有代码均提供,楼主可以去测试看看,再回过头来做你现在的这个问题就不难啦! oracle11g xmldom生成xml的信息问题(PLS-00201) ora-12560: tns: 协议适配器错误 oracle多表联查问题 Oracle数据库一个表中有一个字段是blob类型的,如何将blob中的数据导出成文件? 救命啊~!Oracle高手来看看!实在是太难解决了!!!(在线等待) ORACLE客户端超时断开,怎么办? 关于学习Oracle9i问题.. 请问oracle9i和oracle9i2的不同在什么地方 pl/sql中怎样删除文件中的数据 oracle 8 不支持join吗? 求助:oracle数据库服务器wa值较高! 求数据库高手解答疑惑!~
PATH %PATH;D:\app\Administrator\product\11.1.0\db_1\BIN;D:\sqlldr\
call D:\sqlldr\getyesterday.bat
rem echo %result%
rem echo %result:~0,4%%result:~5,2%%result:~8,2%
copy D:\sqlldr\sohu-sms-mt-%result%-7258.txt D:\sqlldr\sohu-sms-mt.txt
copy D:\sqlldr\%result:~0,4%%result:~5,2%%result:~8,2%.txt D:\sqlldr\sina-sms-mt.txt
sqlldr hll/szty2009hll control=sqlldr_sohu.ctl log=D:\sqlldr\log_bad\sohu-sms-mt%result%.log bad=D:\sqlldr\log_bad\sohu-sms-mt%result%.bad errors=1000
sqlldr hll/szty2009hll control=sqlldr_sina.ctl log=D:\sqlldr\log_bad\sina-sms-mt%result%.log bad=D:\sqlldr\log_bad\sina-sms-mt%result%.bad errors=1000
del D:\sqlldr\sohu-sms-mt.txt
del D:\sqlldr\sina-sms-mt.txt
sqlplus hll/szty2009hll @D:\sqlldr\sql_script.sql-- *(2) D:\sqlldr\sql_script.sql 的内容如下:
UPDATE Internalsyndata_sina u1
SET u1.spname='新浪',
u1.status=(case when u1.status='0' and u1.sendstatus='0' then 'DELIVRD' else u1.status end),
u1.syndate= to_date(to_char(sysdate-1,'YYYY-MM-DD')||' '||nvl(times,'00:00:00'),'YYYY-MM-DD HH24:MI:SS'),
u1.feeprice=100;
COMMIT;
UPDATE Internalsyndata_sohu
SET spname='搜狐';
COMMIT;
INSERT INTO Internalsyndata(spname, linkid, mobile, productid, feeprice, status, channel, syndate, toicp, sendstatus)
SELECT distinct t1.spname, t1.linkid, t1.mobile, t1.productid, t1.feeprice, t1.status, t1.channel, t1.syndate, t1.toicp, t1.sendstatus
FROM Internalsyndata_sina t1
WHERE NOT EXISTS ( SELECT 1
FROM Internalsyndata t2
--WHERE t2.syndate >= trunc(sysdate-1)
-- AND t2.syndate < trunc(sysdate)
WHERE t2.spname=t1.spname
AND t2.linkid=t1.linkid
AND t2.mobile=t1.mobile
AND t2.productid=t1.productid
AND t2.feeprice=t1.feeprice
AND t2.status=t1.status
AND t2.channel=t1.channel
AND t2.syndate=t1.syndate
AND t2.toicp=t1.toicp
AND t2.sendstatus=t1.sendstatus );
COMMIT;
INSERT INTO Internalsyndata(spname, linkid, mobile, productid, feeprice, status, syndate, toicp)
SELECT distinct t1.spname, t1.linkid, t1.mobile, t1.productid, t1.feeprice, t1.status, t1.syndate, t1.toicp
FROM Internalsyndata_sohu t1
WHERE NOT EXISTS ( SELECT 1
FROM Internalsyndata t2
-- WHERE t2.syndate >= trunc(sysdate-1)
-- AND t2.syndate < trunc(sysdate)
WHERE t2.spname = t1.spname
AND t2.linkid = t1.linkid
AND t2.mobile = t1.mobile
AND t2.feeprice = t1.feeprice
AND t2.status = t1.status
AND t2.channel = t1.channel
AND t2.syndate = t1.syndate
AND t2.toicp = t1.toicp
AND t2.sendstatus = t1.sendstatus );
DELETE FROM Internalsyndata_sohu;
DELETE FROM Internalsyndata_sina;
COMMIT;
EXIT;-- *(3) 同时 D:\sqlldr 目录下还有 getyesterday.bat 文件(用于获取昨天的日期),其内容如下:
@echo off
call :GetDayDiff %date:~0,10% -1 &goto :EOF:GetDayDiff
call :Date2Day %1 days
set/a days=%days%+%2
call :Day2Date %days% result
rem echo %result%
goto :EOF :Date2Day
setlocal ENABLEEXTENSIONS
for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do (set yy=%%a & set mm=%%b & set dd=%%c )
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %2=%j%&goto :EOF :Day2Date
setlocal ENABLEEXTENSIONS
set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%-%mm%-%dd%&goto :EOF -- *(4) D:\sqlldr\ 目录下还有文件
-- 形如:sohu-sms-mt-2010-05-17-7258.txt 的将要导入的数据文件,其内容如类似下:
1066666620,13357883025,7258,05170213070200391991,DELIVRD,2010-05-17 02:13:15,95
1066666620,15061615109,7258,01474929684322039766,DELIVRD,2010-05-17 01:47:54,100
1066666620,15061615109,7258,01480204659322021294,DELIVRD,2010-05-17 01:48:04,100
1066666620,13553836658,7258,02131911590326327310,DELIVRD,2010-05-17 02:13:27,100
1066666620,15916666860,7258,01461811677326218044,DELIVRD,2010-05-17 01:46:28,100
1066666620,15916666860,7258,01451311611326211694,DELIVRD,2010-05-17 01:45:16,100
1066666620,15916666860,7258,01453211595326213750,DELIVRD,2010-05-17 01:45:36,100
1066666620,13504871142,7258,09044312002316274928,DELIVRD,2010-05-17 09:04:48,100
1066666620,13547605681,7258,10144021676360317456,,2010-05-17 10:15:10,100-- *(6) D:\sqlldr 目录下还有类似于 20100611.txt 这样的文件,其格式如下:19:10:09,15121082604,19100328285320495128,0,0,106698887,900292,49212-- *(7) D:\sqlldr\sql_script.sql 文件中涉及的三张表,其建表代码如下: CREATE TABLE "HLL"."INTERNALSYNDATA_SINA"
( "SPNAME" VARCHAR2(40),
"LINKID" VARCHAR2(40),
"MOBILE" VARCHAR2(20),
"PRODUCTID" VARCHAR2(20),
"FEEPRICE" VARCHAR2(10),
"CONTENT" VARCHAR2(100),
"STATUS" VARCHAR2(10),
"CHANNEL" VARCHAR2(20),
"MSGID" VARCHAR2(60),
"SYNDATE" DATE,
"TOICP" VARCHAR2(20),
"SENDSTATUS" VARCHAR2(20),
"TIMES" VARCHAR2(10)
); CREATE TABLE "HLL"."INTERNALSYNDATA"
( "SPNAME" VARCHAR2(40),
"LINKID" VARCHAR2(40),
"MOBILE" VARCHAR2(20),
"PRODUCTID" VARCHAR2(20),
"FEEPRICE" VARCHAR2(10),
"CONTENT" VARCHAR2(100),
"STATUS" VARCHAR2(10),
"CHANNEL" VARCHAR2(20),
"MSGID" VARCHAR2(60),
"SYNDATE" DATE DEFAULT SYSDATE,
"TOICP" VARCHAR2(20),
"SENDSTATUS" VARCHAR2(20),
CONSTRAINT "PK_INTERNALSYNDATA" PRIMARY KEY ("SPNAME", "LINKID", "MOBILE")
);-- 索引什么的,从略!-- 所有代码均提供,楼主可以去测试看看,再回过头来做你现在的这个问题就不难啦!