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 文をテストする 1 つの方法として、SQL シェルを使用して InterSystems IRIS® データ・プラットフォーム・ターミナルから SQL 文を実行する方法があります。このインタラクティブな SQL シェルでは、SQL 文を動的に実行できます。SQL シェルは ダイナミック SQL を使用するので、実行時にクエリが作成および実行されます。SQL シェルは、現在のネームスペース内でリソースにアクセスして操作を実行します。

特に明記のない限り、SQL シェル・コマンドおよび SQL コードでは大文字と小文字は区別されません。

この章で説明する項目は以下のとおりです。

SQL を実行するその他の方法

$SYSTEM.SQL.Execute()Opens in a new tab メソッドを使用すると、SQL シェルを呼び出さずにターミナル・コマンド行から SQL コードを 1 行実行できます。以下の例では、ターミナル・プロンプトからこのメソッドを使用する方法を示します。

USER>SET result=$SYSTEM.SQL.Execute("SELECT TOP 5 name,dob,ssn FROM Sample.Person")

USER>DO result.%Display()
USER>SET result=$SYSTEM.SQL.Execute("CALL Sample.PersonSets('M','MA')")

USER>DO result.%Display()

SQL 文にエラーがある場合は、Execute() メソッドは正常に完了し、%Display() メソッドは以下のようなエラー情報を返します。

USER>DO result.%Display()

[SQLCODE: <-29>:<Field not found in the applicable tables>]
[%msg: < Field 'GAME' not found in the applicable tables^ SELECT TOP ? game ,>]
0 Rows Affected
USER>

Execute() メソッドは、オプションのパラメータ SelectModeDialect、および ObjectSelectMode も提供します。

InterSystems IRIS は、このドキュメントの他の章で説明するように、SQL コードを記述し実行する、他の多くの方法をサポートしています。これには、以下のものがあります。

SQL シェルの呼び出し

以下のように、$SYSTEM.SQL.Shell()Opens in a new tab メソッドを使用して、ターミナルのプロンプトから SQL シェルを呼び出すことができます。

  DO $SYSTEM.SQL.Shell()

または、以下のように、%SQL.ShellOpens in a new tab クラスを使用して、インスタンス化されたインスタンスとして SQL シェルを呼び出すことができます。

  DO ##class(%SQL.Shell).%Go("IRIS")

または

  SET sqlsh=##class(%SQL.Shell).%New()
  DO sqlsh.%Go("IRIS")

呼び出す方法に関係なく、SQL シェルは、以下のように表示される SQL シェル・プロンプトを返します。

[SQL]termprompt>>

[SQL] は、SQL シェル内にいることを示すリテラルです。termprompt は、構成されているターミナル・プロンプトです。>> は、SQL コマンド行を示すリテラルです。既定では、SQL シェル・プロンプトは [SQL]nsp>> のように表示されます。nsp は、現在のネームスペースの名前です。

このプロンプトでは、以下のシェル・モードのいずれも使用できます。

  • 単一行モード : プロンプトで、SQL コードを 1 行入力します。SQL 文を終了するには、Enter キーを押します。既定では、SQL コードが作成および実行されます (即時実行モードと呼ばれます)。クエリの結果セットは、ターミナル画面に表示されます。その他の SQL 文の場合、SQLCODE と行カウント値がターミナル画面に表示されます。

  • 複数行モード : プロンプトで、Enter キーを押します。これで、複数行モードになります。SQL コードを複数行入力できます。新しい行のプロンプトではそれぞれ、行番号が示されます (空白行によって行番号がインクリメントされることはありません)。複数行の SQL 文を終了させるには、「GO」と入力し、Enter キーを押します。既定では、いずれの場合も、SQL コードが作成および実行されます。クエリの結果セットは、ターミナル画面に表示されます。その他の SQL 文の場合、SQLCODE と行カウント値がターミナル画面に表示されます。

    複数行モードでは、以下のコマンドが用意されています。これらのコマンドを複数行プロンプトに入力し、Enter キーを押します。L または LIST は、これまでに入力されたすべての SQL コードをリストします。C または CLEAR は、これまでに入力されたすべての SQL コードを削除します。C n または CLEAR n (n は行番号を示す整数) は、SQL コードの特定の行を削除します。G または GO は、SQL コードを作成および実行し、単一行モードに戻ります。Q または QUIT は、これまでに入力されたすべての SQL コードを削除し、単一行モードに戻ります。これらのコマンドでは、大文字と小文字は区別されません。コマンドを発行しても、次の複数行プロンプトで行番号がインクリメントされることはありません。複数行プロンプトで「?」と入力すると、これらの複数行コマンドがリストされます。

SQL 文を作成する場合、SQL シェルでは最初に文が検証されます。この検証では、指定したテーブルが現在のネームスペースに存在しているか、および指定したフィールドがテーブル内に存在しているかどうかの確認が行われます。存在しない場合、適切な SQLCODE が表示されます。

SQL シェルでは SQL 特権が確認されるので、テーブルやフィールドなどへのアクセスや変更のための適切な特権が必要です。詳細は、このドキュメントの “SQL のユーザ、ロール、および特権” の章を参照してください。

文が有効で適切な特権を持っている場合は、SQL シェルに SQL 文が表示され、連続番号が割り当てられます。この番号はターミナル・セッションが存続している限り、ネームスペースの変更や SQL シェルの終了と再開にかかわりなく連続的に割り当てられます。SQL 文に割り当てられた番号によって、以下のように、既存の SQL 文を呼び出すことができます。

使用可能なすべての SQL シェル・コマンドのリストを表示するには、SQL プロンプトで ? を入力します。

SQL シェルのセッションを終了し、ターミナルのプロンプトに戻るには、SQL プロンプトに Q または QUIT コマンドか、E または EXIT コマンドを入力します。SQL シェル・コマンドでは、大文字と小文字が区別されません。Ctrl-C コマンドは、SQL シェルでは無効になっています。

既定のパラメータ設定を使用した SQL シェルのセッションの例を以下に示します。

USER>DO $SYSTEM.SQL.Shell()
SQL Command Line Shell
----------------------------------------------
The command prefix is currently set to: <<nothing>>.
Enter q to quit, ? for help.
[SQL]USER>>SELECT TOP 5 Name,Home_State FROM Sample.Person ORDER BY Home_State
1. SELECT TOP 5 Name,Home_State FROM Sample.Person ORDER BY Home_State

Name               Home_State
Djokovic,Josephine W.  AK
Klingman,Aviel P.      AK
Quine, Sam X.          AK
Xiang,Robert C.        AL
Roentgen,Alexandria Q. AR

5 Row(s) Affected
----------------------------------------------
[SQL]USER>>SELECT GETDATE()
2. SELECT GETDATE()

Expression_1
2009-09-29 11:41:42

1 Row(s) Affected
----------------------------------------------
[SQL]USER>>QUIT

USER>

既定のパラメータ設定を使用した、複数行の SQL シェルのセッションを以下に示します。

USER>DO $SYSTEM.SQL.Shell()
SQL Command Line Shell
----------------------------------------------
The command prefix is currently set to: <<nothing>>.
Enter q to quit, ? for help.
[SQL]USER>>   << entering multiline statement mode >>
        1>>SELECT TOP 5
        2>>Name,Home_State
        3>>FROM Sample.Person
        4>>ORDER BY Home_State
        5>>GO

1. SELECT TOP 5
   Name,Home_State
   FROM Sample.Person
   ORDER BY Home_State

