我可以使用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变量中捕获函数的返回值。
答案 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()