ORACLE機能 SQL*Plus

[SQL*Plus] @と@@の違い

投稿日:

SQL*PlusでSQLファイルを実行するコマンド「@」と「@@」の違いです。

@と@@の違い

まず「@hoge」のように、パス無し(ファイル名のみ)で実行すると以下のようにhoge.sqlファイルを探しに行きます。

①SQL*Plusを実行時のカレントディレクトリ
 (例)C:\mydir>sqlplus~ ⇒C:\mydirがカレントディレクトリ
②環境変数「SQLPATH」で定義されているディレクトリ
見つからない場合は以下のようなエラーとなります。
SQL> @hoge SP2-0310: ファイル"hoge.sql"をオープンできません。

「@C:¥hoge」のようにパスありで指定すれば、そのファイルが直接実行されます。


「@」と「@@」の違いは、sqlファイルからさらに別のsqlファイルを呼んだ場合に影響してきます。

例えば、カレントディレクトリでもSQLPATHに定義したディレクトリでもない場所に、以下2ファイルを作成して「@」で実行するとエラーとなります。

(aa.sql)
@bb.sql
(bb.sql)
select sysdate from dual;
実行例
SQL> @c:\aa SP2-0310: ファイル"bb.sql"をオープンできません。

これは aa.sql が bb.sql を呼ぶときに、bb.sql をカレントディレクトリまたは、SQLPATHからのみ探し、aa.sqlと同じディレクトリは探さないためです。

呼び出し元の aa.sql と同じディレクトリも検索対象に含めたい場合は「@」ではなく「@@」を使用します。

(aa.sql)
@@bb.sql SQL> @c:¥aa SYSDATE -------- 18-06-20

実行されました。

解説

  • @も@@もファイル名のみ指定した場合のみカレントディレクトリまたはSQLPATHを参照します
  • パスも指定した場合はそのパスのみ参照します

スポンサーリンク

スポンサーリンク

-ORACLE機能, SQL*Plus

執筆者:



comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

スポンサーリンク