Hitachi

ノンストップデータベース HiRDB Version 9 システム定義(Windows(R)用)


9.2.10 SQLの仕様に関するオペランド

◆ pd_overflow_suppress = Y|N

演算中のエラー抑止について指定します。エラー抑止の対象を次に示します。

  • 演算途中でのオーバフロー

  • 0除算エラー

Y:

SQL実行時の演算中に対象となるエラーが発生した場合,演算結果をナル値にして処理を続行します。

N:

SQL実行時の演算中に対象となるエラーが発生した場合,エラーで処理を取り消します。

◆ pd_space_level = 0|1|3

空白変換機能を使用する場合の空白変換レベルを指定します。空白変換機能については,マニュアル「HiRDB Version 9 システム運用ガイド」を参照してください。

0:空白変換レベル0を指定します。

1:空白変換レベル1を指定します。

3:空白変換レベル3を指定します。

空白変換レベルの処理方式を次に示します。

レベル

説明

レベル0

空白変換をしません。

レベル1

操作系SQLでの定数,埋込み変数,又は?パラメタのデータの空白を次のように変換します。

  • 文字列定数を各国文字列定数とみなした場合,半角空白2文字を全角空白1文字に変換します。なお,半角空白が1文字単独で現れる場合は変換しません。

  • 文字列定数を混在文字列定数とみなした場合,全角空白1文字を半角空白2文字に変換します。

  • 各国文字列型の列へのデータの格納時,及び各国文字列型の値式との比較時は,埋込み変数,又は?パラメタの半角空白2文字を全角空白1文字に変換します。なお,半角空白が1文字単独で現れる場合は変換しません。

  • 混在文字列型の列へのデータの格納時,及び混在文字列型の値式との比較時は,埋込み変数,又は?パラメタの全角空白1文字を半角空白2文字に変換します。

レベル3

空白変換レベル1の処理に加えて次の処理が加わります。

  • 各国文字列型の値式のデータを検索するときに,全角空白1文字を半角空白2文字に変換します。

《注意事項》
  • 空白変換レベルを変更した場合,変更の前後でUAPの結果が異なる場合があります。UAPの結果を同じにしたい場合には,空白変換レベルを変更しないでください。

  • 空白変換レベル3を指定してソートをした場合,HiRDBはソートの結果に対して空白変換をするため,期待した結果を得られないことがあります。

  • クラスタキーの列へデータを格納する場合,空白変換によってユニークエラーとなることがあります。この場合,空白変換をしないでデータを格納するか,又はデータベース再編成ユティリティで既存のデータベースの空白を統一してください。

  • 各国文字列の空白変換は,先頭から2文字単位で変換します。

  • 空白変換レベルに1又は3を指定したときの注意事項を次に示します。

    ハッシュ分割した表に対して,表分割ハッシュ関数を使用したUAPで格納先RDエリアを求める場合は,表分割ハッシュ関数の引数に空白変換レベルを指定してください。指定しないと表分割ハッシュ関数の結果が不正になることがあります。

    キーレンジ分割(分割キーが各国文字データ又は混在文字データの場合)した表に対して,UAPでキーレンジ分割処理をしている場合は,分割キー値を空白変換関数で変換してください。変換しないとキーレンジ分割の結果が不正になることがあります。

    表分割ハッシュ関数,及び空白変換関数については,マニュアル「HiRDB Version 9 UAP開発ガイド」を参照してください。

《クライアント環境定義との関連》

このオペランドの値はクライアントごとに変更できます。クライアントごとに変更する場合は,クライアント環境定義のPDSPACELVLオペランドを指定してください。PDSPACELVLオペランドについては,マニュアル「HiRDB Version 9 UAP開発ガイド」を参照してください。

◆ pd_dec_sign_normalize = Y|N

UAPから渡された符号付きパック形式データの符号部を正規化するかどうかを指定します(DECIMAL型の符号正規化機能を使用するかどうかを指定します)。符号部を正規化するとは,符号付きパック形式データの符号部A〜FをC又はDに変換することを意味しています。

DECIMAL型の符号正規化機能については,マニュアル「HiRDB Version 9 システム運用ガイド」を参照してください。

Y:

DECIMAL型の符号正規化機能を使用します。符号付きパック形式データの符号部を正規化します。A〜FをDECIMALデータの符号部とみなします。

N:

