2016-11-30 1 views
0

SQL-Code für die Ansicht abzurufen:Java ist nicht in der Lage berechnet Floating-Point-Daten aus SQL-Abfrage in Oracle

CREATE OR REPLACE FORCE EDITIONABLE VIEW "DAC"."W_ETL_RUN_STEP_AVG_TIME" ("NAME", "COUNT", "DURATION_STEP") 
AS 
SELECT 
    step_name         AS name, 
    COUNT(
     *)         AS COUNT, 
    --sucess_rows  AS sucess_rows, 
    ROUND(SUM(60 * 24 * (to_date(end_ts, 'yyyy-MM-DD hh24:mi:ss') - to_date(
     start_ts, 'yyyy-MM-DD hh24:mi:ss')))) AS duration_step 
FROM w_etl_run_step 
WHERE step_name IN 
     (SELECT DISTINCT step_name 
     FROM w_etl_run_step 
    ) 
     AND start_ts > SYSDATE - 30 --ADD_MONTHS(SYSDATE, -1) 
--AND status ='Completed' 
GROUP BY step_name 
ORDER BY step_name DESC; 

, die die unten aufgeführten Daten

NAME          COUNT DURATION_STEP 
wf_retrieving_first_last_records   99  44 
wf_move_halp_part_data     99  45 
wf_flat_files_remove_footer    97  41 
wf_etl_huge_data_transformation   31  140 
wf_Test_Mapping1       101  45 
wf_Split_Non_Key_Columns     99  45 
wf_Separating_duplicate_non_duplicate_rows 99 45 
wf_Multiple_Column_To_One_Column   99  44 

erzeugt Aber wenn ich versuche, abrufen diese Daten über java den Code unten mit

try { 

     String selectSQL="Select name, duration_step from W_ETL_RUN_STEP_AVG_TIME"; //Get last update time 
     dbConnection = getDBConnection(); 
     preparedStatement = dbConnection.prepareStatement(selectSQL); 
     ResultSet rs = preparedStatement.executeQuery(); 

     int duration_step=0; 

     String step_name =""; 
     while (rs.next()) { 

      step_name=rs.getString("name"); 

      duration_step=rs.getInt("duration_step"); 

      System.out.println("Step Name : "+step_name+"   Duration: "+duration_step); 

     } 
    } 
    catch (SQLException e) { 

     System.out.println(e.getMessage()); 

    } 

ich die folgende Ausgabe bin immer:

Step Name : wf_retrieving_first_last_records   Duration: 0 
Step Name : wf_move_halp_part_data   Duration: 0 
Step Name : wf_flat_files_remove_footer   Duration: 0 
Step Name : wf_etl_huge_data_transformation   Duration: 0 
Step Name : wf_Test_Mapping1   Duration: 0 
Step Name : wf_Split_Non_Key_Columns   Duration: 0 
Step Name : wf_Separating_duplicate_non_duplicate_rows   Duration: 0 
Step Name : wf_Multiple_Column_To_One_Column   Duration: 0 

Step Name richtig gedruckt, aber nicht die Dauer, die ein berechneter Wert ist.

Bitte helfen.

+0

Überprüfen Sie die Daten in der Datenbank. Wenn es 0 zurückgibt, ist der Wert der Spalte duration_step 0 in der Datenbank –

+0

Bitte formatieren Sie Ihre Frage richtig – surajsn

+0

können Sie einfach die vlaue 'rs.getString (" duration_step ");' drucken und sehen, was es druckt – Ali786

Antwort

0

Ich habe die Lösung gefunden. Es gab ein Problem mit der Berechnung, die ich für die Ansicht durchgeführt habe (für den Unterschied zwischen zwei Daten in Minuten).

Frühere Version:

ROUND(SUM(60 * 24 * (to_date(end_ts, 'yyyy-MM-DD hh24:mi:ss') - to_date(
    start_ts, 'yyyy-MM-DD hh24:mi:ss')))) AS duration_step 

Neue Version:

ROUND(SUM(60*24*(end_ts-start_ts))) AS duration_step, 

das mir gleiches Ergebnis auf SQL Developer und in Java gibt.

0

Sieht aus, als ob Sie versuchen, float in einer int-Variablen zu speichern, die von einem getInt-Aufruf aufgefüllt wird.

+0

Hallo Danke für deine Antwort, ich habe versucht mit Float, String alles, aber es gibt mir immer noch das gleiche Ergebnis. Bitte vorschlagen. –