代码之家  ›  专栏  ›  技术社区  ›  Landon Statis

从PL/SQL返回值

  •  0
  • Landon Statis  · 技术社区  · 8 年前

    所以,我们有一个shell脚本,它需要调用一个匿名块,然后接收一个值。匿名块大约有100行,所以我们把它放在一个文件中,因此对于SQL*Plus,它被称为:

    @/directory_path/anonymous_block "'param1'" "'param2'"

    是的,我们传递了几个参数。最后,我们有一个 DBMS_OUTPUT.PUT_LINE.......

    所以,我们的问题是,如何把它带回壳牌?我们已经尝试过各种类似的代码:

    proc=TEMPLATE1_MV<BR>
    code=513
    
    x=`print "
      set heading off feedback off verify off timing off
      @/u01/sql/stock_rpt_stats '$code' '$proc';
      exit" | sqlplus -s $user/$pass`
    
    y=`echo $x | awk '{print $1}'`<BR>
    printf "HERE: $y\n"
    

    但没有运气,只有错误。

    如果它只包含一个直接的SQL:

    SELECT TRUNC(SYSDATE) FROM dual;
    

    这很好,但不引用包含SQL的文件。

    任何有想法的人都会很棒。提前谢谢。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Kaushik Nayak    8 年前

    你试过添加 SET SERVEROUTPUT ON ?

    我通常更喜欢跑步 sqlplus 使用herdeoc方法并将块的结果传递给这样的变量,对我来说效果很好。

    scripts-$cat ./sqlplus_exec.sh
    #!/bin/bash
    output=$(sqlplus -s  $user/$pass <<INP
    set heading off feedback off verify off timing off
    set serveroutput on
    @print_output.sql
    INP
    )
    
    echo "$output"
    

    这是SQL文件

    scripts-$cat print_output.sql
    BEGIN
      DBMS_OUTPUT.PUT_LINE('HELLO WORLD');
    END;
    /
    
    scripts-$./sqlplus_exec.sh
    HELLO WORLD