如何在powershell变量中捕获PL SQL函数的输出?

时间:2018-04-23 15:56:00

标签: oracle powershell plsql sqlplus

我可以使用powershell和sqlplus连接到远程oracle数据库。此外,我能够将数据库中执行的命令/查询的输出捕获到powershell变量中。 PFB示例。

$username ="hr"
$password ="hr"
$tnsalias ="orcl"
$outputfilepath="C:\Users\Desktop"

 $sqlquery=@"
 set serveroutput off
 set feedback off
 set heading off
 set echo off
 select sysdate from dual;
"@

在oracle数据库中运行以上查询,如下所示

 $xval=$sqlquery | sqlplus -silent $username/$password@$tnsalias
 echo $xval

输出

23-APR-18

问题是当我运行PL SQL函数时,如下所示。

    $sqlquery=@"
     set serveroutput off
     set feedback off
     set heading off
     set echo off
     declare
     x varchar2:=null;     
     exec x:=MYTEST_FUN('a','b');
    "@

$xval变量中没有捕获值,函数也没有运行。

如何执行函数,以便在powershell变量中捕获函数的返回值。

3 个答案:

答案 0 :(得分:2)

一种方法是在set serveroutput on

中制作DBMS_OUTPUT.PUT_LINE()并使用BEGIN..END

另一种选择是使用sqlplus'PRINT命令。

set serveroutput off
set feedback off
set heading off
set echo off
variable x VARCHAR2  --declare bind variable x
exec  :x := MYTEST_FUN('a','b'); --a colon before x needed.
PRINT x;

答案 1 :(得分:0)

为我工作:

$sqlQuery = @"
    set serveroutput off
    set feedback off
    set heading off
    set echo off
    variable x NUMBER;
        select count(*) into :x from TABLE;
    PRINT x;
    exit
"@
($sqlQuery | sqlplus -S user/pass | Write-Output | Out-String).Trim()

答案 2 :(得分:0)

最简洁的词条:

$dateVar = ("set heading off
            select sysdate from dual;" | sqlplus -s $yourConnectionString | Out-String).Trim()