我的 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)