2016-11-30 6 views
0

SQLコードでのSQLクエリから算出した浮動小数点データを取得することができません:Javaはビュー用のOracle

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 

以下のデータを生成しているが、私は取得しようとしていたときに

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; 

私は次の出力を取得しています

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()); 

    } 

以下のコードを使用してJavaを経由して、このデータ:

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が正しく印刷されますが、計算された値ではありません。

助けてください。

+0

データベースのデータを確認します。 0を返すと、データベースの列duration_stepの値が0になります –

+0

質問の形式を正しく指定してください – surajsn

+0

vlue 'rs.getString(" duration_step ");'を印刷して何が印刷されているか見ることができますか – Ali786

答えて

0

解決策が見つかりました。ビューの計算に問題がありました(2つの日付の差は分単位です)。

以前のバージョン:

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 

新バージョン:私はSQL Developerの上やJavaで同じ結果を与えている

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

0

floatをgetInt呼び出しで作成されたint変数に格納しようとしているようです。

+0

こんにちは、あなたの返信ありがとう、私は浮動小数点、文字列のすべてを試みたが、それは私に同じ結果を与えている。提案してください。 –

関連する問題