($title_img_alt)

こちらからの投稿は、先頭に表示されているコメントへの返信になります。
RE:SQLRPGLEへの動的SQLへの組込方について AS400初心者 さん [ 1月28日(木) 9時59分 ]
?の理解で合っているかはわかりませんが、動的なSQL自体は実行出来ました。
ただ、2点気になるところがあります。
?の部分について、質問させて下さい。

------------------------------------------------------------
?
//TESTSQL(文字型の変数)をPREPARE文でSTMT1というSQL文に設定する
EXEC SQL PREPARE STMT1 FROM :TESTSQL;

//上記で設定したSTMT1というSQL文をEXECUTE文で実行する
EXEC SQL EXECUTE STMT1;

※TESTSQLには、'INSERT INTO LIB/FILEA SELECT AAA,BBB,CCC FROM LIB/FILEB
 WHERE AAA = 10 OR AAA = 15' が入っている状態
------------------------------------------------------------
?
 1.SQL実行後にデータ追加先のファイルがロックされたままになっている。
   サインオフするとファイルのロックが解除されます。   

   WRKOBJLCKで確認すると下記の状況でした
     ロック :*SHRRD
     状況  :HELD
     有効範囲:*JOB

 2.SQL実行時にファイルにINSERTされていない時がある
   (誰も使用していないファイルで、かつ追加先のファイルはデータが0件の
    状態です。また、INSERTされていない時に再度同じプログラムを実行
すると
    データが追加されます)

------------------------------------------------------------

?の2も気になりますが、?の1の方がまったく解決方法がわからず困っていま
す。。
私のやり方がよくないのかもしれませんが、RPG終了時にファイルロックが解
放されるようにするには
どのようにすればいいかご助言いただけないでしょうか?

宜しくお願い致します。


RE:SQLRPGLEへの動的SQLへの組込方について AS400初心者 さん [ 1月28日(木) 10時58分 ]
> 下記1の理解で合っているかはわかりませんが、動的なSQL自体は実行出
来ました。
> ただ、2点気になるところがあります。
> 下記2の部分について、質問させて下さい。
> 
> ------------------------------------------------------------
> 1
> //TESTSQL(文字型の変数)をPREPARE文でSTMT1というSQL文に設定する
> EXEC SQL PREPARE STMT1 FROM :TESTSQL;
> 
> //上記で設定したSTMT1というSQL文をEXECUTE文で実行する
> EXEC SQL EXECUTE STMT1;
> 
> ※TESTSQLには、'INSERT INTO LIB/FILEA SELECT AAA,BBB,CCC FROM 
LIB/FILEB
>  WHERE AAA = 10 OR AAA = 15' が入っている状態
> ------------------------------------------------------------
> 2
>  1.SQL実行後にデータ追加先のファイルがロックされたままになっている。
>    サインオフするとファイルのロックが解除されます。   
> 
>    WRKOBJLCKで確認すると下記の状況でした
>      ロック :*SHRRD
>      状況  :HELD
>      有効範囲:*JOB
> 
>  2.SQL実行時にファイルにINSERTされていない時がある
>    (誰も使用していないファイルで、かつ追加先のファイルはデータが
0件の
>     状態です。また、INSERTされていない時に再度同じプログラムを実行
> すると
>     データが追加されます)
> 
> ------------------------------------------------------------
> 
> 私のやり方がよくないのかもしれませんが、下記2点について
> ご助言いただけないでしょうか?
>
>  ・RPG終了時にファイルロックが解放されるようにする方法
>  ・2回に1回しかSQLが実行されない状態の解決方法
> 
> 宜しくお願い致します。
> 
> 
> 
RE:SQLRPGLEへの動的SQLへの組込方について IKD さん [ 1月28日(木) 14時59分 ]
「サインオフするとファイルのロックが解除されます」という症状から推察すると
LR-終了していない、つまりプログラムが正常終了しないでスタックの残ったままに
なっている、という可能性がかなり高いです。

ロックを解放する方法ではなく、ご自分のプログラムの基本ができているかを
よく調査しましょう。
RE:SQLRPGLEへの動的SQLへの組込方について AS400初心者 さん [ 1月28日(木) 17時38分 ]
はじめにそれを疑いました。
実際のソースは、下記のような構成になっているため、
LR終了はしていました。
--------------
EXSR SQL;
*INLR = *ON;
RETURN;
--------------

それで色々継続して試した結果、COMMITを入れると
ファイルのロック自体は解除されるようになりました。

EXEC SQL PREPARE STMT1 FROM :STRSQL;
EXEC SQL EXECUTE STMT1;
EXEC SQL COMMIT;    ←この文を追加しました。

バグ となり さん [ 1月28日(木) 15時23分 ]
丁寧にDEBUGしてください。
コンパイル時のCOMMIT値は? @445 さん [ 1月28日(木) 15時57分 ]
コンパイル時 COMMIT(*NONE) ですか?
RE:コンパイル時のCOMMIT値は? AS400初心者 さん [ 1月28日(木) 17時44分 ]
> コンパイル時 COMMIT(*NONE) ですか?

質問投稿させていただいた時は、COMMIT(*CHG)でした。

色々試す中で、COMMIT(*NONE)にすると
データが追加されないことがあるという現象は発生しなくなりました。

COMMIT(*NONE)でも問題はないのでしょうか?

お名前

パスワード

メールアドレス

タイトル

ホームページ

アドレス

項目