Name               Home_State
Djokovic,Josephine W.  AK
Klingman,Aviel P.      AK
Quine, Sam X.          AK
Xiang,Robert C.        AL
Roentgen,Alexandria Q. AR

5 Row(s) Affected
----------------------------------------------
[SQL]USER>>

GO コマンド

SQL シェルの GO コマンドは、最後の SQL 文を実行します。単一行モードでは、GO は最後に実行した SQL 文を再実行します。複数行モードでは、GO コマンドは、複数の SQL 文を実行して複数行モードを終了するために使用されます。単一行モードでの後続の GO は、前の複数の SQL 文を再実行します。

入力パラメータ

SQL シェルでは、“?” 文字を使用した入力パラメータを SQL 文に使用できます。SQL 文を実行するたびに、それらの入力パラメータの値を指定するように求められます。それらの値は、SQL 文に各 “?” 文字が記述されているのと同じ順で指定する必要があります。最初のプロンプトは最初の “?” に値を渡し、2 番目のプロンプトは 2 番目の “?” に値を渡し、以下同様の対応となります。

入力パラメータの個数に制限はありません。入力パラメータを使用して、TOP 節および WHERE 節に値を渡したり、SELECT リストに式を渡したりできますが、SELECT リストに列名を渡すことはできません。

ホスト変数は、入力パラメータ値として指定できます。入力パラメータの入力を求められたら、コロン (:) で始まる値を指定します。この値には、パブリック変数、ObjectScript 特殊変数、数値リテラル、または式を指定できます。次に、“is this a literal (Y/N)?” というプロンプトが表示されます。このプロンプトで N (No) を指定すると (または、何も指定しないで Enter キーを押すと)、入力値はホスト変数と解析されます。例えば、:myval はローカル変数 myval の値、:^myval はグローバル変数 ^myval の値、:$HOROLOG は特殊変数 $HOROLOG の値、:3 は数字の 3、:10-3 は数字の 7 と解析されます。このプロンプトで Y (Yes) を指定すると、先頭のコロンを含む入力値が、リテラルとして入力パラメータに渡されます。

ObjectScript コマンドの実行

SQL シェル内では、ObjectScript コマンドを発行できます。例えば、SET $NAMESPACE コマンドを使用して、InterSystems IRIS ネームスペースを、参照する SQL テーブルまたはストアド・プロシージャが含まれるネームスペースに変更する場合などです。SQL シェルで ! コマンドまたは OBJ コマンドを使用して、1 つ以上の ObjectScript コマンドで構成される ObjectScript コマンド行を発行できます (OBJOBJECTSCRIPT の省略形です)。!OBJ、および OBJECTSCRIPT コマンドは同義語です。これらのコマンドの使用法を以下の例に示します。

%SYS>DO $SYSTEM.SQL.Shell()
SQL Command Line Shell
----------------------------------------------
The command prefix is currently set to: <<nothing>>.
Enter q to quit, ? for help.
[SQL]%SYS>>! SET oldns=$NAMESPACE SET $NAMESPACE="USER" WRITE "changed the namespace"
changed the namespace
[SQL]USER>>OBJ SET $NAMESPACE=oldns WRITE "reverted to old namespace"
reverted to old namespace
[SQL]%SYS>>

コマンド行で OBJ コマンドに続く残りの部分は、ObjectScript コードとして扱われます。! と ObjectScript コマンド行の間にスペースは必要ありません。OBJ コマンドは、SQL シェル単一行モードまたは SQL シェル複数行モードで指定することができます。以下の例では、USER ネームスペースで定義されたテーブルに対して SELECT クエリを実行します。

%SYS>DO $SYSTEM.SQL.Shell()
SQL Command Line Shell
----------------------------------------------
The command prefix is currently set to: <<nothing>>.
Enter q to quit, ? for help.
[SQL]%SYS>>  << entering multiline statement mode >>
        1>>OBJ SET $NAMESPACE="USER"

        1>>SELECT TOP 5 Name,Home_State
        2>>FROM Sample.Person
        3>>GO
   /* SQL query results */
[SQL]USER>>

OBJ 文が SQL 行カウントを進めることはありません。

SQL シェル複数行モードでは、OBJ コマンドは改行時に実行されますが、SQL 文は GO を指定するまで発行されません。したがって、以下の例は、機能的には前述の例と同じです。

%SYS>DO $SYSTEM.SQL.Shell()
SQL Command Line Shell
----------------------------------------------
The command prefix is currently set to: <<nothing>>.
Enter q to quit, ? for help.
[SQL]%SYS>>  << entering multiline statement mode >>
        1>>SELECT TOP 5 Name,Home_State
        2>>FROM Sample.Person
        3>>OBJ SET $NAMESPACE="USER" WRITE "changed namespace"
changed namespace
        3>>GO
   /* SQL query results */
[SQL]USER>>

以下の例では、OBJ コマンドを使用してホスト変数を定義します。

USER>DO $SYSTEM.SQL.Shell()
SQL Command Line Shell
----------------------------------------------
The command prefix is currently set to: <<nothing>>.
Enter q to quit, ? for help.
[SQL]USER>>  << entering multiline statement mode >>
        1>>SELECT TOP :n Name,Home_State
        2>>FROM Sample.Person
        3>>OBJ SET n=5

        3>>GO

ネームスペースの参照

SQL シェルでは、現在のネームスペースに定義されているか現在のネームスペースからアクセス可能なスキーマ、テーブル、およびビューを表示する BROWSE コマンドがサポートされます。この表示は、複数レベルのプロンプトで構成されています。前のプロンプト・レベルに戻るには、プロンプトで Return (Enter) キーを押します。名前は、大文字と小文字を区別します。

  1. SQL シェル・プロンプトで「BROWSE」と入力すると、現在のネームスペース内のスキーマがリストされます。

  2. Schema: プロンプトで、スキーマを名前または番号で選択します。これにより、そのスキーマ内のテーブルとビューがリストされます。

  3. Table/View: プロンプトで、テーブル (T) またはビュー (V) を名前または番号で選択します。これにより、テーブルの情報が表示されてから、オプションのリストが表示されます。

  4. Option: プロンプトで、オプションを番号で選択します。このオプションを使用して、テーブルに定義されているフィールドまたはマップをリストできます。

    オプション 1 (名前別のフィールド) またはオプション 2 (番号別のフィールド) を指定して、Field: プロンプトを表示します。オプション 3 (マップ) を指定すると、Map: プロンプトが表示されます。

  5. Field: プロンプトで、フィールドを番号または名前で選択するか、* を指定してすべてのフィールドをリストします。これにより、詳細なフィールド情報が表示されます。

    Map: プロンプトで、マップを番号または名前で選択するか、* を指定してすべてのマップをリストします。これにより、詳細なマップ情報が表示されます。

CALL コマンド

SQL シェルを使用して、以下の例のように、SQL CALL 文を発行してSQL ストアド・プロシージャを呼び出すことができます。

[SQL]USER>>CALL Sample.PersonSets('G','NY')

指定したストアド・プロシージャが現在のネームスペースに存在しない場合、SQL シェルは SQLCODE -428 エラーを発行します。

