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

SET OPTION (SQL)

実行オプションを設定します。

Synopsis

SET OPTION option_keyword = value

概要

SET OPTION 文では、コンパイル・モード、SQL 構成設定、および日付、時刻、数値規則を管理するロケール設定などの、実行オプションを設定します。SET OPTION 文ごとに、キーワード・オプションを 1 つのみ設定できます。

SET OPTION は、次のオプションをサポートします。

SET OPTION は、ダイナミック SQL (SQL シェルを含む) と埋め込み SQL で使用できます。

他の SET OPTION 引数 (ここには記載されていません) は、InterSystems IRIS で SQL 互換性に対して解析されますが、実行はしません。

SET OPTION はすぐに作成および実行され、通常一度しか実行されないため、InterSystems IRIS では、ODBC、JDBC、またはダイナミック SQL での SET OPTION にはクエリ・キャッシュは作成されません。

InterSystems IRIS でサポートされているオプションは以下のとおりです。

AUTO_PARALLEL_THRESHOLD

AUTO_PARALLEL_THRESHOLD オプションは、自動並列処理が有効な場合に、並列処理をクエリに適用するかどうかを決定する整数 n に設定されます。並列処理にはパフォーマンス・コストが伴うため、並列処理に優位性があるかどうかを判断するしきい値を設定する必要があります。n の値が高いほど、InterSystems SQL クエリが並列処理を使用して実行される可能性は低くなります。既定値は 3200 です。これは、システム全体の設定です。値 n は、アクセスしたマップで並列処理を実行するために必要なタプルの最小数にほぼ相当します。

AutoParallel が無効な場合、AUTO_PARALLEL_THRESHOLD オプションには何の効果もありません。

このオプションは、$SYSTEM.SQL.Util.SetOption()Opens in a new tab メソッドの AutoParallelThreshold オプションを使用して設定することもできます。

詳細は、"AutoParallelThreshold" を参照してください。

COMPILEMODE

COMPILEMODE オプションを使用して、現在のネームスペースのコンパイル・モードを、DEFERRED、IMMEDIATE、INSTALL、または NOCHECK に設定します。既定値は IMMEDIATE です。DEFERRED から IMMEDIATE コンパイル・モードへ変更すると、Deferred Compile Queue のいずれのクラスもすぐにコンパイルされるようになります。すべてのクラスのコンパイルが成功すると、InterSystems IRIS は SQLCODE を 0 に設定します。エラーがある場合は -400 に設定します。クラス・コンパイルのエラーは ^mtemp2 ("Deferred Compile Mode","Error") に記録されています。SQLCODE が -400 に設定された場合は、このグローバル構造を表示して、エラーの詳細メッセージを調べます。INSTALL コンパイル・モードは DEFERRED コンパイル・モードと似ていますが、テーブルにデータがない DDL インストールにのみ使用してください。

NOCHECK コンパイル・モードは IMMEDIATE と似ていますが、コンパイル時には以下の制約のチェックをスキップします : テーブルが削除される場合、InterSystems IRIS は削除するテーブルを参照する別のテーブルにある外部キー制約をチェックしません。外部キー制約が追加される場合、InterSystems IRIS は既存のデータをチェックしてその外部キーの有効性を保証するということはしません。NOT NULL 制約が追加される場合、InterSystems IRIS は既存のデータに NULL データがあるかチェックしたり、フィールドの既定値を割り当てたりすることはしません。UNIQUE または主キー制約が削除される場合、InterSystems IRIS はそのテーブルまたは別のテーブルの外部キーが、削除されるキーを参照しているかどうかはチェックしません。

このオプションは、$$SYSTEM.SQL.Util.SetOption()Opens in a new tab メソッドの CompileMode オプションを使用して設定することもできます。

DEFAULT_SCHEMA

