写了一个造数据的存储过程
我想用批处理 调用存储过程 
BAT内容:
sqlplus NEXCOSMS/NEXCOSMS@NEXCOSMS @SQL\SP_H_MESSAGE\H_MESSAGE.sqlsql语句内容
spool H_MESSAGE.log
    DEFINE insertDateCount = &插入件数
    DEFINE V_SLEEPNUM = &暂停时件数
  DEFINE SLEEPTIME = &暂停时间
   /*因为我插入的数据量会很大 所以提供了暂停功能*/
    SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') AS 更新前時間 FROM DUAL;
    SELECT TO_CHAR(COUNT(1)) AS 更新前数据条数 FROM H_MESSAGE1;
    DECLARE 
        STR_MSG VARCHAR2(256);
BEGIN
    STR_MSG := '';
    -- 存储过程 第一个参数 是插入件数,第二个暂停时件数 第三个暂停时间 第四个 异常错误信息【返回】
    DATASEIZOU.H_MESSAGE_INSERT(&&insertDateCount ,&&V_SLEEPNUM,&&SLEEPTIME,STR_MSG);
    /*就在这里 我怎么能把返回的STR_MSG值 写在log里面啊,也就是说怎么把begin。。end 中变量的值传到外面的变量里面*/
    COMMIT;
END;/
    SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') AS 更新後時間 FROM DUAL;  
    SELECT TO_CHAR(COUNT(1)) AS 更新後数据件数 FROM H_MESSAGE1;
spool off
exit;

解决方案 »

  1.   

    你这样的方式不用define,define是替代变量,是不能实现你的这个功能的你可以用variable,绑定变量来实现
    SQL> variable v_s varchar2(1000);
    SQL> begin
      2  :vs := 123;
      3  end;
      4  /以上就是在plsql里赋值了然后在sqlplus可以
    SQL> print :v_s;
    或者
    SQL> select :v_s from dual;来显示。
      

  2.   

    variable STR_MSG varchar2;spool 
        H_MESSAGE.log
        DEFINE insertDateCount = &插入件数
        DEFINE V_SLEEPNUM = &暂停时件数
      DEFINE SLEEPTIME = &暂停时间
      /*因为我插入的数据量会很大 所以提供了暂停功能*/
        SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') AS 更新前時間 FROM DUAL;
        SELECT TO_CHAR(COUNT(1)) AS 更新前数据条数 FROM H_MESSAGE1;
    BEGIN
        STR_MSG := '';
        -- 存储过程 第一个参数 是插入件数,第二个暂停时件数 第三个暂停时间 第四个 异常错误信息【返回】
        DATASEIZOU.H_MESSAGE_INSERT(&&insertDateCount ,&&V_SLEEPNUM,&&SLEEPTIME, :STR_MSG);
        /*就在这里 我怎么能把返回的STR_MSG值 写在log里面啊,也就是说怎么把begin。。end 中变量的值传到外面的变量里面*/
        COMMIT;
    END; print STR_MSG;