Hitachi

Hitachi Advanced Data Binder AP開発ガイド


2.2.4 SQLに関するオペランド

adb_sql_prep_delrsvd_use_srvdef = Y|N}

サーバ定義のadb_sql_prep_delrsvd_wordsオペランドの指定に従って予約語を削除するかどうかを指定します。

削除される予約語については,サーバ定義のadb_sql_prep_delrsvd_wordsオペランドの指定を確認してください。

Y

サーバ定義のadb_sql_prep_delrsvd_wordsオペランドの指定を有効にします(サーバ定義のadb_sql_prep_delrsvd_wordsオペランドに指定した予約語を削除します)。

N

サーバ定義のadb_sql_prep_delrsvd_wordsオペランドの指定を無効にします(サーバ定義のadb_sql_prep_delrsvd_wordsオペランドに指定した予約語は削除されません)。

このオペランドの指定を省略した場合,Yが仮定されます。

adb_clt_trn_iso_lv = {READ_COMMITTED|REPEATABLE_READ}

適用するトランザクション隔離性水準を指定します。トランザクション隔離性水準については,マニュアルHADB システム構築・運用ガイドHADBがサポートしているトランザクション隔離性水準を参照してください。

READ_COMMITTED

トランザクション隔離性水準にREAD COMMITTEDを適用します。

REPEATABLE_READ

トランザクション隔離性水準にREPEATABLE READを適用します。

このオペランドを省略した場合,サーバ定義のadb_sys_trn_iso_lvオペランドに指定したトランザクション隔離性水準が適用されます。

[マルチノード機能]
  • 次に示すすべての条件を満たす場合に,セカンダリノードに対してもトランザクションの実行処理が割り当てられます。

    ・トランザクションアクセスモードが読み取り専用モードである

    ・トランザクション隔離性水準がREAD COMMITTEDである

    そのため,セカンダリノードのリソースを活用したい場合は,このオペランドにREAD_COMMITTEDを指定することを推奨します。

  • 読み書き可能モードのトランザクションや,一部のコマンドがプライマリノードで実行中の間は,すべてのトランザクションがプライマリノードで実行されます。セカンダリノードではトランザクションが実行されません。詳細については,マニュアルHADB システム構築・運用ガイドトランザクションおよびコマンドが実行されるノードを参照してください。

    また,ここでいう一部のコマンドについては,マニュアルHADB システム構築・運用ガイドトランザクションおよびコマンドが実行されるノードトランザクションとコマンドの同時実行についての制限を参照してください。

adb_clt_trn_access_mode = READ_WRITE|READ_ONLY}

トランザクションアクセスモードを指定します。トランザクションアクセスモードについては,マニュアルHADB システム構築・運用ガイドトランザクションアクセスモードを参照してください。

READ_WRITE

トランザクションアクセスモードを読み書き可能モードにします。この場合,トランザクションは読み書き可能トランザクションになり,すべてのSQL文を実行できます。

READ_ONLY

トランザクションアクセスモードを読み取り専用モードにします。この場合,トランザクションは読み取り専用トランザクションになるため,更新系SQLおよび定義系SQLは実行できません。

なお,ここで設定したトランザクションアクセスモードを,次のコネクション属性の設定で変更することができます。

  • ODBC関数の場合:SQLSetConnectAttrまたはSQLSetConnectAttrW

  • CLI関数の場合:a_rdb_SQLSetConnectAttr()

このオペランドおよびコネクション属性の両方のトランザクションアクセスモードの指定を省略した場合,トランザクションアクセスモードは読み書き可能モードになります。

[マルチノード機能]
  • 次に示すすべての条件を満たす場合に,セカンダリノードに対してもトランザクションの実行処理が割り当てられます。

    ・トランザクションアクセスモードが読み取り専用モードである

    ・トランザクション隔離性水準がREAD COMMITTEDである

    そのため,セカンダリノードのリソースを活用したい場合は,このオペランドにREAD_ONLYを指定することを推奨します。

  • 読み書き可能モードのトランザクションや,一部のコマンドがプライマリノードで実行中の間は,すべてのトランザクションがプライマリノードで実行されます。セカンダリノードではトランザクションが実行されません。詳細については,マニュアルHADB システム構築・運用ガイドトランザクションおよびコマンドが実行されるノードを参照してください。

    また,ここでいう一部のコマンドについては,マニュアルHADB システム構築・運用ガイドトランザクションおよびコマンドが実行されるノードトランザクションとコマンドの同時実行についての制限を参照してください。