DEFAULT_SCHEMA オプションは、すべてのネームスペースのシステム全体の既定スキーマを設定します。この既定は、明示的に変更するまで有効です。既定スキーマ名を使用して、すべての未修飾のテーブル、ビュー、またはストアド・プロシージャの名前にスキーマ名を指定できます。

リテラル・スキーマ名を指定するか、_CURRENT_USER を指定できます。_CURRENT_USER を既定のスキーマ名として指定すると、現在ログインしているプロセスのユーザ名が既定のスキーマ名として割り当てられます。詳細は、"InterSystems SQL の使用法" の "テーブルの定義" の章にある "スキーマ名" を参照してください。

EXACT_DISTINCT

EXACT_DISTINCT ブーリアン・オプションは、システム全体で DISTINCT 処理 (TRUE) と FastDistinct 処理 (FALSE) のどちらを使用するのかを指定します。FastDistinct 処理を使用することが、システム全体の既定です。

EXACT_DISTINCT=TRUE の場合、GROUP BY および DISTINCT クエリはオリジナルの値を結果に返します。EXACT_DISTINCT=FALSE で、FastDistinct が有効な場合、インデックスの効果的な使用により (可能な場合)、DISTINCT および GROUP BY を含んだ SQL クエリを実行するときの効率が向上します。ただし、このクエリによって返される値は、インデックス内に格納されるときと同じ方法で照合されます。このため、このクエリの結果はすべて大文字になることがあります。これは、大文字と小文字を区別するアプリケーションに影響する場合があります。

このオプションは、$$SYSTEM.SQL.Util.SetOption()Opens in a new tab メソッドの FastDistinct ブーリアン・オプションを使用して設定することもできます。

詳細は、"FastDistinct" を参照してください。

LOCK_ESCALATION_THRESHOLD

LOCK_ESCALATION_THRESHOLD オプションは、行のロックをテーブルのロックにエスカレートする時期を決定する整数 n に設定されます。既定値は 1000 です。1 つのトランザクション内で 1 つのテーブルに対して実行された挿入、更新、および削除の数が値 n に達すると、テーブルレベル・ロックがトリガされます。これは、すべてのネームスペースのシステム全体の設定です。例えば、ロックしきい値が 1000 で、プロセスがトランザクションを開始してから 2000 行を挿入したとします。1001 番目の行を挿入した後、プロセスは、引き続き個々の行をロックするのではなく、テーブルレベルのロックを取得しようとします。これにより、ロック・テーブルが一杯になるのを防ぐことができます。

このオプションは、$SYSTEM.SQL.Util.SetOption()Opens in a new tab メソッドの LockThreshold オプションを使用して設定することもできます。

詳細は、"InterSystems SQL リファレンス" の “INSERT” のリファレンス・ページにある "トランザクションのロックしきい値の変更" のセクションを参照してください。

LOCK_TIMEOUT

LOCK_TIMEOUT 数値オプションにより、現在のプロセスの既定のロック・タイムアウトを設定できます。LOCK_TIMEOUT value は、SQL の実行中にロックを確立しようとする操作を待機する秒数です。ロックの競合が発生すると現在のプロセスでは LOCKINSERTUPDATEDELETE、または SELECT の各操作に対してレコード、テーブル、または他のエンティティを直ちにロックできない場合に、このロックに対するタイムアウトを使用します。InterSystems SQL はタイムアウトになるまでロックを確立しようとしますが、タイムアウトになると SQLCODE -110 または -114 エラーを生成します。

使用できる値は正の整数と 0 です。タイムアウトの設定はプロセスごとに行います。現在のプロセスのロック・タイムアウト設定を確認するには、$SYSTEM.SQL.Util.GetOption("ProcessLockTimeout")Opens in a new tab メソッドを使用します。

現在のプロセスに対してロック・タイムアウトを設定していない場合、これは既定で現在のシステム全体のロック・タイムアウト設定になります。ODBC 接続を切断し、再接続する場合、現在のシステム全体のロック・タイムアウト設定を使用して再接続します。既定のシステム全体のロック・タイムアウトは、10 秒です。

