4

目前我正在使用

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

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

4

3 回答 3

1

我终于用了这个,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
    +`

注意:那些是'不是'

于 2013-09-24T13:02:08.350 回答
1
  1. 将 DBMS_OUTPUT.PUT_LINE 添加到您的过程并打印值
  2. 运行 SQL*Plus
  3. 连接到甲骨文
  4. 启动阀芯
  5. 运行程序
  6. 停止阀芯
  7. 退出 SQL*Plus
  8. 从文件中读取值

像这样的东西:

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 来读取值。

于 2013-08-28T21:32:26.657 回答
0

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

于 2013-08-28T10:35:38.913 回答