技術情報に関して更新します。(月1更新予定)

2019年5月7日火曜日

SQLCLI について(「select」SQLステートメントの実行3)

0 件のコメント :

b.の方法で行を処理するには

1.  環境ハンドルの取得(SQLAllocEnvまたはSQLAllocHandle)
2.  環境ハンドル内で接続ハンドルの取得(SQLAllocConnectまたはSQLAllocHandle)
3.  データベースへの接続(SQLConnect)
4.  接続ハンドルからステート・メントハンドルの取得(SQLAllocStmtまたはSQLAllocHandle)
5. ステートメント・ハンドルに対して「selectSQL文を指定(SQLPrepare)
6.  SQL文にパラメータ・マーカが含まれる時は、パラメータ用変数のバインド(SQLBindParameter)
7.  SQL文にパラメータ・マーカが含まれる時は、パラメータ用変数に値を設定
8.  SQL文の実行(SQLExecuteまたはSQLExecDirect)
9.  戻り値がSQL_NO_DATA(=100)になるまで「fetchSQL文の実行(SQLFetch)
10. 必要なカラムから値の取り出し(SQLGetCol、必要に応じてSQLNumResultColsSQLDescribeCol)
11. ステートメント・ハンドルの解放(SQLFreeStmtまたはSQLFreeHandle)
12. データベースの切断(SQLDisconnect)
13. 接続ハンドルの解放(SQLFreeConnectまたはSQLFreeHandle)
14. 環境ハンドルの解放(SQLFreeEnvまたはSQLFreeHandle)

行を読み取るときに、事前にカラムにプログラム変数を割り当てる、あるいはfetch後にカラムの値を取得する時のどちらの場合も、文字変数のデータ終了文字に注意する必要があります。

カラム定義より長い長さのプログラム変数を使ってカラムの値を取得したり、数値を文字変換してプログラム変数に取得するようなケースでは、環境ハンドルの省略値によって、文字値はヌル終了になります。

例えば、5桁の文字属性のカラムから、20桁の文字属性のプログラム変数に値を入れると、6桁目にヌル(x’00’)が挿入されます。文字値をヌル終了させるかどうかは、環境ハンドルの属性で指定できます。

数値属性のカラムの値を文字プログラム変数で受け取ることもできます。
その場合、有効桁以降が左詰めで文字変数に入れられて、小数点以下があれば、小数点はピリオド(‘.’)で渡されます。数値がマイナスの時は、マイナス文字(‘-‘)が付けられます。

文字変数と同様に、ヌル終了となり、最後にヌル(x’00’)が挿入されます。このままで%dec関数を使用して、数値変数に値を代入しようとすると、例外エラーが発生するので、注意が必要です。

0 件のコメント :

コメントを投稿