web-dev-qa-db-ja.com

Oracle SQL Developerで相対パスを使用してスクリプトを実行します

最初に、この質問はOracle SQL Developer 3.2に関係し、SQL * PlusやiSQLなどには関係しません。たくさんの検索を実行しましたが、正解は見つかりませんでした。

自動化しようとしているスクリプトのコレクションがいくつかあります(ところで、私のSQLエクスペリエンスはかなり基本的で、ほとんどがMSベースです)。私が抱えている問題は、それらを相対パスで実行することです。たとえば、次の設定を想定します。

scripts/A/runAll.sql
       | /A1.sql
       | /A2.sql
       |
       /B/runAll.sql
         /B1.sql
         /B2.sql

次のようなファイルscripts/runEverything.sqlが欲しいのですが。

@@/A/runAll.sql
@@/B/runAll.sql

scripts/A/runAll.sql:

@@/A1.sql
@@/A2.sql

"@@"は、SQL * Plusでの相対パスを意味します。

私は変数を作ることでだまされましたが、あまり運がありませんでした。 '&1'を使用してルートディレクトリに渡すことで、同様のことを行うことができました。つまり、scripts/runEverything.sql:

@'&1/A/runAll.sql' '&1/A'
@'&1/B/runAll.sql' '&1/B'

これを実行して呼び出します:

@'c:/.../scripts/runEverything.sql' 'c:/.../scripts'

しかし、ここでの問題は、B/runAll.sqlc:/.../scripts/A/Bのパスで呼び出されることです。

それで、ネストされた呼び出しを行うことは可能ですかSQL Developerを使用、およびその方法は?

6
Didjit

このアプローチには2つのコンポーネントがあります。

-アクティブなSQL Developerワークシートのフォルダをデフォルトディレクトリとして設定します。

-ドライバスクリプトを開きます。 runAll.sql(これにより、デフォルトのディレクトリがActive Directoryに変更されます)。runAll.sqlスクリプト内の相対パスを使用して、兄弟スクリプトを呼び出します。

  1. スクリプトのデフォルトフォルダを設定します。 SQL Developerツールバーで、次のナビゲーションを使用します。

    ツール>設定

    設定ダイアログボックスで、[データベース]> [ワークシート]> [デフォルトのパスを選択]に移動して、スクリプトを探します。

    デフォルトのパスを入力して、アクティブな作業ディレクトリとしてスクリプトを検索します。

    「$ {file.dir}」

  2. スクリプトファイルを作成し、それに関連付けられたすべてのスクリプトを配置します。

    runAll.sql

    A1.sql

    A2.sql

    RunAll.sqlの内容は次のとおりです。

    @ A1.sql;

    @ A2.sql;

このアプローチをテストするには、SQL Developerで[ファイル]をクリックし、script\runAll.sqlファイルに移動して開きます。

次に、すべて(ワークシート上)を選択して実行します。

RunAll.sqlワークシートをナビゲートして開くことにより、デフォルトのファイルフォルダーは「スクリプト」になります。

12
Patrick Bacon

ファイルのパスをStringとして指定する必要があります。パッチが機能するように二重引用符で囲みます。

**

例@ "C:\ Users\Arpan Saini\Zions R2\Reports Statements and Notices\Patch\08312017_Patch_16.2.3.17\DB Scripts\snsp.sql";

**

1
Arpan Saini

現在SQL Developerにアクセスできないため、相対パスを試すことはできませんが、置換変数を使用すると、位置変数(つまり&1)が再定義されるという問題が発生していると思いますstartまたは@ごと。したがって、最初の@runAllの後、親スクリプトは最後の子が見たのと同じ&1を参照します。これには/Aが含まれています。

マスタースクリプトで独自の変数を定義することで、これを回避できます。

define path=&1
@'&path/A/runAll.sql' '&path/A'
@'&path/B/runAll.sql' '&path/B'

runAll.sql、および実行されるものすべてが(再定義)pathしない限り、これは機能し、衝突のリスクがある場合は、一意の名前を選択する必要があります。

繰り返しますが、これを確認することはできませんが、過去にこれを正確に実行したことがあると確信しています...

1
Alex Poole

これは絶対パスまたは相対パスの問題ではありません。これはSQLインタープリターの問題であり、デフォルトでは.sql拡張子を持つファイルを探します。

必ずファイル名をfile_name.sqlに変更してください

例:ワークスペースに「A」というファイル名がある場合、ファイルをAから「A.sql」に移動します。

0
Praveen Kumar

SQLの実行

@yourPath\yourFileName.sql
0
Lova Chittumuri