需要写个自动发布程序,用.sh。在里面调用sqlplus发布建表、存储过程、函数等,并且编译,问题是我如何取得sql执行的返回值呢?望赐教

解决方案 »

  1.   

    cat test.shsqlplus -S / as sysdba << !
    set heading off
    col today noprint
    column today new_val dat
    select to_char( sysdate, 'yyyy-mm-dd') today from dual;
    host echo 'today is ' &dat
    exit;
    exit;
    !test.sh
    today is  2010-01-25
      

  2.   

    如果我的语句都是create table/procedure这样的语句呢?会有返回值么?
      

  3.   

    sqlplus也会有返回消息如:
    表已创建。shell命令有执行结果状态值,sqlplus没做过这样的尝试,不晓得怎么捕捉。
      

  4.   

    利用sqlplus spool将执行的控制台信息输出到一个日志文件就行了
    sql>spool test.log
    sql>....
    sql>spool off
      

  5.   

    呵呵 我也想到输出到一个日志里面 然后去日志里面查找有没有类似于ora-的方法,除此以外呢,有没有跟直接的方法呢
      

  6.   

    http://blog.chinaunix.net/u2/78845/showart_2009496.htmlFYI
      

  7.   

    直接把他给打印出来就行了function GetTimeMargin
    {sqlplus /nolog  <<_EOF_ |grep "###" >tmp.ini
    connect $userid
    set serveroutput on ;
    set head off;
    set linesize off;
    declare 
      v_result number(12);
    begin
        select abs(ceil((to_date('$1','yyyymmddhh24miss') - to_date('$2','yyyymmddhh24miss'))*1440))
        into v_result from dual;    dbms_output.put_line('###'||v_result);
    end ;
    /
    _EOF_echo `more tmp.ini|awk '{print substr($0,index($0,"###")+3,length($0)-index($0,"###")-2)}'`
    rm tmp.ini
    }