入力パラメータの指定がストアド・プロシージャで定義された数よりも多い場合、SQL シェルは SQLCODE -370 エラーを発行します。パラメータの値をストアド・プロシージャに指定するには、リテラル ('string')、ホスト変数 (:var)、および入力パラメータ (?) を任意に組み合わせて使用することができます。

  • 以下の例に示すように、CALL 文では ホスト変数 を使用することができます。

    [SQL]USER>>OBJ SET a="G",b="NY"
    [SQL]USER>>CALL Sample.PersonSets(:a,:b)
    
  • 以下の例に示すように、CALL 文では入力パラメータ (“?” 文字) を使用することができます。

    [SQL]USER>>CALL Sample.PersonSets(?,?)
    

    CALL 文が実行される際には、SQL シェルによって、これらの各入力パラメータの値を指定するように求められます。

SQL スクリプト・ファイルの実行

SQL シェルの RUN コマンドは、SQL スクリプト・ファイルを実行します。スクリプト・ファイルのタイプは、DIALECT の設定によって決まります。DIALECT の既定は IRIS (InterSystems SQL) です。詳細は、この章で後述する "RUN コマンド" を参照してください。

SQL 文の格納と呼び出し

番号による呼び出し

SQL シェルでは自動的に、ターミナル・セッション中に正常に発行された各 SQL 文がローカル・キャッシュに格納され、それぞれに連続した番号が割り当てられます。この番号は、現在のターミナル・プロセスにおける既存の SQL 文の呼び出しに使用されます。SQL シェルでは、正常完了した SQL 文にのみ番号が割り当てられます。SQL 文の作成時にエラーが発生した場合、番号は割り当てられません。これらの番号の割り当ては、ネームスペースに固有ではありません。以下は、番号コマンドによる使用可能な呼び出しです。

  • ## を使用すると、キャッシュされた既存のすべての SQL 文とそれらに割り当てられている番号をリスト表示できます。

  • #n : 既存の SQL 文は、SQL シェル・プロンプトで #n を指定することで、呼び出して実行することができます。n は SQL シェルが文に割り当てた整数を表します。

  • #0 : 直前に作成された SQL 文は、SQL シェル・プロンプトで #0 コマンドを指定することで、呼び出して実行することができます。#0 は、直前に作成された SQL 文を呼び出しますが、それが最後に実行された SQL 文であるとは限りません。そのため、SQL 文の呼び出しと実行は、#0 によってどの SQL 文が呼び出されるかには影響しません。

番号を使用して SQL 文を呼び出す際は、その文に新しい番号は割り当てられません。SQL シェルでは、ターミナル・セッションの継続中に番号が連続的に割り当てられます。SQL シェルをいったん終了してから再開したり、ネームスペースを変更したりしても、番号の割り当てや既に割り当てられている番号の有効性には影響しません。

すべての番号割り当てを削除するには、#CLEAR を使用して、表示されたプロンプトでこのアクションを確認します。この操作により、それまでに割り当てられていたすべての番号割り当てが削除され、番号割り当てが 1 から再開されます。

名前による呼び出し

オプションとして、SQL 文に名前を割り当て、その名前で文を呼び出すことができます。この名前は、現在のユーザのすべてのターミナル・プロセスで発行された既存の SQL 文の呼び出しに使用されます。名前によって SQL 文の保存と呼び出しを行うには、以下の 2 つの方法があります。

  • SAVEGLOBAL を使用してグローバルに保存し、OPEN を使用してグローバルから呼び出す。

  • SAVE を使用してファイルに保存し、LOAD を使用してファイルから呼び出す。

グローバルへの保存

直前の SQL 文にグローバル名を割り当てるには、SQL シェル・コマンド SAVEGLOBAL name を使用します。このコマンドは、SG name と省略できます。この後は、SQL シェル・コマンド OPEN name を使用して、グローバルから SQL 文を呼び出すことができます。EXECUTEMODE が IMMEDIATE の場合、SQL シェルは文の呼び出しと実行の両方を行います。EXECUTEMODE が DEFERRED の場合、文は作成されますが、GO コマンドを指定するまで実行されません。

OPEN name を使用して SQL 文をグローバル名で呼び出すたびに、SQL シェルによって新しい番号が文に割り当てられます。番号による呼び出しでは、古い番号と新しい番号の両方が有効です。

name には、空白スペース文字以外のすべての表示可能文字を使用できます。name では、大文字と小文字が区別されます。name は、任意の長さにできます。name は現在のネームスペースに固有です。同一の SQL 文を別の名前で複数回保存できます。この場合、保存されたすべての名前が有効になります。既に割り当てられている名前を使用して SQL 文を保存しようとすると、SQL シェルによって、既存の名前を上書きして新しい SQL 文にその名前を再割り当てするかどうかの確認が求められます。

グローバル名は、現在のネームスペースに対して割り当てられます。SQL シェルの L (または LIST) コマンドを使用すると、現在のネームスペースに割り当てられているすべてのグローバル名をリスト表示できます。割り当てられた name は、現在のユーザのすべてのターミナル・プロセスで使用できます。割り当てられた name は、それを作成したターミナル・プロセスが終了しても存続します。name の割り当てがない場合、LIST は “No statements saved” というメッセージを返します。

グローバルの name の割り当てを削除するには、CLEAR name を使用します。現在のネームスペースのすべてのグローバルの name の割り当てを削除するには、CLEAR を使用し、表示されたプロンプトでこのアクションを確認します。

ファイルへの保存

直前の SQL 文にファイル名を割り当てるには、SQL シェル・コマンド SAVE name を使用します。この後は、SQL シェル・コマンド LOAD name を使用して、SQL 文を呼び出すことができます。EXECUTEMODE が IMMEDIATE の場合、SQL シェルは文の呼び出しと実行の両方を行います。LOAD name を使用して SQL 文をファイル名で呼び出すたびに、SQL シェルによって新しい番号が文に割り当てられます。番号による呼び出しでは、古い番号と新しい番号の両方が有効です。

name には、空白スペース文字以外のすべての表示可能文字を使用できます。name では、大文字と小文字が区別されます。name は、任意の長さにできます。name は現在のネームスペースに固有です。同一の SQL 文を別の名前で複数回保存できます。この場合、保存されたすべての名前が有効になります。既に割り当てられている名前を使用して SQL 文を保存しようとすると、SQL シェルによって、既存の名前を上書きして新しい SQL 文にその名前を再割り当てするかどうかの確認が求められます。

名前は、現在のネームスペースに対して定義されます。割り当てられた name は、現在のユーザのすべてのターミナル・プロセスで使用できます。割り当てられた name は、それを作成したターミナル・プロセスが終了しても存続します。

クエリ・キャッシュの削除

SQL シェルは PURGE (省略形は P) コマンドを指定して、現在のネームスペースにあるすべてのクエリ・キャッシュを削除します。このコマンドは、SQL シェルを使用して生成されたクエリ・キャッシュだけでなく、ネームスペース内のすべてのクエリ・キャッシュを削除します。

$SYSTEM.SQL.Purge() メソッドおよび管理ポータルの [アクション] ドロップダウン・リストのオプションには、選択したクエリ・キャッシュのみの削除や、ネームスペースにあるすべてのクエリ・キャッシュの削除をはじめとする詳細なオプションが用意されています。

SQL シェルの構成

  • 管理ポータルを使用して、SQL シェルの既定値をシステム全体に構成できます。

  • SQL シェルのパラメータを使用して、個々の SQL シェルを構成できます。SQL シェルのパラメータを変更すると、SQL シェルの現在の呼び出しについてのシステム全体の既定値がオーバーライドされます。システム全体の SQL シェルの既定値は変更されません。

以下は、指定可能な SQL シェル構成オプション、対応するシェルのパラメータ、および既定の設定を示しています。