adb_clt_sql_text_out ={Y|N

HADBクライアントが発行したSQL文を,クライアントメッセージログファイルおよびサーバメッセージログファイルに出力するかどうかを指定します。

なお,出力される各SQL文の長さの上限は2,048バイトです。

Y

SQL文をクライアントメッセージログファイルおよびサーバメッセージログファイルに出力します。

N

SQL文をクライアントメッセージログファイルおよびサーバメッセージログファイルに出力しません。

サーバ定義のadb_sql_text_outオペランドとの関係を次の表に示します。

表2‒1 サーバ定義のadb_sql_text_outオペランドとの関係

サーバ定義のadb_sql_text_outオペランドの指定

クライアント定義のadb_clt_sql_text_outオペランドの指定

Y

N

Y

N

×

(凡例)

◎:SQL文をサーバメッセージログファイルおよびクライアントメッセージログファイルの両方に出力します。

○:SQL文をサーバメッセージログファイルにだけ出力します。

×:SQL文をどちらのメッセージログファイルにも出力しません。

また,このオペランドを指定すると,トランザクションの正常終了を示すKFAA81002-Iメッセージがサーバメッセージログファイルに出力されるようになります。クライアントメッセージログファイルには出力されません。

このオペランドの指定を省略した場合,Nが仮定されます。

adb_clt_sql_order_mode = {BYTE|ISO}

ORDER BY句を指定したSELECT文の文字データの並び替え順序を指定します。

BYTE

文字データをバイトコード順に並び替えます。

ISO

文字データをソートコード順(ISO/IEC14651:2011準拠)に並び替えます。

ただし,環境変数ADBCLTLANGSJISを指定した場合は,このオペランドにISOは指定できません。

なお,文字データの並び替え順序は,サーバ定義adb_sql_order_modeオペランド,およびコネクション属性でも指定できます。それぞれ指定した場合は,次の表に示す優先順位に従って指定が決まります(優先順位の番号が小さいほど,優先順位が高くなります)。

表2‒2 文字データの並び替え順序の優先順位

優先順位

文字データの並び替え順序の指定個所

1

コネクション属性

2

クライアント定義adb_clt_sql_order_modeオペランド

3

サーバ定義adb_sql_order_modeオペランド

[説明]

例えば,クライアント定義adb_clt_sql_order_modeオペランドにBYTEを指定し,サーバ定義adb_sql_order_modeオペランドにISOを指定した場合,APから実行するSELECT文(ORDER BY句を指定)には,BYTEが適用されます。

なお,表中のすべての個所で指定を省略した場合は,BYTEが仮定されます。

adb_sql_prep_dec_div_rs_prior = {INTEGRAL_PART|FRACTIONAL_PART}

SQL文中に指定した除算(四則演算)の結果のデータ型がDECIMAL型の場合,除算結果の位取りの最小値を指定します。

INTEGRAL_PART

除算結果の位取りの最小値を0とします。INTEGRAL_PARTを指定した場合,整数部の桁数が優先されます。そのため,除算結果が大きな数値となる可能性があり,オーバフローエラーの発生を極力回避したい場合は,INTEGRAL_PARTを指定してください。

FRACTIONAL_PART

除算の第1演算項(被除数)の位取りを,除算結果の位取りの最小値とします。FRACTIONAL_PARTを指定した場合,第1演算項の小数部の桁数が,除算結果の小数部の桁数の最小値になります。

第1演算項をDECIMAL(p1,s1),第2演算項をDECIMAL(p2,s2)とした場合,除算結果はDECIMAL(38,s)となります。

  • INTEGRAL_PARTを指定した場合

    s=MAX{0,38−(p1s1s2)}

  • FRACTIONAL_PARTを指定した場合

    s=MAX{s1,38−(p1s1s2)}

このオペランドの指定値による除算結果の違いの例を次に示します。

(例)

[図データ]

次のSELECT文を実行したとします。

SELECT "C1"/"C2" AS "除算結果" FROM "T1"
  • INTEGRAL_PARTを指定した場合の除算結果

    584.

  • FRACTIONAL_PARTを指定した場合の除算結果

    584.4457

ビュー表を検索したときの除算結果の位取りの例については,マニュアルHADB SQLリファレンス除算結果のデータ型がDECIMAL型の場合の留意事項を参照してください。

このオペランドの指定を省略した場合,サーバ定義のadb_sql_prep_dec_div_rs_priorオペランドの指定値が適用されます。