2013-01-06 2 views
0

У меня есть представление, которое я создал в Oracle. Он возвращает строки, но когда я использую его через Crystal Reports, я не получаю строк. Я сузил к этому КТРУ в запросе позади зрения:Oracle возвращает строки - Crystal Reports не

WITH PERIODS AS (
    SELECT 
    ROWNUM-13 RN, 
    TO_DATE('01-JUL-' || TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE),-6), 'YYYY')) AS FISCAL_YEAR_START, 
    ADD_MONTHS(TO_DATE('01-JUL-' || TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE),-6), 'YYYY')), ROWNUM-13) AS MONTH 
    FROM 
    DUAL 
    CONNECT BY 
    ROWNUM <= 24 
) 

Это довольно странно, как если бы я заменить этот КТР со следующим, он работает (это второй запрос, что был первоначальный доклад , но из-за логических проблем при нахождении финансового года его пришлось изменить).

WITH PERIODS AS (
    SELECT 
    ROWNUM-13 RN, 
    ADD_MONTHS(TRUNC(sysdate,'yyyy'),6) AS FISCAL_YEAR_START, 
    TRUNC(ADD_MONTHS(ADD_MONTHS(TRUNC(sysdate,'yyyy'),6), ROWNUM-13),'MONTH') MONTH 
    FROM 
    DUAL 
    CONNECT BY 
    ROWNUM <= 24 
) 

Любая идея, почему второй CTE заставляет отчеты Crystal не вытягивать какие-либо записи? Есть определенные строки, возвращаемые с обоими запросами, просто Crystal Reports не нравится первый запрос (хотя я не понимаю, почему, поскольку я бы подумал, что Crystal просто запросит Oracle для данных, а не будет обеспокоен тем, что стоит вид ?!)

ответ

0

Не знаю, почему, но я изменил КТР на следующее, и она работала:

SELECT 
    ROWNUM-13 RN, 
    ADD_MONTHS(TRUNC(ADD_MONTHS(SYSDATE,6),'YYYY'),-6) AS FISCAL_YEAR_START, 
    ADD_MONTHS(ADD_MONTHS(TRUNC(ADD_MONTHS(SYSDATE,6),'YYYY'),-6), ROWNUM-13) MONTH 
    FROM 
    DUAL 
    CONNECT BY 
    ROWNUM <= 24 

Я бы еще очень хотелось бы знать, почему запрос за мнение влияла Crystal Reports!

0

В ваш первый запрос этой линии: -

TO_DATE('01-JUL-' || TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE),-6), 'YYYY')) AS FISCAL_YEAR_START 

упростило бы вниз: -

TO_DATE('01-JUL-2012') 

Oracle будет использовать формат даты по умолчанию для выполнения преобразования.

Возможно, это происходит по-разному, когда вы подключаетесь через Crystal Reports. Лучше использовать явно заданный формат даты, предоставляя второй аргумент TO_DATE.

В отчете Crystal Reports сообщается об ошибке ORA, например, ORA-01861: literal does not match format string?

+0

Это не упростит это, поскольку это не приведет к динамическому выходу текущего финансового года, чего и достигнет это утверждение. Нет, ошибок нет. Два запроса возвращают те же результаты при запросе таблицы; просто Crystal Reports думает, что он возвращает 0 строк с первым утверждением. – Lock

+0

Я понимаю, что это будет отличаться в зависимости от sysdate. Дело в том, что у вас нет второго аргумента для TO_DATE, что заставляет его зависеть от настроек уровня сеанса, которые могут различаться в зависимости от того, как вы подключаетесь. –

+0

Ооооооооооооо! Тогда это имеет смысл. Однако я не понимаю, почему я могу выбирать данные из представления еще в одной программе, но не в другом? Я бы подумал, что формат даты за точкой зрения зависит от сервера oracle, а не от параметров приложений (так как это представление, я бы ожидал, что эта часть будет прозрачной для приложения?) – Lock

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