管理ポータルのシェルの構成 シェルのパラメータ 既定値
[選択モード] selectmode [論理]
[SQL 言語] (TSQL) dialect (TSQL) [IRIS]
[スキーマ検索パス] path なし
[結果列の配置] colalign [区切り文字]
[コマンド接頭語] (TSQL) commandprefix (TSQL) なし
[結果出力表示モード] displaymode [現在のデバイス]
[表示パス] displaypath なし
[表示ファイル] displayfile なし
[表示ファイル変換テーブル] displaytranslatetable なし
[エコー・モード] echo [オン]
[実行モード] executemode [即時]
[メッセージ・モード] messages [オン]
[実行を許可する IF 条件]   [1]
  log [オフ]

ラベルの付いたパラメータ (TSQL) は主に、Transact-SQL コードである Sybase または MSSQL を SQL シェルから実行するために使用されます。これらについては、この章の最後の “Transact-SQL のサポート” のセクションで説明します。

SQL シェルのシステム全体の既定値の構成

管理ポータルに進み、[システム管理][構成][SQL およびオブジェクトの設定][SQL] の順に選択します。[SQL シェル] タブを選択します。システム全体に適用されている SQL シェルの現在の既定の設定を確認して設定します。

1 つまたは複数の構成設定を変更した場合、画面左上の管理ポータルのパスのすぐ後にアスタリスク (*) が表示され、変更したことが示されます。例えば、System > Configuration > SQL * のようになります。[保存] ボタンを押して、変更内容を受け入れます。変更が有効になり、アスタリスクは消えます。

SQL シェルのパラメータの構成

SQL シェルの構成パラメータは、現在のターミナル・プロセスにおける現在の SQL シェルの呼び出しに固有です。設定は複数のネームスペースにわたって適用されます。ただし、SQL シェルを終了すると、SQL シェルのパラメータはすべてシステム全体の既定値にリセットされます。InterSystems IRIS ではシステム既定値が用意されていますが、以下で説明するように、SET SAVE を使用して、現在のプロセスに別の既定値を設定できます。

SQL シェルの SET コマンド (引数なし) では、以下の例に示すように、現在のシェル構成パラメータが表示されます。この例では、SET によりシステム既定値が表示されますが、これらは SQL シェルを呼び出した場合に設定される値です。

[SQL]USER>>SET
 
commandprefix = ""
dialect = IRIS
displayfile =
displaymode = currentdevice
displaypath =
displaytranslatetable =
echo = on
executemode = immediate
log = off
messages = on
path = SQLUser
selectmode = logical
[SQL]USER>>

単一の構成パラメータの現在の設定を表示するには、SET param を指定します。例えば、SET SELECTMODE では、現在の selectmode 設定が返されます。

SQL シェルの SET コマンドを使用して、シェル構成パラメータを設定することができます。設定値は SQL シェルを呼び出している間維持されます。SQL シェルを呼び出すたびに、パラメータは既定値にリセットされます。SET では、以下の構文形式のうちのいずれかを使用できます。

SET param value SET param = value

paramvalue のどちらも、大文字と小文字が区別されません。スペースは許可されていますが、等号の前後には不要です。

SQL シェルの SET SAVE コマンドでは、現在のシェル構成パラメータの設定がユーザの既定値として保存されます。これらの既定値は、現在のプロセスから後続の SQL シェルのすべての呼び出しに適用されます。また、これらは SQL シェルの既定値として、ユーザが起動するターミナル・プロセスで今後呼び出されるすべての SQL シェルにも適用されます。これは明確にリセットされるまで保持されます。SET SAVE を使用しても、現在実行中の SQL シェルの呼び出しには影響しません。

SQL シェルの SET CLEAR コマンドでは、現在のプロセスに対するシェル構成パラメータの現在の設定がクリアされます (システムの既定値にリセットされます)。InterSystems IRIS では、現在のプロセス、または現在のユーザによって呼び出されるすべての新しいターミナル・プロセスによる後続の SQL シェルの呼び出しに、この既定値へのリセットが適用されます。SET CLEAR は、現在実行中の SQL シェルの呼び出しには影響しません。

SET SAVESET CLEAR も、管理ポータルを使用して構成および表示されるシステム全体の SQL シェルの既定設定を変更することはありません。

COLALIGN の設定

SET COLALIGN を使用して、クエリ結果セット・データと列ヘッダの表示に使用する空白形式を指定できます。使用可能なオプションは以下のとおりです。

  • 区切り文字 : 結果セット・ヘッダ/データ列は、標準の区切り文字 (タブ) に基づいて配置されます。これが既定値です。

  • ヘッダ : 結果セット・ヘッダ/データ列は、列ヘッダの長さと標準の区切り文字 (タブ) に基づいて配置されます。

  • データ : 結果セット・ヘッダ/データ列は、列データ・プロパティの精度/長さと標準の区切り文字 (タブ) に基づいて配置されます。

詳細は、“ダイナミック SQL の使用法” の章の "%Display() メソッド" を参照してください。

DISPLAYMODE および DISPLAYTRANSLATETABLE の設定

以下の例に示すように、SET DISPLAYMODE を使用して、クエリ・データの表示に使用する形式を指定できます。

USER>DO $SYSTEM.SQL.Shell()
SQL Command Line Shell
----------------------------------------------
The command prefix is currently set to: <<nothing>>.
Enter q to quit, ? for help.
[SQL]USER>>SET DISPLAYMODE XML

displaymode = xml
[SQL]USER>>

DISPLAYMODE の既定値は CURRENTDEVICE です。この既定値では、クエリ・データが TXT 形式でターミナルに表示されます。SET DISPLAYMODE = CUR を指定して、CURRENTDEVICE の既定値をリストアすることができます。

その他の使用可能なオプションは、TXT、HTML、PDF、XML、および CSV です。形式の選択によってファイル・タイプが決まります。InterSystems IRIS は、そのタイプのファイルを作成し、ファイルにクエリ・データを書き込み、可能であれば、そのクエリ・データ・ファイルを表示するための適切なプログラムを起動します。TXT 以外のすべてのオプションで、結果セットのメッセージを記録するために、2 つ目のファイルが作成されます。既定では、SQL シェルにより、それらのファイルが InterSystems IRIS の mgr\Temp\ ディレクトリに作成され、ランダムに生成されたファイル名が適切なファイル・タイプの接尾語を伴って割り当てられます。生成されたメッセージ・ファイル名は、追加された文字列 “Messages” を除いて、データ・ファイルと同じ名前になります。HTML、PDF、および XML オプションの場合、Messages ファイルには、クエリ・データ・ファイルと同じファイル・タイプ接尾語が付きます。CSV オプションの場合は、Messages ファイルには TXT ファイル・タイプ接尾語が付きます。

以下は DISPLAYMODE = TXT の場合に生成されたファイルの例です。

C:\InterSystems\IRIS\mgr\Temp\sGm7qLdVZn5VbA.txt
C:\InterSystems\IRIS\mgr\Temp\sGm7qLdVZn5VbAMessages.txt

クエリを実行するたびに、SQL シェルではランダムに生成されたファイル名を持つファイルの新規ペアが作成されます。

DISPLAYMODE が TXT または CSV の場合は、形式変換の実行時に、適用する変換テーブルの名前を指定することもできます。SET DISPLAYTRANSLATE または SET DISPLAYTRANSLATETABLE のいずれかを指定できます。変換テーブル名の値では、大文字と小文字が区別されます。

