请问在Windows环境下,现有脚本文件excute_procedure.sql,执行一个带返回值的Procedure ,通过Bat文件调用Procedure文件如下:
CREATE OR REPLACE PROCEDURE CHECK_YEAR
(
i_returncode OUT NUMBER
)
IS
BEGIN
IF TO_CHAR(SYSDATE,'YYYY') = ’2007‘ THEN
i_returncode = 0;
ELSE
i_returncode = 1;
END IF;
END;
/我想根据返回值来执行不同的操作,比如“如果返回值是‘0’,在屏幕上输出‘This Year’;如果返回值是‘1’,在屏幕上输出‘Other Year’”.请问如何写脚本文件和Bat文件?

解决方案 »

  1.   

    你是这么调用的?
    直接写pl/sql的output呢?
      

  2.   

    因为要调用多个Procedure,如果其中一个出错就中断执行。
    客户要求用批处理来做~~~客户就是爷,没办法我现在批处理调用没问题,但就是没法取得返回值并做处理~~
      

  3.   

    你的批处理是怎么作的?》
    是通过BAT文件来调用SQLPLUS吗?如果是的话 把你的批处理中调用SQLPLUS后的语句用一个PLSQL块来操作  定义几个变量
    然后加些IF判断没有做过OS调用脚本的东西  不知道是否可以实现?把你的批处理脚本发出来吧
      

  4.   

    批处理很简单
    sqlplus user/password@Database @D:\excute_procedure.sqlRESULT_CODE=$?if $RESULT_CODE == “0” echo “This   Year”
    if $RESULT_CODE == “1” echo “Other   Year’”
    这样Procedure可以执行,但从RESULT_CODE=$?这一句开始就报错了~~
    脚本文件是
    VAR RTN_CD NUMBER;
    SET SERVEROUTPUT ON;
    EXEC CHECK_YEAR(:RTN_CD);
    EXIT :RTN_CD;就是想请教一下怎么在Bat里面得到返回值并判断~
      

  5.   

    好像是可以,你查一下bat編寫的語法
      

  6.   

    sqlplus   user/password@Database   @D:\excute_procedure.sql RESULT_CODE=$? sqlplus和cmd是两种不同的环境,如果你的脚本中没有quit退出的话,后面的bat命令你前面都需要加上host
    try again
      

  7.   

    能有高手写一个Sample吗??
    要求很简单,就是在Bat里面通过sqlplus去执行Procedure运行脚本,并根据返回值不同在屏幕上显示不同的内容~~LS的兄弟, quit 和 host try again要写在哪里呢?
      

  8.   

    http://topic.csdn.net/u/20071112/10/5a5e1b1f-5c9c-4227-9eec-d3c9e9570e74.html
    举个例子,现在有个存储过程p,它有两个参数v1,v2,v1是输入参数,v2是输出参数(类型是整型),现在想把执行p的结果v2返回给bat,那么准备一个sql脚本,内容如下 
    var   i   number 
    exec   p( 'INPUT ',:i) 
    column   return_code   new_value   rcode 
    select   :i   return_code   from   dual; 
    exit   rcode bat的内容如下 
    sqlplus   username/password@servicename   @SQL脚本名 
    echo   %ERRORLEVEL%