Skip to main content

#import

これ以降に記述されている埋め込み SQL DML 文のスキーマ検索パスを指定します。

説明

このマクロ・プリプロセッサ指示文は、これ以降に記述されている埋め込み SQL DML 文のスキーマ検索パスを指定します。

#import は、1 つまたは複数の検索するスキーマ名を指定して、未修飾のテーブル名、ビュー名、またはストアド・プロシージャ名にスキーマ名を指定します。単一のスキーマ名を指定できるほか、複数のスキーマ名をコンマ区切りリストで指定することもできます。スキーマは現在のネームスペースで検索されます。以下の例に示すとおり、Employees.Person テーブルが検出されます。

#import Customers,Employees,Sales
  &sql(SELECT Name,DOB INTO :n,:date FROM Person)
  WRITE "name: ",n," birthdate: ",date,!
  WRITE "SQLCODE=",SQLCODE

#import 指示文に指定されたすべてのスキーマが検索されます。Person テーブルは、#import にリストされたスキーマのうちのまさに 1 つで見つかる必要があります。#import は、スキーマ検索パス内での一致が必要なため、システム全体の既定のスキーマは使用されません。

ダイナミック SQL では、%SchemaPath プロパティを使用して、未修飾名を解決するためのスキーマ検索パスを指定します。

#import および #sqlcompile path の両方は、未修飾のテーブル名を解決するために使用される 1 つまたは複数のスキーマ名を指定します。これらの 2 つの指示文の違いを以下に示します。

  • #import は、あいまいなテーブル名を検出します。#import は、指定されたすべてのスキーマを検索し、すべての一致を検出します。#sqlcompile path は、スキーマの指定されたリストを左から右の順に、最初の一致が検出されるまで検索します。そのため、#import はあいまいなテーブル名を検出できます。#sqlcompile path ではできません。例えば、#import Customers,Employees,Sales は Customers スキーマ、Employees スキーマ、および Sales スキーマの中に Person の出現をちょうど 1 つだけ検出する必要があります。このテーブル名の出現を複数検出した場合、「Table 'PERSON' is ambiguous within schemas」という SQLCODE -43 エラーが発生します。

  • #import では、システム全体の既定値を使用できません。#import が、リストされているスキーマのいずれでも Person テーブルを検出できない場合、SQLCODE -30 エラーが発生します。#sqlcompile path が、リストされているスキーマのいずれでも Person テーブルを検出できない場合、システム全体の既定のスキーマが確認されます。

  • #import 指示文は付加的です。#import 指示文が複数ある場合、すべての指示文のスキーマでちょうど 1 つの一致のみを解決する必要があります。2 番目の #import を指定しても、前の #import で指定されたスキーマ名のリストは無効化されません。#sqlcompile path 指示文を指定すると、以前の #sqlcompile path 指示文で指定されたパスは上書きされます。以前の #import 指示文で指定されたスキーマ名が #sqlcompile path によって上書きされることはありません。

InterSystems IRIS は、#import 指示文に存在しないスキーマ名を無視します。InterSystems IRIS は、#import 指示文の重複したスキーマ名を無視します。

テーブル名が修飾済みの場合、#import 指示文は適用されません。以下に例を示します。

  #import Voters
  #import Bloggers
  &sql(SELECT Name,DOB INTO :n,:date FROM Sample.Person)
  WRITE "name: ",n," birthdate: ",date,!
  WRITE "SQLCODE=",SQLCODE

この場合、InterSystems IRIS は Sample スキーマで Person テーブルを検索します。Voters スキーマと Bloggers スキーマでは検索されません。

  • #import は SQL DML 文に適用されます。これを使用して、SQL SELECT クエリの未修飾テーブル名とビュー名、および INSERTUPDATE、および DELETE 演算の未修飾テーブル名とビュー名を解決できます。#import を使用すると、SQL の CALL 文にある未修飾プロシージャ名を解決することもできます。

  • #import は SQL DDL 文には適用されません。これは、CREATE TABLE やその他の CREATE 文、ALTER 文、DROP 文などのデータ定義文内の未修飾のテーブル名、ビュー名、およびプロシージャ名の解決には使用できません。この項目の定義を作成、変更、または削除する場合に、テーブル、ビュー、またはストアド・プロシージャに未修飾名を指定すると、InterSystems IRIS では #import の値が無視され、システム全体の既定のスキーマが使用されます。

#sqlcompile path プリプロセッサ指示文と比較します。

FeedbackOpens in a new tab