DISPLAYMODE が CURRENTDEVICE 以外の値に設定された場合、制御文字を含むクエリ結果セットのデータがあると、警告メッセージが生成されます。一般的に、クエリ結果セットのデータに制御文字が出現するのは、論理モードの場合のみです。例えば、論理モードで表示された場合には、リスト構造のデータに制御文字が含まれます。このため、DISPLAYMODE を CURRENTDEVICE 以外の値に設定する場合は、SELECTMODE も DISPLAY または ODBC に設定することをお勧めします。

DISPLAYFILE および DISPLAYPATH の設定

DISPLAYMODE の値が CURRENTDEVICE 以外に設定されていると、DISPLAYFILE および DISPLAYPATH パラメータを使用してターゲット・ファイルの場所を指定することができます。

  • DISPLAYFILE の場合、このパラメータを接尾語なしの簡単なファイル名に設定します。例えば、SET DISPLAYFILE = myfile のようになります。また、このパラメータを部分修飾されたパスに設定することもできます。InterSystems IRIS は、これを DISPLAYPATH の値または既定のディレクトリに追加します (必要に応じてサブディレクトリを作成します)。例えば、SET DISPLAYFILE = mydir\myfile のようになります。DISPLAYPATH が設定されている場合、指定されたディレクトリにこのファイル名でファイルが作成されます。DISPLAYPATH が設定されていない場合、InterSystems IRIS の mgr\Temp\ ディレクトリにこのファイル名でファイルが作成されます。

  • DISPLAYPATH の場合、このパラメータを既存の完全修飾されたディレクトリ・パス構造に設定します。このディレクトリ・パス構造の末尾には、お使いのオペレーティング システム・プラットフォームに応じてスラッシュ (“/”) または円記号 (“\”) を付加する必要があります。DISPLAYFILE が設定されている場合、このディレクトリに DISPLAYFILE 名でファイルが作成されます。DISPLAYFILE が設定されていない場合、このディレクトリにランダムに生成された名前でファイルが作成されます。DISPLAYPATH ディレクトリが存在しない場合、InterSystems IRIS は DISPLAYPATH および DISPLAYFILE 設定を無視し、代わりに、既定のディレクトリと既定のランダム生成ファイル名を使用します。

必要に応じて、DISPLAYPATH 値の末尾にスラッシュ (または円記号) を自動的に付加したり、DISPLAYFILE 値の先頭からスラッシュ (または円記号) を自動的に削除して、有効な完全修飾のディレクトリ・パスが作成されます。

以下の例では、DISPLAYMODE、DISPLAYFILE、および DISPLAYPATH を設定します。

[SQL]USER>>SET DISPLAYMODE XML

displaymode = xml
[SQL]USER>>SET DISPLAYFILE = myfile

displayfile = myfile
[SQL]USER>>SET DISPLAYPATH = C:\temp\mydir\

displaypath = C:\temp\mydir\
[SQL]USER>> 

クエリを実行すると、SQL シェルにより以下のファイルが生成されます。最初のファイルにはクエリ・データが含まれます。2 番目のファイルにはクエリの実行により生じたあらゆるメッセージが含まれます。

C:\temp\mydir\myfile.xml
C:\temp\mydir\myfileMessages.xml

DISPLAYFILE も DISPLAYPATH も指定しない場合、InterSystems IRIS インストール先の Mgr\Temp\ ディレクトリ (C:\InterSystems\IRIS\Mgr\Temp\ など) にランダム生成ファイル名でファイルが作成されます。

DISPLAYMODE が CURRENTDEVICE に設定されていない場合、DISPLAYFILE を設定してクエリを実行するたびに、命名されたファイルおよび関連メッセージ・ファイルのあらゆる既存データが新規のクエリ・データにより置換されます。DISPLAYFILE 未設定でクエリを実行するたびに、SQL シェルではランダムに生成されたファイル名で新規ファイルが作成され、かつ新規の関連メッセージ・ファイルも作成されます。

DISPLAYMODE が CURRENTDEVICE に設定される場合、DISPLAYFILE および DISPLAYPATH パラメータは影響を受けません。

EXECUTEMODE の設定

SQL シェルでは、SQL 文の即時実行と遅延実行がサポートされます。即時実行では、Enter キーを押すと、指定された SQL 文の作成と実行が行われます。遅延実行では、Enter キーを押したときに文の作成は行われますが、SQL プロンプトで GO を指定するまで実行されません。

使用可能なオプションは、SET EXECUTEMODE IMMEDIATE (既定)、SET EXECUTEMODE DEFERRED、および現在のモード設定を表示する SET EXECUTEMODE です。以下の例は、実行モードを設定します。

USER>DO $SYSTEM.SQL.Shell()
SQL Command Line Shell
----------------------------------------------
The command prefix is currently set to: <<nothing>>.
Enter q to quit, ? for help.
[SQL]USER>>SET EXECUTEMODE DEFERRED

Executemode = deferred
[SQL]USER>>

遅延実行を使用すると、複数の SQL クエリを作成し、名前または番号で呼び出して実行できます。作成済みの SQL 文を実行するには、必要な文を (適切なネームスペースから) 呼び出して、GO を指定します。

以下の例は、遅延モードでの 3 つのクエリの作成を示しています。最初の 2 つは保存され、呼び出し名が割り当てられます。3 つ目には名前は割り当てられませんが、番号で呼び出すことができます。

[SQL]USER>>SELECT TOP 5 Name,Home_State FROM Sample.Person
1. SELECT TOP 5 Name,Home_State FROM Sample.Person
[SQL]USER>>SAVE 5sample
Query saved as: 5sample
[SQL]USER>>SELECT TOP 5 Name,Home_State FROM Sample.Person ORDER BY Home_State
2. SELECT TOP 5 Name,Home_State FROM Sample.Person ORDER BY Home_State
[SQL]USER>>SAVE 5ordered
Query saved as: 5ordered
[SQL]USER>>SELECT Name,Home_State FROM Sample.Person ORDER BY Home_State
3. SELECT Name,Home_State FROM Sample.Person ORDER BY Home_State
[SQL]USER>>

以下は、上記の例で定義された 2 つのクエリを遅延モードで実行する例です。この例では、クエリの 1 つは名前で呼び出され (呼び出し時に SQL シェルで新しい番号が割り当てられます)、もう 1 つは番号で呼び出されます。

[SQL]USER>>OPEN 5ordered
SELECT TOP 5 Name,Home_State FROM Sample.Person ORDER BY Home_State
4. SELECT TOP 5 Name,Home_State FROM Sample.Person ORDER BY Home_State
----------------------------------------------
[SQL]USER>>GO

Name               Home_State
Djokovic,Josephine W.  AK
Klingman,Aviel P.      AK
Quine, Sam X.          AK
Xiang,Robert C.        AL
Roentgen,Alexandria Q. AR

5 Row(s) Affected
----------------------------------------------
[SQL]USER>>#3
SELECT Name,Home_State FROM Sample.Person ORDER BY Home_State
3. SELECT Name,Home_State FROM Sample.Person ORDER BY Home_State
----------------------------------------------
[SQL]USER>>GO
.
.
.

ECHO の設定

SET ECHO を使用して、クエリ結果を SQL シェルにエコーするかどうかを指定できます。SET ECHO=OFF と指定すると、クエリが作成され、クエリ・キャッシュが定義され、クエリが実行されます。ターミナルにクエリ結果は表示されません。これを以下の例で示しています。

[SQL]USER>>set echo=off
 
