2016-06-08 3 views
0

Это Oracle Query в моем приложении.Запрос Oracle на TCURR

Я думаю, что это используется для валюты 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) 

Нет необходимости конвертировать его назад и вперед.


Unrelated, но:

Это: substr(to_char(99999999 - gdatu), 1, 4) является высоко подозрительными, а также. Что именно вы храните в gdatu, что вам нужно вычесть это из 99999999, чтобы получить что-то вроде даты? Почему вы не храните даты в соответствующей колонке DATE?

+0

Фактически, он имеет параметры вместо «2016». Я сохранил там фактическое значение параметра. –

+0

@ KarthikSharma: «2016» - это не проблема. 'Substr (to_char (99999999 - gdatu), 1, 4)' является –

Смежные вопросы