在命令提示符中捕获PL / SQL过程RETURN值?

时间:2013-08-28 09:33:30

标签: sql oracle plsql command-prompt sqlplus

目前我正在使用

%testvar%=sqlplus usr/password@schema @test.sql
echo %testvar%

其中test.sql使用BEGIN END块调用该过程,并将返回的值保存在名为x的字符串变量中,现在如何将其返回到命令提示符?

3 个答案:

答案 0 :(得分:0)

过程只能通过OUT参数返回值,但函数可以返回一个可以存储在变量中的值。我不确定你是如何尝试通过一个程序返回值的,但是如果你编写了一个函数,那么你想要做的事情似乎会更好。

答案 1 :(得分:0)

  1. 将DBMS_OUTPUT.PUT_LINE添加到您的过程并打印值
  2. 运行SQL * Plus
  3. 连接到oracle
  4. 启动假脱机
  5. 运行程序
  6. 停止假脱机
  7. 退出SQL * Plus
  8. 从文件中读取值
  9. 这样的事情:

    sqlplus /NOLOG
    SQL> CONNECT user/password@alias
    SQL> SET SERVEROUTPUT ON
    SQL> spool /tmp/proc_result.txt
    SQL> BEGIN
    2    DBMS_OUTPUT.PUT_LINE('hello_world');
    3    END;
    4    /
    hello_world
    SQL> spool off
    SQL> DISCONNECT
    SQL> EXIT
    

    此时你想使用shell来读取值。

答案 2 :(得分:0)

我终于使用了这个,PS我必须从目录名中获取映射的目录路径: 这里$ 1是用户名/密码@ schema

    var=`sqlplus $1  <<+ | grep "Delimeter!*" | sed -n -e '/\[[^]]/s/^[^[]*\[\([^]]*\)].*$/\1/p'
    SET SERVEROUT ON
    SET ECHO OFF
    SET LINESIZE 4000
    DECLARE
      A VARCHAR2(400);
    BEGIN
        SELECT directory_path into A from all_directories where directory_name='$input_dir';
dbms_output.put_line( 'Delimeter! [' || A || ']' );
    END;
    /
    exit
    +`

注意:这些是`而不是'

相关问题