echo = off
[SQL]USER>>SELECT Name,Age FROM Sample.MyTest
4.      SELECT Name,Age FROM Sample.MyTest
 
 
statement prepare time(s)/globals/cmds/disk: 0.0002s/5/155/0ms
          execute time(s)/globals/cmds/disk: 0.0001s/0/105/0ms
                          cached query class: %sqlcq.USER.cls3
---------------------------------------------------------------------------
[SQL]USER>>

SET ECHO=ON (既定) と指定すると、クエリ結果がターミナルに表示されます。これを以下の例で示しています。

[SQL]USER>>set echo=on
 
echo = on
[SQL]USER>>SELECT Name,Age FROM Sample.MyTest
5.      SELECT Name,Age FROM Sample.MyTest
 
Name    Age
Fred Flintstone 41
Wilma Flintstone        38
Barney Rubble   40
Betty Rubble    42
 
4 Rows(s) Affected
statement prepare time(s)/globals/cmds/disk: 0.0002s/5/155/0ms
          execute time(s)/globals/cmds/disk: 0.0002s/5/719/0ms
                          cached query class: %sqlcq.USER.cls3
---------------------------------------------------------------------------
[SQL]USER>>

SET ECHO は、DISPLAYMODE=CURRENTDEVICE (既定) の場合にのみ有効です。

SET ECHOSET MESSAGES は、ターミナルに表示されるものを指定します。これらはクエリの作成と実行には影響を与えません。SET MESSAGES=OFF および SET ECHO=OFF の場合、クエリが作成され、クエリ・キャッシュが作成され、クエリ実行によってクエリ結果セットが作成されますが、ターミナルには何も返されません。

MESSAGES の設定

SET MESSAGES を使用して、クエリ・エラー・メッセージを表示するかどうか (成功した場合)、またはクエリ実行情報を表示するかどうか (成功した場合) を指定できます。

  • クエリ実行が失敗した場合 : SET MESSAGES=OFF と指定している場合、ターミナルには何も表示されません。SET MESSAGES=ON (既定) と指定している場合、クエリ・エラー・メッセージが表示されます。例 : ERROR #5540: SQLCODE: -30 Message: Table 'SAMPLE.NOTABLE' not found

  • クエリ実行が成功した場合 : SET MESSAGES=OFF と指定している場合、クエリ結果と行 n Rows(s) Affected のみが表示されます。SET MESSAGES=ON (既定) を指定している場合、クエリ結果と行 n Rows(s) Affected に続いて、文作成のメトリック、文実行のメトリック、および生成されたクエリ・キャッシュの名前が表示されます。

    作成および実行のメトリックは、経過時間 (秒の小数部単位)、グローバル参照の合計数、実行されたコマンドの合計数、およびディスク読み取り待ち時間 (ミリ秒単位) で測定されます。

SET MESSAGES=ON の場合に表示される情報が、DISPLAYMODE の設定によって変更されることはありません。一部の DISPLAYMODE オプションでは、クエリ結果セット・ファイルとメッセージ・ファイルの両方が作成されます。このメッセージ・ファイルには、SET MESSAGES=ON の場合にターミナルに表示されるクエリ作成および実行のメッセージではなく、結果セットのメッセージが含まれます。

SET MESSAGESSET ECHO は、ターミナルに表示されるものを指定します。これらはクエリの作成と実行には影響を与えません。SET MESSAGES=OFF および SET ECHO=OFF の場合、正常なクエリが作成され、クエリ・キャッシュが作成され、クエリ実行によってクエリ結果セットが作成されますが、ターミナルには何も返されません。

LOG の設定

SET LOG を使用して、SQL シェルのアクティビティのログをファイルに記録するかどうかを指定できます。使用可能なオプションは以下のとおりです。

  • SET LOG OFF : 既定値です。InterSystems IRIS は、現在の SQL シェルのアクティビティのログを記録しません。

  • SET LOG ON : InterSystems IRIS は、SQL シェルのアクティビティのログを既定のログ・ファイルに記録します。

  • SET LOG pathname : InterSystems IRIS は、SQL シェルのアクティビティのログを、pathname で指定されたファイルに記録します。

SET LOG ON は、IRIS\mgr\namespace にログ・ファイルを作成します (namespace は、プロセスの現在のネームスペースの名前を表します)。この既定のログ・ファイル名は xsqlnnnn.log です (nnnn は、現在のプロセスのプロセス ID (pid) 番号を表します)。

既定では、ログ・ファイルは、現在のプロセスおよび現在のネームスペースに固有です。SQL シェルのアクティビティのログを、複数のプロセスまたは複数のネームスペースから同じログに記録するには、プロセスまたはネームスペースごとに SET LOG pathname を指定する際に、同じ pathname を使用します。

ログ・ファイルは、一時停止したり再開したりすることができます。ログ・ファイルを作成したら、SET LOG OFF によって、そのログ・ファイルへの書き込みが一時停止されます。また、SET LOG ON によって、既定のログ・ファイルへの書き込みが再開されます。ログ記録の再開時に、Log restarted: date time がログ・ファイルに書き込まれます。SET LOG ON では常に、既定のログ・ファイルが有効になります。したがって、指定した pathname ログ・ファイルへの書き込みを一時停止した場合は、再開時に SET LOG pathname を指定する必要があります。

ログ・ファイルの有効化によって、ターミナルに表示される SQL シェルのアクティビティのコピーが作成されますが、SQL シェルのターミナル出力にはリダイレクトされません。SQL シェルのログには、SQL の実行に失敗した場合は SQL エラーが記録され、SQL の実行に成功した場合はその SQL コードと結果として得られる行数が記録されます。SQL シェルのログには、結果セットのデータは記録されません。

ログが既に有効な場合は、SET LOG ON を指定しても効果はありません。その場合は、SET LOG pathname を指定すると、現在のログが一時停止され、pathname で指定されたログが有効になります。

PATH の設定

SET PATH schema を使用して、スキーマ検索パスを設定できます。SQL はこれを使用して、未修飾テーブル名に適切なスキーマ名を指定します。以下の例で示しているように、schema は、単一のスキーマ名でも、複数のスキーマ名のコンマ区切りリストでもかまいません。

[SQL]USER>>SET PATH cinema,sample,user

引数なしで SET PATH を使用すると、現在のスキーマ検索パスが削除され、システム全体の既定のスキーマ名に戻ります。

SET PATH schema が指定されていない場合、または指定されたスキーマでテーブルが見つからない場合、SQL シェルではシステム全体の既定のスキーマ名が使用されます。スキーマ検索パスの詳細は、"ObjectScript の使用法" の “ObjectScript マクロとマクロ・プリプロセッサ” の章で #sqlcompile path マクロを参照してください。

SELECTMODE の設定

SET SELECTMODE を使用して、クエリ・データの表示に使用するモードを指定できます。

USER>DO $SYSTEM.SQL.Shell()
SQL Command Line Shell
----------------------------------------------
The command prefix is currently set to: <<nothing>>.
Enter q to quit, ? for help.
[SQL]USER>>SET SELECTMODE DISPLAY

selectmode = display
[SQL]USER>>

使用可能なオプションは、DISPLAY、LOGICAL、および ODBC です。既定は LOGICAL です。現在のモードを決定するには、値なしで SET SELECTMODE を指定します。

[SQL]USER>>SET SELECTMODE

selectmode = logical
[SQL]USER>>

