oracle

SQL*Plusの戻り値を使いPowerShellへ値を渡す(Windows環境)

以前Linux環境を想定した記事を書いたのですが、Windows環境(PowerShell)でも同様な事を実現する事があったので今回記事としました。基本的にはLinux環境と同じですが新たな発見もありました。windows環境の場合、Linux環境ではの『シェルスクリプトの終了ステータスは0~255の範囲内になる』という制限が無くなります。実際に検証してみたところ-214748364~2147483647の範囲値をpowershellで受け取れました。(どうやらint型の範囲内らしいです)Linux環境では『何かのカウント結果を返却する』という使い方はほぼできませんでしたが、Windows環境ならこれができそうですね。当然ですが0~255以外の数字を返す実装にしてしまうと「Windows用」になってしまいLinux環境へ持っていけなくなるのでご注意ください。

1.以下の内容でSQLファイル(test.sql)を作成します

SQLファイルはShift_JISで作成してください。

set feedback off
set serveroutput on

var rsts NUMBER;
declare
    begin
        -- PowerShellの場合bashと異なり255を超えた値でもOK
        select 2147483647 into :rsts from dual;
        --dbms_output.put_line('rsts:'||:rsts );
    end;
/
exit :rsts;
2.sqlplusの実行

PowerShellからsqlplusへ外部SQLファイルを渡す場合「@」を含めて『ダブルクォーテーション』もしくは『シングルクォーテーション』で囲む必要があります。PowerShellでは「@」に特別な意味(配列宣言で利用します)があるためです。蛇足ですが同じWindows環境でもdos窓で利用する際はこの囲みは不要です。

## @を使いSQLファイルを指定する方法
PS C:\temp\sample01> sqlplus -s sooni/sooni@vm013/orau8  '@test.sql'
PS C:\temp\sample01> echo $LastExitCode
2147483647
## Get-contentコマンドレットでSQLを渡す方法(値を-2147483648に書き換えました)
PS C:\temp\sample01> get-content test.sql | sqlplus -s sooni/sooni@vm013/orau8
PS C:\temp\sample01> echo $LastExitCode
-2147483648
## 
PS C:\temp\sample01> get-content test.sql | sqlplus -s sooni/sooni@vm013/orau8
PS C:\temp\sample01> echo $?
False

sqlplusの終了コードは$LastExitCodeに入ってきます。powershellでも「$?」が利用できますがこちらはLinuxの場合と動作が違いTrue/Falseとなります。

おまけ dos窓でも実行してみます

dos窓ではsqlplusの戻り値は「 %ERRORLEVEL% 」に入っています。

C:\temp\sample01>type test.sql
set feedback off
set serveroutput on
var rsts NUMBER;
declare
        begin
                select -2147483648 into :rsts from dual;
        end;
/
exit :rsts;


C:\temp\sample01>sqlplus -s sooni/sooni@vm013/orau8 @test.sql

C:\temp\sample01>echo %ERRORLEVEL%
-2147483648

C:\temp\sample01>  
スポンサーリンク
タイトルとURLをコピーしました