ロックの競合、およびプロセスごとあるいはシステム全体の SQL ロック・タイムアウト設定の詳細は、"LOCK" コマンドを参照してください。

PKEY_IS_IDKEY

PKEY_IS_IDKEY ブーリアン・オプションでは、主キーもシステム全体で ID キーであるか否かを指定します。利用可能な値は TRUE と FALSE です。TRUE であり、フィールドにデータがない場合、主キーが ID キーとして作成されます。つまり、テーブルの主キーがクラス定義の IDKey インデックスにもなります。フィールドにデータがある場合、IDKey インデックスは定義されません。主キーを IDKey インデックスとして定義すると、データ・アクセスはより効率的ですが、一度設定された主キー値は変更できません。設定後は、主キーに割り当てられた値の変更や、別のキーを主キーに割り当てることはできません。このオプションを使用すると、主キーを照合する既定値も変更され、主キー文字列値は EXACT 照合を既定値に設定します。FALSE の場合、主キーと ID キーが別々に定義され、効率が低くなります。ただし、主キー値は変更可能であり、主キー文字列値は既定で現在の照合タイプの既定値になります。これは既定では SQLUPPER です。

PKEY_IS_IDKEY オプションを設定するには、%Admin_Manage:USE 特権が必要です。この特権がないと、SQLCODE -99 エラー (特権違反) になります。このオプションを一度設定すると、システム全体ですべてのプロセスに対して有効です。次の方法で、このオプションのシステム全体の既定を設定することもできます。

  • システム全体の $SYSTEM.SQL.Util.SetOption()Opens in a new tab メソッド構成オプション DDLPKeyNotIDKey。現在の設定を確認するには、$SYSTEM.SQL.CurrentSettings()Opens in a new tab を呼び出します。これにより、「DDLで作成された主キーはIDキーではありませんか」と表示されます。既定値は 1 です。

  • 管理ポータルの構成設定。[システム管理][構成][SQL およびオブジェクトの設定][SQL] の順に選択します。[DDL を使用して作成されたテーブルの ID キーとして主キーを定義する] の現在の設定を表示または変更します。

この PKEY_IS_IDKEY 設定は、他の SET OPTION PKEY_IS_IDKEY 経由でリセットするか、InterSystems IRIS 構成を再起動して、InterSystems IRIS システム構成の設定パラメータがリセットされるまで有効です。

SUPPORT_DELIMITED_IDENTIFIERS

既定では、システム全体で区切り識別子がサポートされています。SUPPORT_DELIMITED_IDENTIFIERS ブーリアン・オプションを使用すると、区切り識別子のサポートをシステム全体について変更できます。利用可能な値は TRUE と FALSE です。TRUE の場合、二重引用符で区切られた文字列は、SQL 文の識別子と考えられます。FALSE の場合、SQL 文の文字列リテラルと考えられます。

SUPPORT_DELIMITED_IDENTIFIERS オプションを設定するには、%Admin_Manage:USE 特権が必要です。この特権がないと、SQLCODE -99 エラー (特権違反) になります。このオプションを一度設定すると、システム全体ですべてのプロセスに対して有効です。別の SET OPTION SUPPORT_DELIMITED_IDENTIFIERS によってリセットされるか、$SYSTEM.SQL.Util.SetOption()Opens in a new tab メソッドの DelimitedIdentifiers オプションによってシステム全体で変更されるまで、SUPPORT_DELIMITED_IDENTIFIERS の設定は有効なままになります。

現在の設定を確認するには、$SYSTEM.SQL.CurrentSettings()Opens in a new tab を呼び出します。

ロケール・オプション