%List データは出力不能文字を使用してエンコードされます。そのため、selectmode=logical の場合、SQL シェル は %List データ値を $LISTBUILD 文として表示します。例えば、$lb("White","Green") のようになります。Time データ型は秒の小数部をサポートします。そのため、selectmode=odbc の場合、SQL シェルは秒の小数部を表示します。これは ODBC 標準に対応しません。実際の ODBC TIME データ型では小数部が切り捨てられます。

SelectMode オプションの詳細は、このドキュメントの “InterSystems IRIS SQL の基礎” の章にある “データ表示オプション” を参照してください。

また、SET SELECTMODE を使用して、入力データを表示形式から論理格納形式に変換するか指定します。このデータ変換を行うには、SQL コードが RUNTIME 選択モードを使用してコンパイルされている必要があります実行時には、SET SELECTMODE は LOGICAL (既定) に設定する必要があります。詳細は、"InterSystems SQL リファレンス" の "INSERT" または "UPDATE" 文を参照してください。

SQL のメタデータ、クエリ・プラン、およびパフォーマンス・メトリック

メタデータの表示

SQL シェルでは、現在のクエリに関するメタデータ情報を表示するための、M または METADATA コマンドをサポートしています。

結果セット項目ごとに、このコマンドは次のメタデータをリストします : Column Name (SQL フィールド名)、Type (ODBC データ型整数コード)、Prec (精度 または 最大長)、Scale (最大小数桁数)、Null (ブーリアン: 1=NULL を許可、0=NULL を許可しない)、Label (ヘッダ・ラベル。"列エイリアス" を参照)、Table (SQL テーブル名)、Schema (スキーマ名)、CType (クライアント・データ型。%SQL.StatementColumnOpens in a new tab clientTypeOpens in a new tab プロパティを参照)。

詳細は、“ダイナミック SQL の使用法” の章の "select-item のメタデータ" を参照してください。

InterSystems SQL シェル・コマンドの詳細は、SQL プロンプトで ? を入力するか、"インターシステムズ・クラスリファレンス" の "%SYSTEM.SQL.Shell()" を参照してください。

SHOW STATEMENT

クエリを実行してから、SHOW STATEMENT または SHOW ST を発行することにより、作成済みの SQL 文を表示できます。既定では、クエリを実行する必要があります。executemode=deferred を設定し、クエリを発行してから SHOW STATEMENT SQL シェル・コマンドを発行することで、クエリの実行を回避することができます。

SHOW STATEMENT 情報は、実装クラス (クエリ・キャッシュ名)、引数 (TOP 節および WHERE 節のリテラル値など、実際の引数値のコンマ区切りリスト)、および文のテキスト (SQL コマンドのリテラル・テキスト、大文字/小文字および引数値を含む) で構成されます。

EXPLAIN と SHOW PLAN

SQL クエリのクエリ・プランは、2 つの方法で表示できます。どちらの方法でも、必要に応じて代替クエリ・プランを表示できます。

  • EXPLAIN : SELECT クエリの前に EXPLAIN コマンドを置きます。例を以下に示します。

    SQL]USER>>EXPLAIN SELECT Name FROM Sample.MyTable WHERE Name='Fred Rogers'
    
  • SHOW PLAN : クエリを発行してから、SHOW PLAN シェル・コマンドを発行します。例を以下に示します。

    SQL]USER>>SELECT Name FROM Sample.MyTable WHERE Name='Fred Rogers'
    SQL]USER>>SHOW PLAN
    

EXPLAIN SQL コマンドは、クエリを実行せずに、指定された SELECT クエリに関するクエリ・プラン情報を表示します。EXPLAIN ALT は、代替クエリ・プランを表示できます。EXPLAIN STAT は、パフォーマンス統計とクエリ・プランを返します。EXPLAIN は、SELECT クエリのクエリ・プランを返すためにのみ使用できます。クエリ操作を実行する INSERT、UPDATE、DELETE 文など、他のコマンドのクエリ・プランは返しません。

SHOW PLAN SQL シェル・コマンドを使用すると、SQL シェルによって正常に発行された最後のクエリのクエリ・プラン情報を表示できます。SHOW PLAN は、SELECT、INSERT、UPDATE、DELETE を含め、クエリ操作を実行する任意の SQL コマンドに使用できます。既定では、クエリを実行する必要があります。executemode=deferred を設定し、クエリを発行してから、次のいずれかの SQL シェル・コマンドを発行することで、クエリの実行を回避することができます。

  • SHOW PLANSHOW PL (または、単なる SHOW) は、現在のクエリに関するクエリ・プラン情報を表示します。クエリ・プランは、クエリのデバッグおよびパフォーマンスの最適化に使用できます。クエリに対するインデックスやコスト値の使用など、クエリの実行方法を指定します。クエリ・プランは、SELECT、DECLARE、非カーソルの UPDATE や DELETE、および INSERT...SELECT の文で返すことができます。このコマンドには、V (VERBOSE) オプションがあります。

  • SHOW PLANALT を使用して、現在のクエリの代替表示プランを表示します。このコマンドには、V (VERBOSE) オプションがあります。詳細は、"SQL 最適化ガイド" の "代替表示プラン" を参照してください。

InterSystems SQL シェル・コマンドの詳細は、SQL プロンプトで ? を入力するか、"インターシステムズ・クラス・リファレンス" の "%SYSTEM.SQL.Shell()" を参照してください。

$SYSTEM.SQL.Explain()Opens in a new tab メソッドを使用して、ObjectScript からクエリ・プランを生成できます。詳細は、"SQL 最適化ガイド" の "クエリ実行プラン" を参照してください。

クエリ・プランの解釈の詳細は、"SQL 最適化ガイド" の “SQL クエリ・プランの解釈” を参照してください。

SQL シェルのパフォーマンス

SQL 文が正常に実行された後に、SQL シェルには 4 つの文準備値 (times(s)/globals/cmds/disk) と 4 つの文実行値 (times(s)/globals/cmds/disk) が表示されます。

  • statement prepare time (文の準備時間) とは、ダイナミック文の準備にかかった時間です。これには、文の生成とコンパイルにかかった時間が含まれます。また、文のキャッシュで文を検索するためにかかった時間も含まれます。したがって、文が実行されてから、番号または名前で呼び出された場合、呼び出された文にかかった準備時間はほぼゼロになります。また、文が準備され実行されてから、GO コマンドの発行によって再実行された場合、再実行にかかった準備時間はゼロになります。

  • elapsed execute time (経過した実行時間) とは、%Execute() の呼び出しを起点として、%Display() から応答が返されるまでに経過した時間です。パラメータ値が入力されるまでの待機時間は含まれません。

文の globals はグローバル参照の数、cmds は実行された SQL コマンドの数、disk はディスク待ち時間 (ミリ秒単位) です。SQL シェルでは、準備操作と実行操作について別々の数が保持されます。

これらのパフォーマンス値が表示されるのは、DISPLAYMODE が currentdevice に設定され、MESSAGES が ON に設定されている場合のみです。これらは、SQL シェルの既定の設定です。

Transact-SQL のサポート

既定で、SQL シェルは InterSystems SQL コードを実行します。ただし、SQL シェルは Sybase コードまたは MSSQL コードの実行に使用できます。

DIALECT の設定

既定で、SQL シェルはコードを InterSystems SQL として解析します。SET DIALECT を使用して、Sybase コードまたは MSSQL コードを実行するように SQL シェルを構成することができます。現在の言語を変更するには、SET DIALECT で Sybase、MSSQL、または IRIS に設定します。既定値は Dialect=IRIS です。これらの SET DIALECT オプションでは、大文字と小文字は区別されません。