DECIMAL型の符号正規化機能を使用しません。符号付きパック形式データの符号部を正規化しません。C,D,FをDECIMALデータの符号部とみなします。

《注意事項》

Yを指定した場合(DECIMAL型の符号正規化機能を使用する場合)の注意事項を次に示します。

  • ハッシュ分割した表に対して,表分割ハッシュ関数を使用したUAPで格納先RDエリアを求める場合は,表分割ハッシュ関数の引数に「DECIMAL型の符号正規化機能あり」を指定してください。指定しないと表分割ハッシュ関数の結果が不正になることがあります。

  • キーレンジ分割(分割キーがDECIMAL型のデータの場合)した表に対して,UAPでキーレンジ分割処理をしている場合は,分割キー値をDECIMAL型符号正規化関数で変換してください。変換しないとキーレンジ分割の結果が不正になることがあります。

表分割ハッシュ関数,及びDECIMAL型符号正規化関数については,マニュアル「HiRDB Version 9 UAP開発ガイド」を参照してください。

◆ pd_sql_dec_op_maxprec = 演算結果が29けた以下のDECIMAL型となる精度の最大値

〜<符号なし整数>(( 29|38 ))

  • 0904互換モードの場合:《29》

次に示す最大値を指定します。

  • 演算結果のデータ型がDECIMAL型となる精度の最大値

    ・29けた以下のデータだけに対する四則演算

    ・29けた以下のデータだけに対する集合関数AVG/SUM

    ・29けた以下のデータだけに対するスカラ関数DECIMAL/VALUE/GREATEST/LEAST

    ・引数がFLOAT型でかつ,精度を省略したスカラ関数DECIMAL

    ・対応するTHEN句及びELSE句の値が29けた以下のデータだけのCASE式

    ・抽象データ型のパラメタを含み,戻り値のデータ型が29けた以下であるユーザ定義関数だけが「候補となる関数」となる関数の呼び出し

  • 集合演算の結果列のデータ型がDECIMAL型となる場合,集合演算の導出表に対応する列が29けた以下のデータだけのときの精度の最大値

《指定値の目安》
  • バージョン09-04以前のHiRDBをバージョンアップする場合

    バージョンアップ前にこのオペランドに38を指定していないときは,このオペランドに29を指定するか,0904互換モードを適用してください。

  • 上記以外の場合

    このオペランドはアプリケーションの作りに依存します。

    アプリケーションで使用する29けた以下のデータに対する演算結果のDECIMAL型の精度を29けたで扱いたい場合は29にしてください。

    そうでない場合は,38を指定するか,このオペランドを省略してください。

《注意事項》

このオペランドを変更した場合,DECIMAL型を使用するアプリケーションに影響が出ます。

次に示す値式の結果のデータや問合せ指定の結果を取得するアプリケーションは修正が必要になります。また,ビュー表,トリガ,ルーチン,又は検査制約を持つ表に,次の値式又は問合せ指定を含む場合,実行時にDECIMAL型の演算がオーバフローしたり,ビュー表の検索がエラーとなったりするおそれがあるため,ビュー表,トリガ,ルーチン,又は検査制約を持つ表を再作成してください。

なお,トリガの再作成は,ALTER TRIGGER,及びALTER ROUTINEでするのではなく,トリガを一度削除した後,再度作成してください。

  • 29けた以下のデータだけに対する四則演算

  • 29けた以下のデータだけに対する集合関数AVG,SUM

  • 29けた以下のデータだけに対するスカラ関数DECIMAL,VALUE,GREATEST,LEAST

  • 引数がFLOAT型でかつ,精度を省略したスカラ関数DECIMAL

  • 対応するTHEN句及びELSE句の値が29けた以下のデータだけのCASE式

  • 抽象データ型のパラメタを含み,戻り値のデータ型が29けた以下であるユーザ定義関数だけが「候補となる関数」となる関数の呼び出し

  • 集合演算の結果列のデータ型がDECIMALとなる場合で,集合演算の演算対象導出表の対応する列が29けた以下のデータだけの問合せ指定

《各見積もり式への影響》

pd_sql_dec_op_maxprecオペランドの指定値を変更すると,次の見積もり式に影響があります。

マニュアル「HiRDB Version 9 システム導入・設計ガイド」:

  • 「HiRDB/シングルサーバのメモリ所要量の見積もり」の「グループ分け高速化機能実行時に必要なメモリ所要量の求め方」

  • 「HiRDB/パラレルサーバのメモリ所要量の見積もり」の「グループ分け高速化機能実行時に必要なメモリ所要量の求め方」