ロケール・オプションは、現在のプロセスの日付、時刻、数値規則の InterSystems IRIS ロケール設定に使用するキーワード・オプションです。利用可能なキーワード・オプションは、AM、DATE_FORMAT、DATE_MAXIMUM、DATE_MINIMUM、DATE_SEPARATOR、DECIMAL_SEPARATOR、MIDNIGHT、MINUS_SIGN、MONTH_ABBR、MONTH_NAME、NOON、NUMERIC_GROUP_SEPARATOR、NUMERIC_GROUP_SIZE、PM、PLUS_SIGN、TIME_FORMAT、TIME_PRECISION、TIME_SEPARATOR、WEEKDAY_ABBR、WEEKDAY_NAME、および YEAR_OPTION です。これらのオプションはすべてリテラルに設定可能で、いずれも既定 (アメリカ英語記述規則) をとります。TIME_PRECISION オプションの設定は変更できます (以下を参照)。これらオプションのいずれかを無効な値に設定すると、InterSystems IRIS は、"SQLCODE -129 エラー (SET OPTION のロケール・プロパティの値が不正です)" を発行します。日付と時刻の形式およびオプションの詳細は、ObjectScript "$ZDATETIME" 関数を参照してください。

日付/時刻オプション・キーワード 説明
AM 文字列。既定値は 'AM' です。
DATE_FORMAT 整数。既定値は 1 です。使用できる値は 0 から 15 です。これらの日付形式の詳細は、ObjectScript "$ZDATE" 関数を参照してください。
DATE_MAXIMUM 整数。既定値は 2980013 (12/31/9999) です。前の日付は設定できますが、後の日付はできません。
DATE_MINIMUM 正整数。既定値は 0 (12/31/1840) です。後の日付は設定できますが、前の日付はできません。
DATE_SEPARATOR 文字。既定値は '/' です。
DECIMAL_SEPARATOR 文字。既定値は '.' です。
MIDNIGHT 文字列。既定値は 'MIDNIGHT' です。
MINUS_SIGN 文字。既定値は '-' です。
MONTH_ABBR 文字列。既定値は 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec' です (この文字列は、既定の区切り文字である空白文字で始まります)。
MONTH_NAME 文字列。既定値は 'January February March April May June ...November December' です。(この文字列は、既定の区切り文字である空白文字で始まります)。
NOON 文字列。既定値は 'NOON' です。
NUMERIC_GROUP_SEPARATOR 文字。既定値は ',' です。
NUMERIC_GROUP_SIZE 整数。既定値は 3 です。
PM 文字列。既定値は 'PM' です。
PLUS_SIGN 文字。既定値は '+' です。
TIME_FORMAT 整数。既定値は 1 です。使用できる値は 1 から 4 です。これらの時刻形式の詳細は、ObjectScript "$ZTIME" 関数を参照してください。
TIME_PRECISION 0 ~ 9 の整数。既定値は 0。秒の小数部の桁数。以下のように設定できます。
TIME_SEPARATOR 文字。既定値は ':' です。
WEEKDAY_ABBR 文字列。既定値は 'Sun Mon Tue Wed Thu Fri Sat' です (この文字列は、既定の区切り文字である空白文字で始まります)。
WEEKDAY_NAME 文字列。既定値は 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday' です (この文字列は、既定の区切り文字である空白文字で始まります)。
YEAR_OPTION 整数。既定値は 0 です。使用できる値は 0 から 6 です。2 桁および 4 桁の年のこれらの表示方法の詳細は、ObjectScript "$ZDATE" 関数を参照してください。

TIME_PRECISION をシステム全体で構成するには、管理ポータルに進み、[システム管理][構成][SQL およびオブジェクトの設定][SQL] の順に選択します。[GETDATE()、CURRENT_TIME、および CURRENT_TIMESTAMP の既定の時間精度] の現在の設定を表示して編集します。これは、秒の小数部の精度の桁数を示します。既定値は 0 です。有効な値の範囲は、0 ~ 9 桁の精度です。実際の秒の小数部の有効桁数はプラットフォームにより異なります。

関連項目

FeedbackOpens in a new tab