Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


付録A.1 SQL連絡領域の構成と内容

SQL実行時の情報を受け取る領域の構成,及び内容について説明します。

〈この項の構成〉

(1) SQL連絡領域の構成

SQL連絡領域の構成を次の図に示します。

図A‒1 SQL連絡領域の構成

[図データ]

注1

( )内は領域の長さ(単位:バイト)を示します。

注2

( )内の[ ]の値は,64ビットモードの場合の長さを示します。なお,64ビットモードのWindowsの場合,SQLCAは336バイトとなります。

注3

64ビットモードでのSQLCABC,SQLCODE,及びSQLERRDの長さは,プラットフォームごとのlong型のサイズになります。

(2) SQL連絡領域の内容

SQL連絡領域の内容を次の表に示します。

表A‒1 SQL連絡領域の内容

レベル

番号※1

連絡領域名

データ型

長さ

(バイト)

内     容

1

SQLCA

336 [368]

SQL連絡領域全体の名前を表します。

2

SQLCAID

8

SQLCAIDC領域,SQLCAIDS領域,及びSQLCAIDE領域の内容を値として持ちます。

3

SQLCAIDC

char

5

SQL連絡領域である文字列('SQLCA')が設定されます。

3

SQLCAIDS

char

2

HiRDBが使用します。

3

SQLCAIDE

char

1

HiRDBが使用します。

2

SQLCABC

long

4 [8]※3

SQL連絡領域の長さ(336 [368]バイト)が設定されています。

2

SQLCODE

long

4 [8]※3

SQL実行後にHiRDBから返されるリターンコードを受け取る領域です。リターンコードには次に示す意味があります。

負:正常に終了していません

0:正常に終了しました

正:正常に終了したが,メッセージ情報があります。

リターンコードに対応するメッセージについては,マニュアル「HiRDB メッセージ」を参照してください。なお,リターンコードに対応するメッセージは,次のように検索します。

リターンコード→対応するメッセージID

 -yyy   → KFPA11yyy

 -1yyy   → KFPA19yyy

 -3yyy   → KFPA18yyy

 yyy    → KFPA12yyy

 3yyy   → KFPA13yyy

(例)

<リターンコード>→<メッセージID>

 -125    → KFPA11125

 -1200    → KFPA19200

 -3200    → KFPA18200

 100     → KFPA12100

 3010    → KFPA13010

2

SQLERRM

256

SQLERRML領域,及びSQLERRMC領域の内容を値として持ちます。なお,SQLCODE領域に返されるリターンコードの正負によって次に示すように異なります。

  • リターンコードが負の場合,誤りの箇所や原因を示す文字列を返すときがある。

  • リターンコードが正の場合,メッセージ情報を示す文字列を返すときがある。

3

SQLERRML

short

2

SQLERRMC領域に返されるメッセージの長さを示します。

3

SQLERRMC

char

254

SQLCODE領域に返されるリターンコードに対応するメッセージが格納される領域です。設定内容については,マニュアル「HiRDB メッセージ」を参照してください。

2

SQLERRP

char

8

HiRDBが使用します。

2

SQLERRD

long

4※3×6

HiRDBの内部状態を示す領域で,データ型がlongの6個の配列です。

  • SQLERRD[0]:未使用

  • SQLERRD[1]:未使用

  • SQLERRD[2]:

    SQLCODEの値が0,又は正の場合:

    次のどれかの値が返されます。

    ・SELECT文で取り出した行数

    ・UPDATE文で更新した行数

    ・DELETE文で削除した行数

    ・INSERT文で挿入した行数

    ・FETCH文で取り出した行数

    ・ASSIGN LIST文で作成した行数

    ・ASSIGN LIST文で名称変更したリストの行数※4

    上記以外のSQLを実行する場合は,この領域は使用しないでください。

    SQLCODEの値が負の場合:

    配列を使った更新時にエラーとなった配列要素を示す値が返されます。

  • SQLERRD[3]:システムが使用します。

  • SQLERRD[4]:システムが使用します。

  • SQLERRD[5]:未使用

2

SQLWARN0

char

1

SQLWARN1〜Fの領域のどれかに警告フラグ('W')が設定された場合に'W'が設定されます。

2

SQLWARN1

char

1

文字データの検索で,データを受け取る埋込み変数の長さが短いために,切り捨てられた値を受け取った場合,'W'が設定されます。

又は,繰返し列の検索で,データを受け取る埋込み変数の要素数が足りなかったために,要素が切り捨てられた値を受け取った場合,'W'が設定されます。

それ以外は空白が設定されます。

2

SQLWARN2

char

1

集合関数の処理でナル値を無視した場合に'W'が設定されます。それ以外は空白が設定されます。

ただし,次のどちらかの場合は,集合関数の処理でナル値を無視しても空白が設定されることがあります。

  • ナル値を除外値とするインデクスを定義した表を検索する場合

  • グループ分け高速化機能を使用する場合

2

SQLWARN3

char

1

検索結果の列の数と,その検索結果を受け取る埋込み変数の数が一致しない場合,'W'が設定されます。それ以外は空白が設定されます。

2

SQLWARN4

char

1

WHERE句がないUPDATE文,又はWHERE句がないDELETE文が実行された場合,'W'が設定されます。それ以外は空白が設定されます。

2

SQLWARN5

char

1

予備

2

SQLWARN6

char

1

暗黙的にトランザクションが取り消された場合に'W'が設定されます。それ以外は空白が設定されます。

2

SQLWARN7

char

1

UPDATE文で,SET句又はDELETE句に添字付きの繰返し列を指定した場合,更新する行に要素がなくてその更新が無視されたときに,'W'が設定されます。

それ以外は空白が設定されます。

2

SQLWARN8

char

1

予備

2

SQLWARN9

char

1

予備

2

SQLWARNA※2

char

1

日付演算の結果,存在しない日付が現れると,その月の最終日に修正した場合 'W' が設定されます。それ以外は空白が設定されます。

2

SQLWARNB※2

char

1

SQL実行時の演算途中でオーバフロー,又は0除算が発生し,その演算結果をナル値とした場合,'W'が設定されます。それ以外は空白が設定されます。

2

SQLWARNC※2

char

1

日付演算の結果の日間隔中の日の部分が,00〜99の範囲内にない場合,'W'が設定されます。それ以外の場合,空白'△'になります。

2

SQLWARND

char

1

HiRDBが使用します。

2

SQLWARNE

char

1

予備

2

SQLWARNF

char

1

予備

2

SQLCASYS

char

16

HiRDBが使用します。

(凡例) −:該当しません。

長さの[ ]内の値は,64ビットモードの場合の長さです。なお,64ビットモードのWindowsの場合,SQLCAは336バイトとなります。

注※1

表のレベル番号は,SQL連絡領域の包含関係を示します。例えば,レベル番号1の連絡領域はレベル番号2の連絡領域で構成されることを示します。

注※2

ソート処理を含むSQL文,又はEXISTS述語を使用したSQL文を実行した場合,最初のFETCH文で'W'を返します。

また,HiRDB/パラレルサーバ環境のとき,WHERE句で警告を出す要因が発生した場合,'W'を返す行が不定となります。

注※3

64ビットモードの場合,プラットフォームごとのlong型のサイズになります。

注※4

システム共通定義でpd_list_rowcount_in_renameオペランドにYを指定した場合だけ参照してください。