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)