Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

SQL コードのインポート

この章では、SQL コードをテキスト・ファイルから InterSystems SQL にインポートする方法を説明します。SQL コードをインポートすると、InterSystems IRIS® データ・プラットフォームは、ダイナミック SQL を使用して SQL の各行を作成して実行します。解析できないコード行が検出された場合は、SQL インポートではそのコード行がスキップされて、ファイルの末尾に達するまで後続行の作成と実行が続行されます。すべての SQL コード・インポート操作では、現在のネームスペースにインポートされます。

SQL インポートの主な用途は、CREATE TABLE などのデータ定義言語 (DDL) コマンドをインポートすること、および INSERT、UPDATE、および DELETE コマンドを使用してテーブルを操作することです。SQL インポートは SELECT クエリを作成して実行しますが、結果セットは作成しません。

SQL インポートを使用して InterSystems SQL コードをインポートできます。SQL インポートはコード移行のためにも使用できます。コード移行とは、他のベンダの SQL コードをインポートすることです (FDBMS、Informix、InterBase、MSSQLServer、MySQL、Oracle、Sybase)。他のベンダのコードは、InterSystems SQL コードに変換されて実行されます。SQL インポートは、すべての SQL コマンドを InterSystems SQL にインポートできるわけではありません。SQL インポートは、InterSystems IRIS で実装されている SQL 標準に対応しているコマンドと節をインポートします。対応していない機能は通常は解析されますが、無視されます。

SQL インポートで SQL クエリを正常に準備することはできます (必要に応じて、対応するクエリ・キャッシュを作成) が、クエリは実行しません。

SQL コードのインポートを実行するには、%SYSTEM.SQL.SchemaOpens in a new tab クラスから適切なメソッドを呼び出します。SQL コードをインポートする際、これらのメソッドによって Errors.log と Unsupported.log という他の 2 つのファイルが作成される場合があります。Errors.log ファイルには SQL コマンドの解析に関するエラーが記録され、Unsupported.log ファイルにはそのメソッドで SQL コマンドとして認識されないリテラル・テキスト行が含まれます。

Note:

注目すべき点として、%SYSTEM.SQL.SchemaOpens in a new tab クラスでは ExportDDL() メソッドを使用して DDL コマンドをエクスポートすることもできます。つまり、このメソッドを使用すると、このページで説明するメソッドを使用して後でインポートできる DDL スクリプト・ファイルをエクスポートできます。

この章では、各種 SQL コードのインポートについて説明します。

InterSystems SQL のインポート

以下のいずれかの %SYSTEM.SQL.SchemaOpens in a new tab メソッドを使用して、InterSystems SQL コードをテキスト・ファイルからインポートできます。

  • ImportDDL()Opens in a new tab は汎用の SQL インポート・メソッドです。このメソッドは、バックグラウンド (非インタラクティブ) プロセスとして実行されます。InterSystems SQL をインポートするには、3 つ目のパラメータとして “IRIS” を指定します。

  • Run()Opens in a new tab は InterSystems SQL インポート・メソッドです。このメソッドは、ターミナルからインタラクティブに実行されます。ターミナルでは、インポート・テキスト・ファイルの場所や、Errors.log ファイルと Unsupported.log ファイルを作成する場所などの情報を指定するように求められます。

Note:

この SQL DDL コードのインポートと実行を、管理ポータルの SQL インタフェースの [文のインポート] アクションと混同しないでください。この操作では、SQL 文を XML 形式でインポートします。

次の例では、InterSystems IRIS SQL コード・ファイル・パス名 mysqlcode.txt をインポートして、そのファイルにリストされている SQL コマンドを現在のネームスペース内で実行します。

  DO $SYSTEM.SQL.Schema.ImportDDL("c:\InterSystems\mysqlcode.txt",,"IRIS")

既定では、ImportDDL() は 2 つ目のパラメータで指定されたとおりに、エラー・ログ・ファイルを作成します。この例では、2 つ目のパラメータを省略して、既定で mysqlcode_Errors.log という名前のファイルが SQL コード・ファイルと同じディレクトリ内に作成されます。このログ・ファイルは、ファイルに書き込む内容がない場合でも作成されます。

ターミナルから ImportDDL() を実行すると、次の例に示すように、まず入力ファイルがリストされ、次にエラー・ログ・ファイル、その次にインポートされた各 SQL コマンドがリストされます。

Importing SQL Statements from file: c:\InterSystems\mysqlcode.txt
 
Recording any errors to principal device and log file: c:\InterSystems\mysqlcode_Errors.log

 SQL statement to process (number 1):
     CREATE TABLE Sample.NewTab (Name VARCHAR(40))
      Preparing SQL statement...
      Executing SQL statement...
  DONE
 
  SQL statement to process (number 2):
     CREATE INDEX NameIDX ON Sample.NewTab (Name)
      Preparing SQL statement...
      Executing SQL statement...
  DONE
 
Elapsed time: 7.342532 seconds

SQL コマンドでエラーが発生した場合、ターミナルに以下の例のようなエラーが表示されます。

SQL statement to process (number 3):
       INSERT INTO Sample.MyStudents (StudentName,StudentDOB) SELECT Name,
       DOB FROM Sample.Person WHERE Age <= '21'
    Preparing SQL statement...
