Запрос пользовательского ввода

У меня проблемы с этим запросом. Я пытаюсь создать запрос, в котором пользователь сможет ввести 2 даты во время выполнения. Он просит меня ввести как дату начала, так и дату окончания, но затем появляется: ORA-00904: "JAN": invalid identifier

Мой запрос в настоящее время:

SELECT p.FirstName, p.email, a.Avatar_Name, s.Species_Name, a.Avatar_Level, a.Skill, s.Wisdom_Level, a.AvA_DOB, a.Hoard
    FROM Players P, Avatars A, Species S
    WHERE a.Player_ID = p.Player_ID
    AND a.Species_ID = s.Species_ID
    AND Avatar_Level = 'Master'
    AND AvA_DOB BETWEEN &startdate AND &enddate
    ORDER BY Hoard DESC;

Я хочу, чтобы пользователь мог найти список аватаров между двумя датами, которые пользователь вводит. Любая помощь, пожалуйста? Если вам нужна дополнительная информация, спрашивайте! (: (SQL PLUS)


person user3191460    schedule 06.04.2015    source источник
comment
И эти разные проблемы ...?   -  person Siyual    schedule 06.04.2015
comment
Какую ошибку возвращает sqlplus?   -  person Politank-Z    schedule 06.04.2015
comment
Ну, он просит меня ввести как дату начала, так и дату окончания, но затем приходит: ORA-00904: JAN: недопустимый идентификатор   -  person user3191460    schedule 06.04.2015
comment
Моя ДАТА в формате дд-ммм-гггг, например, 10-ЯНВАРЬ-2014, если это поможет   -  person user3191460    schedule 06.04.2015
comment
Поместите их в одинарные кавычки. '10 -ЯНВАР-2014 '   -  person Bob    schedule 07.04.2015
comment
Как сказал Боб, вы должны заключать переменные в одинарные кавычки и учитывать функцию to_date (чтобы избежать неявного приведения типов).   -  person Patrick Bacon    schedule 07.04.2015


Ответы (1)


Значения даты в SQL необходимо заключать в одинарные кавычки. Oracle преобразует эти строки в тип данных даты, но безопаснее использовать явное преобразование с ожидаемой маской формата.

SELECT p.FirstName, p.email, a.Avatar_Name, s.Species_Name, a.Avatar_Level, a.Skill, s.Wisdom_Level, a.AvA_DOB, a.Hoard
    FROM Players P, Avatars A, Species S
    WHERE a.Player_ID = p.Player_ID
    AND a.Species_ID = s.Species_ID
    AND Avatar_Level = 'Master'
    AND AvA_DOB BETWEEN to_date('&startdate', 'dd-mmm-yyyy') 
                AND to_date('&enddate', 'dd-mmm-yyyy')
    ORDER BY Hoard DESC;
person APC    schedule 06.04.2015
comment
Да, спасибо за ответ. Я действительно понял это, когда еще раз посмотрел на это, у меня только что было напоминание от Боба, ха-ха! В любом случае спасибо. - person user3191460; 08.04.2015