2019年2月1日金曜日
SQLCLI について(SQLステートメントの実行)
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文を実行したい場合、5~7を、パラメータ値を変えて同じSQL文を実行したい時は6~7を、RPGLEのロジックとして繰り返します。
5で指定されるSQL文が、例えば画面からの入力で与えられるようなケース、あるいはPCクライアントから通信で渡されるようなケースでは、正しく実行できるかどうかを検査するために、5でSQL文実行準備APIを呼び出して、SQL文を検査することもできます。
RPGLEプログラムで生成するSQL文では、SQL構文エラーなどをユーザーに通知する必要は無いと思われますので、5~7を飛ばして、8を「SQLExecDirect」で実行します。
パラメータ・マーカを使用する時は、5~7を処理して、8を「SQLExecute」で実行します。
パラメータ・マーカの値の関連性妥当性検査は、SQLCLIではできませんので、そこはRPGLEのプログラム・ロジックで組み込んで、エラーを戻すなり、再入力を促すなりを行います。
登録:
コメントの投稿
(
Atom
)
0 件のコメント :
コメントを投稿