2016-06-08 78 views
0

這是我的應用程序中的Oracle Query。關於TCURR的Oracle查詢

我認爲這是用於貨幣conversion.When我運行此查詢它拋出一個錯誤消息

試圖數據庫操作時發生錯誤: 錯誤執行數據庫查詢。

我可以知道我需要更改此查詢嗎?

查詢

SELECT count(*) AS count 
FROM (
    SELECT kurst AS look_up_mode_cd, 
     fcurr AS source_currency_cd, 
     tcurr AS target_currency_cd, 
     substr(to_char(99999999 - gdatu),1,4) AS effective_date_yr, 
     substr(to_char(99999999 - gdatu),5,2) AS effective_date_mnth, 
     (ukurs*tfact/ffact) AS multiplier_rate_amt, 
     to_number(to_char((1 /(ukurs*tfact/ffact)),9999999.9999999)) AS divisor_rate_amt 
    FROM tcurr 
    WHERE kurst = '001E' 
    AND substr(to_char(99999999 - gdatu), 1, 4) = '2016' 
    AND substr(to_char(99999999 - gdatu), 5, 2) = '4' 
    AND tcurr = 'USD' 
    UNION 
    SELECT kurst AS look_up_mode_cd, 
     tcurr AS target_currency_cd, 
     fcurr AS source_currency_cd, 
     substr(to_char(99999999 - gdatu),1,4) AS effective_date_yr, 
     substr(to_char(99999999 - gdatu),5,2) AS effective_date_mnth, 
     (-1 *ukurs*tfact/ffact) AS multiplier_rate_amt, 
     to_number(to_char((-1*1 /(ukurs*tfact/ffact)),9999999.9999999)) AS divisor_rate_amt 
    FROM tcurr 
    WHERE kurst = 'EURE' 
    AND substr(to_char(99999999 - gdatu), 1, 4) = '2016' 
    AND substr(to_char(99999999 - gdatu), 5, 2) = '4' 
    AND tcurr = 'EUR' 
    AND fcurr = 'USD' 
) 
+0

當您從Oracle SQL Developer或SQL Plus執行它時,它會執行嗎?它會拋出任何ORA錯誤嗎? –

回答

1

to_number(to_char((-1*1 /(ukurs*tfact/ffact)),9999999.9999999))沒有任何意義。你爲什麼要將一個數字轉換爲一個字符串,只是爲了再次將它轉換回數字?

但問題是你錯誤地調用它。 to_char()的第二個參數需要是一個字符串,而不是數字。因此,你需要'9999999.9999999'

但整個表達式可以簡化爲:

-1/(ukurs*tfact/ffact) 

無需將其轉換來回。


無關,而是:

此:substr(to_char(99999999 - gdatu), 1, 4)高度可疑也。你究竟在gdatu中存儲了什麼,你需要從99999999中減去該值才能得到像日期那樣的東西?爲什麼不將日期存儲在適當的DATE列中?

+0

其實它的參數代替'2016'。我保留了參數實際值。 –

+0

@KarthikSharma:'2016'不是問題。 'substr(to_char(99999999 - gdatu),1,4)'是 –