以下は、SQL シェルから MSSQL プログラムを実行する例です。

USER>DO $SYSTEM.SQL.Shell()
SQL Command Line Shell
----------------------------------------------
The command prefix is currently set to: <<nothing>>.
Enter q to quit, ? for help.
[SQL]USER>>SET DIALECT MSSQL

dialect = MSSQL
[SQL]USER>>SELECT TOP 5 name + '-' + ssn FROM Sample.Person
1.      SELECT TOP 5 name + '-' + ssn FROM Sample.Person
 
Expression_1
Zweifelhofer,Maria H.-559-20-7648
Vonnegut,Bill A.-552-41-2071
Clinton,Terry E.-757-30-8013
Bachman,Peter U.-775-59-3756
Avery,Emily N.-833-18-9563
 
5 Rows(s) Affected
statement prepare time: 0.2894s, elapsed execute time: 0.0467s.
---------------------------------------------------------------------------
[SQL]USER>>

Sybase 言語および MSSQL 言語が言語内でサポートする SQL 文は限定されています。サポートされる文は、SELECTINSERTUPDATE、および DELETE です。また、CREATE TABLE 文は、永続的なテーブルに対してはサポートされますが、一時テーブルに対してはサポートされません。CREATE VIEW はサポートされます。CREATE TRIGGERDROP TRIGGER もサポートされます。ただし、この実装では、CREATE TRIGGER 文が部分的に成功してもクラス・コンパイルに対しては失敗する場合には、トランザクション・ロールバックはサポートされません。CREATE PROCEDURECREATE FUNCTION はサポートされます。

COMMANDPREFIX の設定

SET COMMANDPREFIX を使用して、後続の SQL シェル・コマンドに付加する必要のある接頭語 (通常は 1 文字) を指定することができます。この接頭語は、SQL シェル・プロンプトから発行された SQL 文には使用されません。この接頭語の目的は、SQL シェル・コマンドと SQL コード文をはっきりと区別することにあります。例えば、SET は SQL シェル・コマンドであり、Sybase および MSSQL における SQL コード文でもあります。

既定では、コマンド接頭語はありません。コマンド接頭語を設定するには、SET COMMANDPREFIX=prefix を使用します (prefix は引用符なしで指定してください)。また、コマンド接頭語がない状態に戻すには、SET COMMANDPREFIX="" を使用します。以下の例は、設定、使用、および元に戻されるコマンド接頭語の / (スラッシュ文字) の例を示しています。

USER>DO $SYSTEM.SQL.Shell()
SQL Command Line Shell
----------------------------------------------------
 
The command prefix is currently set to: <<nothing>>.
Enter q to quit, ? for help.
[SQL]USER>>SET COMMANDPREFIX=/
 
commandprefix = /
[SQL]USER>>/SET LOG=ON
 
log = xsql4148.log
[SQL]USER>>  << entering multiline statement mode >>
        1>>SELECT TOP 3 Name,Age
        2>>FROM Sample.Person
        3>>/GO
9.      SELECT TOP 3 Name,Age
        FROM Sample.Person
 
Name    Age
Frith,Jose M.   13
Finn,William D. 15
Ximines,Uma Y.  44
 
3 Rows(s) Affected
statement prepare time: 0.0010s, elapsed execute time: 0.0014s.
---------------------------------------------------------------------------
[SQL]USER>>/SET COMMANDPREFIX
 
commandprefix = /
[SQL]USER>>/SET COMMANDPREFIX=""
 
commandprefix = ""
[SQL]USER>>SET COMMANDPREFIX
 
commandprefix =
[SQL]USER>>

コマンド接頭語を設定する場合は、すべての SQL シェル・コマンドに使用する必要がありますが、?、#、および GO は例外です。これら 3 つの SQL シェル・コマンドは、コマンド接頭語があってもなくても発行することができます。

SQL シェルでは、SET コマンドまたは SET COMMANDPREFIX コマンドを発行すると、SQL シェルの初期化の一部として、また ? コマンドのオプション表示の最後に、現在のコマンド接頭語が表示されます。

RUN コマンド

SQL シェルの RUN コマンドは、SQL スクリプト・ファイルを実行します。RUN コマンドを発行する前に SET DIALECT を使用して、IRIS (InterSystems SQL)、Sybase (Sybase TSQL)、MSSQL (Microsoft SQL) のいずれかを指定する必要があります。既定の言語は IRIS です。RUN scriptname を呼び出すことも、単に RUN を呼び出してスクリプト・ファイル名の入力を求められるようにすることもできます。

RUN は、スクリプト・ファイルをロードし、ファイルに含まれるそれぞれの文を作成して実行します。スクリプト・ファイル内の文は、通常 GO 行またはセミコロン (;) で区切る必要があります。RUN コマンドによって、区切り文字を指定するように求められます。

SQL スクリプト・ファイルの結果は、現在のデバイスに表示されます。また、オプションでログ・ファイルに記録することもできます。必要に応じて、作成に失敗した文が格納されるファイルを生成することもできます。

RUN コマンドは、以下の例に示すように、これらのオプションを指定するように求めるプロンプトを返します。

[SQL]USER>>SET DIALECT=Sybase

dialect = Sybase
[SQL]USER>>RUN
 
Enter the name of the SQL script file to run: SybaseTest
 
Enter the file name that will contain a log of statements, results and errors (.log): SyTest.log
     SyTest.log
 
Many script files contain statements not supported by IRIS SQL.
Would you like to log the statements not supported to a file so they
can be dealt with manually, if applicable?   Y=> y
Enter the file name in which to record non-supported statements (_Unsupported.log): SyTest_Unsupported.log
 
Please enter the end-of-statement delimiter (Default is 'GO'):  GO=>
 
Pause how many seconds after error?   5 => 3
 
Sybase Conversion Utility (v3)
Reading source from file:
Statements, results and messages will be logged to: SyTest.log
.
.
.

TSQL の例

以下の SQL シェルの例は、AvgAge という Sybase プロシージャを作成します。そのプロシージャが、Sybase EXEC コマンドを使用して実行されます。その後、言語が InterSystems IRIS に変更され、InterSystems SQL の CALL コマンドを使用して同じプロシージャが実行されます。

[SQL]USER>>SET DIALECT Sybase
 
dialect = Sybase
[SQL]USER>>  << entering multiline statement mode >>
        1>>CREATE PROCEDURE AvgAge
        2>>AS SELECT AVG(Age) FROM Sample.Person
        3>>GO
12.     CREATE PROCEDURE AvgAge
        AS SELECT AVG(Age) FROM Sample.Person
 
 
statement prepare time: 0.1114s, elapsed execute time: 0.4364s.
---------------------------------------------------------------------------
[SQL]USER>>EXEC AvgAge
13.     EXEC AvgAge
 
 
 
Dumping result #1
Aggregate_1
44.35
 
1 Rows(s) Affected
statement prepare time: 0.0956s, elapsed execute time: 1.1761s.
---------------------------------------------------------------------------

[SQL]USER>>SET DIALECT=IRIS
 
dialect = IRIS
[SQL]USER>>CALL AvgAge()
14.     CALL AvgAge()
 
 
 
Dumping result #1
Aggregate_1
44.35
 
1 Rows(s) Affected
statement prepare time: 0.0418s, elapsed execute time: 0.0040s.
---------------------------------------------------------------------------
[SQL]USER>>
FeedbackOpens in a new tab