2018年12月3日月曜日
SQLCLI について(SQLCLIの使用-接続ハンドル)
2. 接続ハンドル
IBM iのデータベースと接続するためのハンドルです。
他のRDBMS(例えばMS-SQL Server)とも接続できるかなと思ってやってみましたが、他システムとの接続にはDRDAが使用されているようで、接続できませんでした。
2018年11月1日木曜日
2018年10月1日月曜日
SQLCLI について(RPGLEでSQLCLIを使用するには2)
RPGLE用のプロトタイプ定義は、SQLCLIのマニュアルに、コーディングに必要な記述がありますので、それを参考にして、あらかじめ作成しておき、「/COPY」ステートメントを使用して、RPGLEプログラムのソースにコピーするようにします。
これは汎用的なものですから、一度作成すればSQLCLIを利用するどのプロジェクトでも利用できると思います。
プロトタイプ定義を作成する時に、おそらく障害になるのが「SQL_」で始まるSQLCLI名前付き定数でしょう。
マニュアルにも「SQL_SUCCESS」とか「SQL_INTEGER_t」などの名前付き定数で書かれており、その値やタイプは判らないようになっています。
もっともこれは、バージョン・アップなどで値が変わっても、名前付き定数は変わらないように配慮しているのかもしれません。
IBM i では、この名前付き定数定義は、C言語用のプロトタイプ定義と併せて「QSYSINC/H.SQLCLI」にソース・メンバーとして提供されています。
私も、RPGLE用のプロトタイプ定義と名前付き定数の定義を作成する時に参考にしました。C言語でのデータタイプをRPGLE用のそれにマップするのに苦労した覚えがあります。何せ、C言語の知識は、よちよち歩き状態ですから(笑)。
このような紆余曲折もあって、何とかRPGLE用のプロトタイプ定義と名前付き定数定義を作成し、UTF-16用のAPIに対応していない、BLOB、CLOBに対応していないなどの問題は含んでいますが、現在RPGLEプログラムで使用するに至っています。
2018年9月3日月曜日
SQLCLI について(RPGLEでSQLCLIを使用するには)
RPGLEでSQLCLIを使用する場合、多種あるSQLCLI用のAPIを、使用する機能に合わせて呼び出します。
呼出しは、プログラムの動的呼び出し(CALL命令)ではなく、サブ・プロシージャ呼出しと同じように呼び出します。
すなわち、値を返すAPIを使用して、その値をメイン・プロシージャで使用する時は、EVAL命令、あるいは条件判断命令(IF、DOWなど)で呼出し、返される値が不要な場合、CALLP命令で呼び出します。
RPGLEでサブ・プロシージャを呼び出す時に必要なものが、「プロトタイプ定義」と言われる、外部名、戻り値のタイプ/桁数、必要なパラメータの順番と個数とそれぞれのタイプ/桁数を定義したものになります。
1つのモジュール内で、メインとサブ・プロシージャを記述する時は、サブ・プロシージャ側に「プロシージャ・インターフェース定義」がありますので、プロトタイプ定義はオプション(IBM i のV6以前のバージョンでは必須)になりますが、SQLCLIを使用する時は、別のモジュールやサービス・プログラムを使用する場合と同様にプロトタイプ定義が必須になります。
2018年8月1日水曜日
SQLCLI について(SQLCLI の特徴2)
SQLCLIを使用すれば、ソケット通信と組み合わせて、クライアントからのSQL要求を汎用的に処理するサーバ側RPGLEソフトウェアも作成することができます。
2018年7月2日月曜日
SQLCLI について(SQLCLI の特徴)
1. 全てのSQL文を、高水準言語から動的呼び出しで使用できる
2. 高水準言語への組み込みSQLに比べて、効率が良い(と言われている)
3. RUNSQLコマンドなどの直接SQL文実行ではできない「カーソル処理」ができる(要するにdeclare cursorやselect文に続くfetch処理ができる)
4. SQL文の中にパラメータ・マーカ(置換変数)を指定することができ、パラメータの文字/数字などの属性値に従って適切に埋め込まれる
5. プログラム固定情報値としてあらかじめ準備されたSQL文だけでなく、実行時にSQL文を変数で与えることができる。(例えば、画面から入力されたSQL文を検査して、実行することも可能)
6. SQL文の実行環境も、サーバ・モードとジョブ・モードの設定ができる
7. トランザクション制御を使用する/しないの設定ができる(省略時値はトランザクション制御必須)
などが挙げられます。
高水準言語への組み込みSQLでは、カーソル定義とホスト変数を使用してのカーソル処理そのものは可能ですが、組み込んだSQL文を、いったん動的呼び出しに変換するために「プレ・コンパイラー」を通して一時的な言語ソースに変換する必要があります。SQLCLIでは、直接動的呼び出しをコーディングするので、プレ・コンパイルの必要は無く、高水準言語は、パラメータとして指定したプログラム変数を使用して直接DB2とのやり取りを行います。
2018年6月1日金曜日
2018年5月7日月曜日
RPGLEでのSSL通信(2)
サーバ認証さえクリアすれば、あとはIBM i のSSL通信機能が、APIを呼び出すだけで勝手にネゴシエーション(SSL Handshake)して、最も高い改ざん防止と暗号化を決定してくれるので、簡単にSSL通信を行うことができます。ネゴシエーションに関しては、システム値でも制御できますが、テストではシステム提供の省略値をそのまま使用しました。
2018年4月2日月曜日
RPGLEでのSSL通信(1)
以前に、RPGLEでのソケット通信について書いた覚えがあります。IBM i のUNIX APIをRPGLEのサブプロシージャにカプセル化して、RPGLEのプログラムで利用できるようにしました。
今では、弊社のT-Socket-iとして提供されているソリューションです。
2018年1月8日月曜日
~番外編 (APPC通信プログラムのテスト用に)~IBM i のSNA通信(APPCプログラミング編)
1台のIBM i で起動側、受動側のAPPC通信プログラムを作成してテストすることもできます。以前に「システム内通信(INTRA)」の稿を投稿したことがありましたが、それと同様な機能に「ローカルAPPC通信構成」があります。システム内通信では、送信・受信バッファは使用されませんでしたが、ローカルAPPC通信構成では、APPCのバッファ管理が有効になります。また、システム内通信では「同期会話」は使用できませんが、ローカルAPPC通信構成では使用することができます。
登録:
投稿
(
Atom
)