4

Informix-4GL プログラムを Java に変換したいのですが、いくつか問題があります。Java コードがあり、Informix に正常に接続していますが、いくつか問題があります。

  1. UNIQUE 1 は TSQL ではないため、executeQuery() メソッドで "SELECT UNIQUE 1..." を使用するにはどうすればよいですか。
  2. SQLCA.SQLCODE は、SQL クエリが正しいことを意味し、0 を返します。Java で SQLCA.SQLCODE 変数を取得するにはどうすればよいですか、または Java で同じ機能を提供できます。

以下の 4GL コード セグメントを見てください。つまり、SQL クエリが行を返す場合、SQLCA.SQLCODE は 0 と set を返しますSW_FBCHK = 1

SELECT  UNIQUE  1  FROM  FBFIL:FBRDPF1
       WHERE  COMPID  =  G_DEPTWN
         AND  FPRDAT  =  IO_FONLY.PRTDAT
         AND  INSU01  =  '5'
      IF  SQLCA.SQLCODE  =  0  THEN
          LET  SW_FBCHK  =  1
      ELSE
          LET  SW_FBCHK  =  0
      END IF
4

2 に答える 2

2

Informix では、SELECT UNIQUEは標準の に相当する非標準SELECT DISTINCTです。

クエリは、テーブル(データベース内FBFIL:FBRDPF1のテーブルを意味する) に条件を満たす行があるかどうかをテストしています。FBRDPF1FBFIL

WHERE COMPID = g_deptwn
  AND FPRDAT = io_fonly.prtdat
  AND INSU01 = '5'

g_deptwnその状態では、これはグローバル変数 (多くの人はg_グローバル変数を示すために接頭辞を使用します) であり、io_fonly.prtdatおそらく変数でもあると推測できます。そのため、これらの値を Java SQL ステートメントに渡す必要があります。条件の LHS の名前は、I4GL 変数ではなく、おそらく表の列です。参照されるテーブルが SQL Server システムのどこに存在するかを決定する必要があります。

Java では JDBC を使用するため、クエリを実行して行をフェッチする必要があります (おそらく、値 1 を受け取る変数を提供します)。そのクエリが成功した場合は、Java の類似値SW_FBCHKを 1 に設定します。それ以外の場合は 0 に設定します。クエリからリソースを解放することを忘れないでください。

于 2012-10-26T03:36:28.917 に答える
1

成功するかどうかをテストしているだけなので、他にもいくつかのオプションがあります。

SELECT DISTINCT INSU01 ...

が最有力候補のようです。クエリにそのような固定述語がない場合は、 の出力をテストすることを検討する必要がある場合がありますSELECT COUNT(*) ...。これは、ロジックを少し変更することを意味します。

于 2012-10-25T20:34:48.727 に答える