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

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

関連記事

ORACLE

[DBMSパッケージ] スリープする(DBMS_LOCK)

スリープをするには、DBMS_LOCKパッケージを使用します。 サンプル 例)3秒スリープをする [crayon-5e2 ...
ORACLE

[データディクショナリ] データベースファイルの情報を取得する

データベースファイルの情報を参照するには、 DBA_DATA_FILESデータディクショナリビューを参照します。 DAT ...
ORACLE

[ORACLE] データファイルが破損しているかどうか調べる(DBV)

データファイルが破損しているかどうか調べるには、DBVユーティリティを使用します。 構文 (データファイルの破損を調べる ...
ORACLE

[ORACLE関数] べき乗を求める(POWER)

ORACLEでべき乗を求めるには、POWERを使用します。 サンプル 例)2の3乗を求める SQL*Plus SQL&g ...
ORACLE

[ORACLE] 表領域が自動拡張かどうかを確認する

表領域が自動拡張かどうかを確認するSQLです。 サンプル 例)表領域が自動拡張かどうかを確認するSQL [crayon- ...

スポンサーリンク