2017-02-01 86 views
0

動的にスプールファイル名を指定する必要があり、sqlplusを呼び出すときにパラメータを渡す必要があります。以下は私が試したものですsqlplus動的スプールファイル名

echo exit | sqlplus "{{ Oracle_username }}/ {{ Oracle_pwd}} @(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host={{ Oracle_HostName }})(Port=1521))(CONNECT_DATA=(SID= {{Oracle_SID }})))" @Script.sql 'AppName' 'DatabaseName' 'ObjectType' 

ここで私はアプリケーション名、データベース名とオブジェクトタイプを動的に渡そうとしました。 SQLPLUSのステップを実行する前に、私は.Belowは私script.sqlがどのように見えるかです(アプリケーション名、データベース名、オブジェクト・タイプは、すべてのフォルダであり、それはそれぞれのアプリケーションによって異なります)動的にフォルダを作成します。

SPOOL &&AppName/&&DatabaseName/&&ObjectType/Output.csv 
    <<SQL Script>> 
    SPOOL OFF 

このdoenst work。誰かが何を変更する必要があるか教えてもらえますか?

+0

は何を「動作しない」ん下のように試してみてください - 何が起こりますか?あなたは代替変数をどこかに定義していますか? –

+0

上記のようにパラメータを渡してスプールすると、Outputはエクスポートされません。パラメータを指定しないと、スクリプトを実行すると動作します。例:SPOOL AppName/Databasename/Output.csv。私はAnsibleプレイブックからこれらのステップをすべて実行しています。私はこのすべての値を別のvarファイルに宣言します。 –

答えて

0

あなたは、あなたのスクリプトへの引数としてごスプールファイルのパスと名前を形成する値を渡しているが、あなたは、位置パラメータとしてそれらを参照する必要があります。

SPOOL &1/&2/&3/Output.csv 

それとも、するつもりなら位置パラメータから設定する独自の変数を定義することができ、何か他のもの、のためにそれらを再利用:

DEFINE AppName=&1 
DEFINE DatabaseName=&2 
DEFINE ObjectType=&3 

SPOOL &&AppName/&&DatabaseName/&&ObjectType/Output.csv 

スプールファイルパスを使用すると、スクリプトを実行するときにいるディレクトリからの相対になります。そうでない場合は、spoolコマンドの最初の置換変数の前にルートを置きます。どちらの形式を使用してもかまいません。


あなたがそれをエコーする必要はありませんので、また、あなたの.sqlファイルにexitを含めることができます。コマンドラインですべての接続情報を渡すのではなく、TNSエイリアスを使用することもできます.SIDではなくサービス名を使用できる場合は、簡単な接続構文を使用できます。

sqlplus username/[email protected]//hostname:1521/service_name @Script.sql 'AppName' 'DatabaseName' 'ObjectType' 
+0

@@アレックス - これは私の問題を解決するようだ。私はそれを完全に自動化したいので、SPOOL && 1 &&& 2/&&&3/Output.csvオプションを与えてから、sqlplusでパラメータを渡しました(上記と同じです)。しかし、出力はエクスポートされません。そして現在、Ansibleですべてを実行しているので、TNSに詳細を追加していません。 –

0

は、環境変数としてごappnameに、dbnameは、OBJECTTYPE年代を設定し、意味

[[email protected] ~]$ export app_name=/stage 
[[email protected] ~]$ export database_name=PSES 
[[email protected] ~]$ sqlplus/as sysdba 

SQL*Plus: Release 11.2.0.3.0 Production on Wed Feb 1 12:04:08 2017 

Copyright (c) 1982, 2011, Oracle. All rights reserved. 

Connected to: 
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production 
With the Partitioning, OLAP, Data Mining and Real Application Testing options 

SQL> spool $app_name/$database_name/out.csv 
SQL> select * from dual; 

D 
- 
X 

SQL> spool off; 
SQL> exit 
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production 

[[email protected] ~]$ ls -l /stage/PSES/out.csv 
-rw-r-----. 1 oracle oinstall 286 Feb 1 12:04 /stage/PSES/out.csv 
+0

@@ Jayaprakash - 私の要求通り、環境変数として設定することはできません。私は、複数のデータベースにSQLスクリプトを実行し、各出力を別のフォルダに保存する必要があります。それは私がスプールで動的パラメータを与えた理由です。それは完全に自動でなければなりません。したがって&& AppNameを使用しました –