Как передать параметр даты из конструктора запросов построителя отчетов в базу данных оракула

Я использую построитель отчетов 3.0, подключенный к базе данных оракула. я безуспешно пытаюсь передать параметр даты в запросе, я не знаю точного синтаксиса. Я пробовал :

SELECT * 
FROM igeneral.GCL_CLAIMS
WHERE CREATED_BY IN (:CREATED_BY) AND CLAIM_YEAR IN(:UW_YEAR)  
  AND (Trunc(LOSS_DATE,'mm/dd/yyyy') BETWEEN to_char(':From', 'mm/dd/yyyy') 
  AND to_char('To', 'mm/dd/yyyy'))

я получил эту ошибку: ORA-01036: illegal variable name/number

также я пробовал это:

SELECT * 
FROM igeneral.GCL_CLAIMS 
WHERE CREATED_BY IN (:CREATED_BY) AND CLAIM_YEAR IN(:UW_YEAR)  
  AND (LOSS_DATE BETWEEN ':From' AND ':To') 

я получил эту ошибку: ORA-01036: illegal variable name/number

Спасибо


person Georges Sabbagh    schedule 19.09.2014    source источник
comment
': FROM' и ': To' выглядят подозрительно для меня. Я полагаю, вы пытаетесь заставить движок преобразовать текст «: FROM» в формат мм/дд/гггг. Я считаю, что вы не хотите тиков; и разве вы не имеете в виду to_date вместо to_char? :FROM и :To, скорее всего, уже являются строками, передаваемыми правильно, и их необходимо преобразовать в даты, чтобы правильно использовать между ними.   -  person xQbert    schedule 19.09.2014
comment
вы правы, я имею в виду to_date, я пробовал to_char, так как нашел сообщение в Интернете, используя to_char вместо to_date, но не сработало. From и To — параметры; можете ли вы дать мне правильный синтаксис для использования ??   -  person Georges Sabbagh    schedule 19.09.2014
comment
Нужно просто удалить переменную/параметры тиков, которые не должны быть завернуты в тики. тип данных известен, поскольку его нужно было передать в качестве параметра, поэтому вам не нужны тики вокруг них.   -  person xQbert    schedule 19.09.2014
comment
я пробовал, но не сработало, можете ли вы дать мне правильный синтаксис   -  person Georges Sabbagh    schedule 23.09.2014


Ответы (2)


Решение зависит от data type параметров from и to.

Если ваш параметр имеет тип данных DATE, используйте to_char для преобразования даты в литерал требуемого формата, который вы хотите отобразить. В противном случае, если параметр имеет тип данных VARCHAR2, используйте to_date для преобразования литерала даты в дату для сравнения.

В вашем случае вполне вероятно, что столбец LOSS_DATE является DATE, а ваши параметры являются литералами, поэтому используйте `TO_DATE для параметров, используя правильную маску формата.

LOSS_DATE BETWEEN to_date(':From', 'mm/dd/yyyy') AND to_date('To', 'mm/dd/yyyy')

person Lalit Kumar B    schedule 19.09.2014
comment
я попробовал, как вы предложили, набор данных сохранен без ошибок, однако при запуске отчета возникает ошибка ORA-01036: недопустимое имя/номер переменной - person Georges Sabbagh; 23.09.2014
comment
Если данные вставляются в базу данных правильно, это означает несоответствие типа данных при формировании отчета. - person Lalit Kumar B; 23.09.2014
comment
как я могу это отследить, я пытался преобразовать все поля в дату, используя функцию To_Date, но не работал - person Georges Sabbagh; 23.09.2014
comment
Вы использовали именно date format? Кстати, в своих отчетах вы используете TO_DATE или CAST? - person Lalit Kumar B; 23.09.2014
comment
я использую To_Date и поле loss_type имеют значение, подобное этому 13.01.2014 11:24:00, From и To - параметры, имеющие тип данных даты/времени - person Georges Sabbagh; 23.09.2014
comment
Попробуйте TRUNC в поле loss_type. Если поле DATE, используйте trunc напрямую, иначе, если оно буквальное, используйте TO_DATE с требуемым форматом. - person Lalit Kumar B; 23.09.2014

Ошибка ORA-01036: недопустимое имя/номер переменной обычно возникает в отчете Oracle, когда параметр, указанный в навигаторе объектов, не соответствует переменной связывания, на которую ссылается запрос.

Ваши переменные связывания :From и :To отображаются в «Параметры пользователя» в навигаторе объектов? Я заметил, что в приведенном вами коде нет двоеточия перед переменной связывания :To.

Правильный пример

Вот снимок экрана с заполненными параметрами пользователя отчета Oracle.... и, в частности, переменной связывания :p_as_of_date. Обратите внимание, что в показанном инспекторе свойств можно указать тип данных и маску ввода. Вы установили параметры :From и :To таким образом? В частности, если ваш параметр используется как дата, я бы удостоверился, что для типа данных установлено значение Дата в инспекторе свойств. введите здесь описание изображения

Вот фрагмент переменной связывания :p_as_of_date в «заполненном» отчете Oracle, и здесь на нее ссылаются в запросе:

 where      TRUNC(ps.gl_date)    <= :p_as_of_date 

Обратите внимание, что приведение не требуется. С вашим запросом я бы выбрал такой подход (опять же, без кастинга):

AND TRUNC(LOSS_DATE,'mm/dd/yyyy') BETWEEN :From AND :To

Следовательно, я бы просто удостоверился, что переменная связывания, указанная в «Параметры пользователя», соответствует переменным связывания в вашем запросе.

person Patrick Bacon    schedule 19.09.2014
comment
Я попробовал вышеописанное, но после того, как я нажму «ОК», чтобы сохранить, появится всплывающее окно «Определить параметры запроса», в котором перечислены все мои параметры со столбцами «Имя параметра» и «Значение параметра». Также обратите внимание, что в дизайне запросов у меня нет визуального интерфейса таблиц и представлений, такого же, как ваш экран навигатора объектов, я могу только писать запросы; есть ли способ показать это, так как это облегчит работу - person Georges Sabbagh; 23.09.2014