我有我的DBM一種觀點認爲是這樣的:PL SQL功能使得Java應用程序返回0
SELECT CDN, DN_GRUPPE, AFSLUTTET_AF AS INITIALS, AGENTGRUPPE AS AGENTGROUP, STATUS, CREATED, LAST_UPD , TRUNC(LAST_UPD)- TRUNC(CREATED) AS SOLVED_SECONDS
FROM [email protected] 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應用程序試圖獲得所選列他的返回值,因爲它應該。
但是如果我改變了看法以下幾點:
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 [email protected] 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不空不爲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查看錶格中的正確數字,則顯示在列
我覺得我試過了所有的東西,而且根本找不到問題。如果您需要更多信息,請告訴我!
注 - 在上面的例子中,我能得到表中的任何其他列有正確的結果從
UPDATE
想到如果我使用Resultset.wasNull();
我得到說沒有數據被讀取的例外。
這裏是的截圖在我DBM
這裏是從Java輸出:
注意下面的輸出僅僅是一個小窺數據庫中的每個行都繼續爲0。
UPDATE創建的視圖:
以下是視圖上的完整定義:
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
[email protected]
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代碼更新爲您正在執行的實際代碼?您當前的代碼不會編譯... – 2013-04-23 12:32:09
您確定要檢查數據庫中的第二個查詢嗎?也許視圖正在返回零,可能是因爲你的情況。 – 2013-04-23 12:33:34
@MarcRasmussen:我不想太挑剔,但爲了排除你在JDBC方面做錯了什麼,我真的需要看到實際的代碼。您發佈的代碼不會編譯('.next'沒有括號,''Resultset'帶有小寫's' ...,在println()'調用中缺少右括號)。請發佈您已*成功執行的代碼*,這會給您帶來不必要的零 – 2013-04-23 12:36:43