◆ pd_sql_mode = 0|1

SQL文中に集合演算子MINUSを使用するかどうかを指定します。

0:集合演算子MINUSを使用しません。

1:集合演算子MINUSを使用します。

《注意事項》
  • このオペランドに1を指定した場合,MINUSがSQLの予約語になります。そのため,表名,列名などの名前にMINUSを使用している場合は,引用符(")で囲んだ"MINUS"に変更してください。名前の指定方法については,マニュアル「HiRDB Version 9 SQLリファレンス」の「名前の指定」を参照してください。

  • ルーチンの定義,及びルーチンのリコンパイル時に,集合演算子MINUSを使用するかどうかは,このオペランドの値によって決定されます。

  • ルーチンの定義と,そのルーチンのリコンパイル時はこのオペランドの値を同じにしてください。このオペランドを変更し,ルーチンのリコンパイルを行うと構文エラーになる場合があります。

◆ pd_ddl_tbl_pctfree = 表の未使用領域比率,表のセグメント内空きページ比率

定義系SQLでのPCTFREE(表オプション)の省略値を変更する場合,未使用領域の比率とセグメント内の空きページ比率を指定します。表の属性によって,指定するオペランドが異なります。表の属性と指定するオペランドを次の表に示します。

表9‒1 表の属性と指定するオペランド

表の属性

指定するオペランド

FIX表

クラスタキーなし

pd_ddl_tbl_fix_pctfree

クラスタキーあり

pd_ddl_tbl_pctfree

非FIX表

pd_ddl_tbl_pctfree

PCTFREE(表オプション)については,マニュアル「HiRDB Version 9 SQLリファレンス」の「CREATE TABLE(表定義)」を参照してください。

《オペランドの指定値》
  • 表の未使用領域の比率 〜<符号なし整数> ((0〜99))(単位:%)

  • 表のセグメント内の空きページ比率 〜<符号なし整数> ((0〜50))(単位:%)

《オペランドの省略値》

このオペランドを省略した場合に仮定する値を次の表に示します。

表9‒2 オペランドを省略した場合に仮定する値

オペランド

仮定値

pd_ddl_tbl_pctfree

30,10

pd_ddl_tbl_fix_pctfree

0,0

《利点》

定義するすべての表に対して,定義系SQLの省略値とは異なるPCTFREE(表オプション)の値に統一したい場合,定義系SQLごとにPCTFREEを指定する必要がなくなります。

《注意事項》
  • 定義系SQLの実行時動作を変更する指定のため,定義済みの表には影響しません。

  • クラスタキーのないFIX表については,空き領域を作るメリットはないため,通常はpd_ddl_tbl_fix_pctfreeオペランドを指定しないでください。

 pd_ddl_tbl_fix_pctfree = 表の未使用領域比率,表のセグメント内空きページ比率

このオペランドの説明については,pd_ddl_tbl_pctfreeオペランドを参照してください。

◆ pd_ddl_idx_pctfree = インデクスの未使用領域比率  〜<符号なし整数> ((0〜99))《30》(単位:%)

定義系SQLでのPCTFREE(インデクスオプション)の省略値を変更する場合,未使用領域の比率を指定します。PCTFREE(インデクスオプション)については,マニュアル「HiRDB Version 9 SQLリファレンス」の「CREATE INDEX 形式1(インデクス定義)」を参照してください。

《利点》

定義するすべてのインデクスに対して定義系SQLの省略値とは異なるPCTFREE(インデクスオプション)の値に統一したい場合,定義系SQLごとにPCTFREEを指定する必要がなくなります。

《注意事項》

定義系SQLの実行時動作を変更する指定のため,定義済みの表やインデクスには影響しません。

◆ pd_ddl_tbl_recovery = {ALL|PARTIAL|NO}

定義系SQLでの列回復制約の省略値を変更する場合,列回復制約を指定します。列回復制約については,マニュアル「HiRDB Version 9 SQLリファレンス」の「CREATE TABLE(表定義)」を参照してください。

《利点》

定義するすべての表に対して定義系SQLの省略値とは異なる回復制約の値に統一したい場合,定義系SQLごとにRECOVERYを指定する必要がなくなります。

《注意事項》

定義系SQLの実行時動作を変更する指定のため,定義済みの表には影響しません。