ERROR #5540: SQLCODE: -30 Message:  Table 'SAMPLE.PERSON' not found
       Pausing 5 seconds - read error message!  (Type Q to Quit)

5 秒以内に終了しない場合、ImportDDL() は次の SQL コマンドを実行します。エラー・ログ・ファイルにエラーがタイムスタンプ、ユーザ名、ネームスペース名と共に記録されます。

インポート・ファイル形式

SQL テキスト・ファイルは、.txt ファイルなどの書式なしファイルである必要があります。各 SQL コマンドはそれぞれ新しい行で始まる必要があります。1 つの SQL コマンドを複数の行に分けることができ、インデントが許可されています。各 SQL コマンドの後ろには、GO 文をそれぞれの行に記述する必要があります。

以下は、有効な InterSystems SQL インポート・ファイル・テキストの例です。

  CREATE TABLE Sample.MyStudents (StudentName VARCHAR(32),StudentDOB DATE)
GO
  CREATE INDEX NameIdx ON TABLE Sample.MyStudents (StudentName)
GO
  INSERT INTO Sample.MyStudents (StudentName,StudentDOB) SELECT Name,
  DOB FROM Sample.Person WHERE Age <= '21'
GO
  INSERT INTO Sample.MyStudents (StudentName,StudentDOB) 
          VALUES ('Jones,Mary',60123)
GO
  UPDATE Sample.MyStudents SET StudentName='Smith-Jones,Mary' WHERE StudentName='Jones,Mary'
GO
  DELETE FROM Sample.MyStudents WHERE StudentName %STARTSWITH 'A'
GO

サポートされている SQL コマンド

すべての有効な InterSystems SQL コマンドをインポートできるわけではありません。以下は、サポートされている InterSystems SQL コマンドのリストです。

  • CREATE TABLEALTER TABLEDROP TABLE

  • CREATE VIEWALTER VIEWDROP VIEW

  • CREATE INDEX (ビットスライスを除くすべてのインデックス・タイプ)

  • CREATE USERDROP USER

  • CREATE ROLE

  • GRANTREVOKE

  • INSERTUPDATEINSERT OR UPDATEDELETE

  • SET OPTION

  • SELECT (オプティマイザ・プラン・モード専用)

コード移行 : 非 InterSystems SQL のインポート

他のベンダで使用されている SQL フォーマットに従った SQL コードをインポートできます。他のベンダのコードは、InterSystems SQL コードに変換されて実行されます。以下のメソッドが用意されています。

  • ImportDDL()Opens in a new tab は汎用の SQL インポート・メソッドです。このメソッドは、バックグラウンド (非インタラクティブ) プロセスとして実行されます。このメソッドの使用法に関する一般的な情報は、"InterSystems SQL のインポート" を参照してください。

    特定フォーマットの SQL をインポートするには、そのフォーマットの名前を 1 つ目のパラメータとして指定します (FDBMS、Informix、InterBase、MSSQLServer (または MSSQL)、MySQL、Oracle、または Sybase)。

    次の例では、MSSQL コード・ファイル mssqlcode.txt をインポートして、そのファイルにリストされている SQL コマンドを現在のネームスペース内で実行します。

      DO $SYSTEM.SQL.Schema.ImportDDL($lb("C:\temp\somesql.sql","UTF8"),,"MSSQL")

    3 つ目のパラメータが MSSQL、Sybase、Informix、または MySQL の場合、最初のパラメータは SQL コード・ファイル・パス名または 2 要素の %List (最初の要素が SQL コード・ファイル・パス名で 2 つ目の要素が使用する入出力変換テーブル) です。

  • 次のタイプの SQL をインポートするための個別のインタラクティブ・メソッドが %SYSTEM.SQL.SchemaOpens in a new tab で用意されています : LoadFDBMS()Opens in a new tabLoadInformix()Opens in a new tabLoadInterBase()Opens in a new tabLoadMSSQLServer()Opens in a new tabLoadOracle()Opens in a new tab、および LoadSybase()Opens in a new tab。これらのメソッドは、ターミナルからインタラクティブに実行されます。ターミナルでは、インポート・テキスト・ファイルの場所や、Errors.log ファイルと Unsupported.log ファイルを作成する場所などの情報を指定するように求められます。

  • ImportDDLDir()Opens in a new tab を使用すると、同じディレクトリ内の複数のファイルから SQL コードをインポートできます。このメソッドは、バックグラウンド (非インタラクティブ) プロセスとして実行されます。このメソッドは、Informix、MSSQLServer、および Sybase をサポートしています。すべてのインポート対象ファイルには .sql という拡張子接尾語が付加されている必要があります。

  • ImportDir()Opens in a new tab を使用すると、同じディレクトリ内の複数のファイルから SQL コードをインポートできます。このメソッドでは、ImportDDLDir() より多くのオプションが用意されています。このメソッドは、バックグラウンド (非インタラクティブ) プロセスとして実行されます。このメソッドは、MSSQLServer と Sybase をサポートしています。許可されるファイル拡張子接尾語のリストを指定できます。

FeedbackOpens in a new tab