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

2019年2月1日金曜日

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

0 件のコメント :

RPGLEでカーソル処理をしない「insert」「update」「delete」等のSQL文を実行するには、基本的に以下のような手順で行います。

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

ステートメント・ハンドルをそのままに、複数種類のSQL文を実行したい場合、57を、パラメータ値を変えて同じSQL文を実行したい時は67を、RPGLEのロジックとして繰り返します。

5で指定されるSQL文が、例えば画面からの入力で与えられるようなケース、あるいはPCクライアントから通信で渡されるようなケースでは、正しく実行できるかどうかを検査するために、5SQL文実行準備APIを呼び出して、SQL文を検査することもできます。

RPGLEプログラムで生成するSQL文では、SQL構文エラーなどをユーザーに通知する必要は無いと思われますので、57を飛ばして、8を「SQLExecDirect」で実行します。
パラメータ・マーカを使用する時は、57を処理して、8を「SQLExecute」で実行します。

パラメータ・マーカの値の関連性妥当性検査は、SQLCLIではできませんので、そこはRPGLEのプログラム・ロジックで組み込んで、エラーを戻すなり、再入力を促すなりを行います。

0 件のコメント :

コメントを投稿