0

DBM に次のようなビューがあります。

SELECT CDN, DN_GRUPPE, AFSLUTTET_AF AS INITIALS, AGENTGRUPPE AS AGENTGROUP, STATUS, CREATED, LAST_UPD , TRUNC(LAST_UPD)- TRUNC(CREATED) AS SOLVED_SECONDS
FROM GENESYS.NYK_SIEBEL_CALLBACK_AGENT_HIST@CCON.NYKREDITNET.NET LEFT JOIN KS_DRIFT.SYS_DATE_KS AA ON TO_DATE(TRUNC(LAST_UPD),'YYYY-MM-DD') = AA.THIS_DATE
WHERE TIDSPUNKT > (SYSDATE - 427)

私のJavaアプリケーションが選択された列を取得しようとするとSOLVED_SECONDS、値が返されます。

ただし、ビューを次のように変更すると:

    SELECT CDN, DN_GRUPPE, AFSLUTTET_AF AS INITIALS, AGENTGRUPPE AS AGENTGROUP, STATUS, CREATED, LAST_UPD , CASE WHEN CALCULATE_CALLBACK_DURATION(CREATED,LAST_UPD) is NULL THEN
 CALCULATE_CALLBACK_DURATION(AA.THIS_DATE_OPENING, LAST_UPD) ELSE
CALCULATE_CALLBACK_DURATION(CREATED, LAST_UPD) END AS SOLVED_SECONDS
FROM GENESYS.NYK_SIEBEL_CALLBACK_AGENT_HIST@CCON.NYKREDITNET.NET LEFT JOIN KS_DRIFT.SYS_DATE_KS AA ON TO_DATE(TRUNC(LAST_UPD),'YYYY-MM-DD') = AA.THIS_DATE
WHERE TIDSPUNKT > (SYSDATE - 427)

つまり、独自の関数 ( CALCULATE_CALLBACK_DURATION) を追加すると、Java アプリケーションの結果は = 0 になります。null ではなく、NaN ではなく 0 です。

たとえば、Java アプリケーションで次のコードを使用するとします。

    public ArrayList<CallQueue> getCallbacks(String startDate, String endDate,
        char c, ArrayList<CallQueue> data) {
    DateTime end = new DateTime(endDate);
    // this method is currently used for testing purposes
    String sql = "SELECT SOLVED_SECONDS FROM KS_DRIFT.NYK_SIEBEL_CALLBACK_AGENT_H_V ";
    System.out.println(sql);
    ResultSet rs = getTable(sql);
    try {
        while (rs.next()) {
            System.out.println(rs.getInt("SOLVED_SECONDS"));
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null; 
}

private ResultSet getTable(String sql){
    try {
        return Hent_tabel(sql);
    } catch (SQLException e) {e.printStackTrace();}
    return null;
}

public ResultSet Hent_tabel(String Execute) throws SQLException {
    return db.executeQuery(Execute);
}

上記の例では、アプリケーションはテーブルの各行に対して「0」を出力します。ただし、DBM を介してテーブルを見ると、列に正しい数値が表示されますSOLVED_SECONDS

私はすべてを試したような気がしますが、問題を見つけることができないようです. 追加情報が必要な場合はお知らせください。

-上記の例では、正しい結果が期待されるテーブル内の他の列を取得できます SOLVED_SECONDS

アップデート

を使用するResultset.wasNull();と、データが読み取られなかったという例外が発生します。

SOLVED_SECONDSこれは私のDBMのスクリーンショットです

ここに画像の説明を入力

Java からの出力は次のとおりです。

ここに画像の説明を入力

次の出力は、データベース内の各行で 0 が続いているほんの一部にすぎないことに注意してください。

作成したビューを更新します。

ビューの完全な定義は次のとおりです。

Create View KS_DRIFT.NYK_SIEBEL_CALLBACK_AGENT_H_V (CDN, DN_GRUPPE, INITIALS, AGENTGROUP, STATUS, CREATED, LAST_UPD, SOLVED_SECONDS)
As 
  SELECT 
      CDN, DN_GRUPPE, AFSLUTTET_AF AS INITIALS, 
      AGENTGRUPPE AS AGENTGROUP, STATUS, CREATED, LAST_UPD , 
      CASE WHEN CALCULATE_CALLBACK_DURATION(CREATED,LAST_UPD) is NULL 
           THEN  CALCULATE_CALLBACK_DURATION(AA.THIS_DATE_OPENING, LAST_UPD) 
           ELSE CALCULATE_CALLBACK_DURATION(CREATED, LAST_UPD) 
      END AS SOLVED_SECONDS 
  FROM 
      GENESYS.NYK_SIEBEL_CALLBACK_AGENT_HIST@CCON.NYKREDITNET.NET 
  LEFT JOIN 
      KS_DRIFT.SYS_DATE_KS AA ON TO_DATE(TRUNC(LAST_UPD),'YYYY-MM-DD') = AA.THIS_DATE 
  WHERE 
      TIDSPUNKT > (SYSDATE - 427)
4

1 に答える 1