要求:如何写一个bat文件,循环执行 oracle.package bat 接受一个参数。
例如 传递给bat 2个带参数的变量(i,ID),bat 循环执行i次oracle.package(ID),每次循环并生成一个字符串:ID+"_nameWork".谢谢大虾们能帮帮我。

解决方案 »

  1.   

    为什么要在bat里面循环呢?你直接再写一个package A,在A里面循环调用这个package不就行了?
      

  2.   

     因为 每进行一次循环 我就要调用一下外部的应用程序,所以想到了些bat  
      

  3.   

    -- 我以前写的一个例子,敬请参考:-- (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.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")
       );-- 索引什么的,从略!-- 所有代码均提供,楼主可以去测试看看,再回过头来做你现在的这个问题就不难啦!