問題タブ [rpgle]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rpgle - ILE RPGでSQLが見つかった状態を確認する正しい方法は何ですか?
RPG で組み込み SQL を使用する場合、多くの場合dow
、結果のすべての行を処理するためにカーソルとループが発生します。ループ内の条件は、SQLRPGLE プログラムでグローバルに使用可能ないくつかの変数SQLCOD
および/またはに何らかの形で依存していますか?SQLSTT
しかし、これらの値を確認する正しい方法は何ですか? SQLCOD = 0
他の人を提案する人もいnot (SQLCOD = +100 or SQLSTT = '02000')
ます。1 つはすべての警告で失敗し、もう 1 つは一部のエラーで失敗しないため、満足できません。
私がいくつかのコードで何をするかを説明するには:
ここで正しい return ステートメントを探しています。これにより、エラーが発生しない場合はすべての行を通過し、エラーが発生した場合は離れることができます。エラーをチェックするための適切な方法に対するボーナスポイント。
ibm-midrange - DB2 からデータを挿入および検索するための RPG IV の作成方法
私は AS/400 の初心者であり、Data Description Specification (DDS) ステートメントに精通しています。Data Description Specification を使用して作成された 2 つのテーブルがあります。
これらのテーブルから挿入および取得するには、2 つの RPGLE プログラムを作成する必要があります。
エンパーズファイル
部門ファイル
java - 別の OS/400 ジョブで作成された JVM を RPG から再利用することはできますか?
Java クラスを呼び出す RPG PGM があります。ジョブに JVM がない場合、Java クラスが呼び出されたときに RPG ランタイムが JVM を追加します。この後、同じ RPG プログラムまたは同じジョブ内にある別の RPG プログラムからのすべての呼び出しは、同じ JVM を使用します。
問題は、別のジョブから同じ PRG プログラムを開始すると、別の JVM が開始されることです。基本的に、ジョブ用に 1 つの JVM があります。
JVM を 1 つだけにして、他のジョブからアタッチできるかどうかを知りたいです。
どんな助けでも大歓迎です。
これが、プロシージャーを通じて RPG/JAVA を統合しようとしている方法です。しかし、何らかの理由でスレッドが起動されません。
ibm-midrange - IFS 内のファイルの CCSID をプログラムで判別するにはどうすればよいですか?
IFS にはさまざまな CCSID (0、37、819、1200、1252 など) を持つファイルが多数あり、ユーザーがこれらのファイルの内容。
私たちのシステム (V6R1) CCSID (DSPSYSVAL QCCSID) は 65535 [2] で、ジョブのデフォルト CCSID は 37 です。つまり、たとえば CCSID 819 (ASCII) を表示しようとすると、記号やランダムな色などのゴミが表示されます。
私はQtqIconvOpen APIを介してある CCSID から別の CCSID にデータを変換することに精通しているので、ファイルにデフォルトの CCSID とは異なる CCSID があることがわかっている場合は、それを変換できます。私はそれを行うために何年も前にコードを書きましたが、それはうまくいきます。
私の問題は、プログラムで IFS ファイルの CCSID を見つけることです。グーグルで検索した後、私が見つけた唯一の関連情報は、JamesA ( CPYFRMIMPF コマンドで使用される CCSID を決定する方法は? ) の Stackoverflow で、QSHELL で「ls -S」を実行して、CCSID を示すファイルのリストを取得できることを指摘していますとファイル名。
したがって、理論的には、 を実行しls -S filename
、出力を解析して CCSID を取得し、必要に応じてその CCSID を使用してデータの変換を実行できます。ただし、これは見苦しいハックであり、可能であれば IBM API を使用したいと考えています。
からリストを解析するよりも、そのようなAPIまたはよりエレガントなハックを知っている人はいますls -S filename
か?
[1] C API を使用open()
しread()
てclose()
、実際のデータの読み取りを行います。
[2] 65535 が悪い選択であることはわかっていますが、それについて私にできることは何もありません。
db2 - SQLRPGLE の OPEN カーソルでの SQL -302
問題
次のようなクエリを実行する SQLRPGLE プログラムがあります。
フィールド定義:
ジョブ ログに次のエラーが表示されます。
追加のメッセージ情報を求めるプロンプトが表示されると、次のように表示されます。
と
これらのエラーは、カーソルを開くとトリガーされます。
outq には、ダンプ情報で満たされた QSQSVCDMP ファイルもあります。そこにある唯一の有用なものは、CPF4278 と CPD4374 への参照です。
CPF4278 の意味Query definition template &1 not valid.
CPD4374 の意味Field &1 and value &3 not compatible. Reason &5.
残念ながら、エラー メッセージ自体は存在せず、"CPF4278" と "CPD4374" という文字列のみです。
プログラムでは、SQLエラーコードを監視していますが、それらはすべて同じです:
エラー状態/コードは、「パラメーターまたは変数の値が無効です」を意味します。
私が試したこと...
多くのグーグルの後、私は試しました:
- ORDER BY 句の削除 (OPEN では、ORDER BY 句がある場合、データがフェッチされて並べ替えられます)
- すべての LEFT JOIN を INNER JOIN に変更します (右側の結果レコードに NULL がないことを確認するためにこれを行いました)
- WHERE句に「AND orapdt IS NOT NULL」を追加
- 私が忘れてしまった多くのこと
私が求めているのは...
どのフィールドに不正なデータが含まれているかを調べるにはどうすればよいですか? 無効であることはわかってHVR0001
いますが、どのフィールドが で表されHVR0001
ますか? フィールドを別の順序で選択しようとしましたが、常にHVR0001
無効な値が含まれています。
理想的には、すべての HVR* フィールド/値を印刷して検査できるようにしたいと考えています。
コンパイル リストを見ると、HVR* フィールドがリストされていません。いくつかの SQL_* フィールドがリストされており、SQL_00011
に入れられるデータを一時的に保持するために使用されていることがわかりorapdt
ます。(7,0 パック)SQL_00011
とまったく同じように定義されます。orapdt
それが私のクエリの唯一の数値フィールドです...
私の問題は、ファイルがどのように結合されているか、無効な値 (おそらく NULL) がorapdt
フィールドに配置されていることが原因であると感じています。
また、私の問題は、これらのクエリの多くを次々に実行することと関係があると思います (クエリごとに WHERE 仕様の一部が変更されます)。失敗したクエリの 1 つを取得して、それを独自のプログラムに入れて実行できるからです。そしてそれはうまくいきます。
これは DB2 for i (V6R1) 上にあり、関連するすべてのファイルは DDS を使用して作成されました
編集:ホスト変数(データ構造)とLIKEステートメントに必要な2つの外部データ構造は次のとおりです。
実際にデータを取得する fetch ステートメントは次のとおりです。
行をFETCHするのではなく、カーソルをOPENするときにエラーが発生するため、以前はこれを含めませんでした。o
OPEN ステートメントは、データ構造について何も認識してはなりません。
WHERE 句で何が変更されるかについては、次のもの以外はすべて動的に構築されます (したがって、変更される可能性があります)。
rpgle - コミットメント コントロールが実行されているかどうかを確認する
コミットメント制御を条件付きで使用しようとしています。RPG では、開くファイルに対して条件付きの COMMIT キーワードを使用できます。プログラムの 1 つがトリガー内から呼び出されるため、より高いレベルのロジックでコミット スコープを制御する必要があります。つまり、トリガーでは、コミットメント制御が有効かどうかを判断し、有効である場合は、呼び出されたプログラムにオプションのパラメーターを渡す必要があります。
コミットメント制御が現在 RPG または DB2400 で実行されているかどうかを確認する方法を知っている人はいますか?
ibm-midrange - ファイルの OPEN 中に CPF4131 が表示された
プログラム内のファイルに CPF4131 が表示される理由として考えられるものは何ですか?
そして、これを解決するにはどうすればよいでしょうか?