SQL コードのインポート
ここでは、SQL コードをテキスト・ファイルから InterSystems SQL にインポートする方法を説明します。SQL コードをインポートすると、InterSystems IRIS® データ・プラットフォームは、SQL の各行を作成して実行します。解析できないコード行が検出された場合は、SQL インポートではそのコード行がスキップされて、ファイルの末尾に達するまで後続行の作成と実行が続行されます。すべての SQL コード・インポート操作では、現在のネームスペースにインポートされます。
SQL インポートの主な用途は、CREATE TABLE などのデータ定義言語 (DDL) コマンドをインポートすること、および INSERT、UPDATE、DELETE の各コマンドを使用してテーブルのデータを操作することです。
別のシステムまたはベンダから SQL コードをインポートするには LOAD SQL コマンドの使用をお勧めします。なお、%SYSTEM.SQL.SchemaOpens in a new tab クラスの ImportDDL()Opens in a new tab メソッドまたは Run()Opens in a new tab メソッドを呼び出すこともできます。
%SYSTEM.SQL.SchemaOpens in a new tab クラスでも ExportDDL() メソッドを使用して DDL コマンドをエクスポートできることには注目すべきです。つまり、このメソッドを使用すると、このページで説明するメソッドを使用して後でインポートできる DDL スクリプト・ファイルをエクスポートできます。
-
ObjectScript を使用した非 InterSystems SQL のインポート : FDBMS、Informix、InterBase、MSSQLServer、MySQL、Oracle、Sybase
LOAD SQL を使用した SQL のインポート
LOAD SQL コマンドを使用すると、データベースの基礎となっているシステムに関係なく、あるデータベースから別のデータベースにスキーマやテーブル定義を容易に、また効率的にロードし、INSERT のような標準の DML 操作を実行できます。このロードによって発生したエラーは %SQL_Diag.Result ログに書き込まれます。このコマンドでは、1 つのファイルまたは 1 つのディレクトリ (サブディレクトリを含む) にあるすべてのファイルから DDL 文をロードできます。
SQL コマンドは、書式がない広く使用されているファイル (テキスト・ファイルなど) に格納する必要があります。コマンドは複数行にわたることがありますが、コマンドの終了位置と次のコマンドの開始位置を示す一般的な区切り文字で行と行を区別できます。既定の区切り文字は、コマンドを作成した言語によって異なります。区切り文字とサポートされている言語の詳細は、LOAD SQL ページを参照してください。
ObjectScript を使用した 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 ファイルを作成する場所などの情報を指定するように求められます。
この 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 TABLE、ALTER TABLE、DROP TABLE
-
CREATE VIEW、ALTER VIEW、DROP VIEW
-
CREATE INDEX (ビットスライスを除くすべてのインデックス・タイプ)
-
CREATE USER、DROP USER
-
CREATE ROLE
-
GRANT、REVOKE
-
INSERT、UPDATE、INSERT OR UPDATE、DELETE
-
SET OPTION
-
SELECT (オプティマイザ・プラン・モード専用)
ObjectScript を使用した非 InterSystems SQL のインポート
SQL インポートを使用して、InterSystems SQL コードや他のベンダの SQL コード (FDBMS、Informix、InterBase、MSSQLServer、MySQL、Oracle、Sybase) をインポートできます。他のベンダのコードは、InterSystems SQL コードに変換されて実行されます。InterSystems SQL インポート・ユーティリティでは、SQL 標準に基づく InterSystems IRIS 実装で使用できるコマンドと節のみをインポートできます。この実装に対応していないコマンドは、一般的に解析はされても無視されます。以下のメソッドが用意されています。
-
ImportDDL()Opens in a new tab は汎用の SQL インポート・メソッドです。このメソッドは、バックグラウンド (非インタラクティブ) プロセスとして実行されます。このメソッドの使用法に関する一般的な情報は、"InterSystems SQL のインポート" を参照してください。
特定フォーマットの SQL をインポートするには、そのフォーマットの名前を 3 つ目のパラメータとして指定します (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 tab、LoadInformix()Opens in a new tab、LoadInterBase()Opens in a new tab、LoadMSSQLServer()Opens in a new tab、LoadOracle()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 をサポートしています。許可されるファイル拡張子接尾語のリストを指定できます。