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

[ORAエラー] ORA-12514: TNS: リスナーは接続記述子でリクエストされたサービスを現在認識していません

以下のように表示されます。 (日本語) ORA-12514: TNS: リスナーは接続記述子でリクエストされたサービスを ...
ORACLE

[データディクショナリ] 制約の情報を取得する

制約の情報を参照するには、 CONSTRAINTSデータディクショナリビューを参照します。 CONSTRAINTSデータ ...
ORACLE

[ORACLE] ビューを作成・変更・削除する

ビューを作成・変更・削除するサンプルです。 ビューを作成・変更する ビューを作成/変更するには、CREATE VIEW句 ...
ORACLE

[ORACLE] テーブルを削除する(DROP TABLE)

テーブルを削除するには、DROP TABLE文を使用します。 構文 (テーブルを削除する) DROP TABLE <テー ...
ORACLE

[ORACLE] テーブルが属する表領域を変更する

テーブルが属する表領域を変更するには、ALTER~MOVE TABLESPACE句を使用します。 構文 (テーブルが属す ...

スポンサーリンク