Помогите с ORA-00933: команда SQL и должным образом закончившимся
Вопрос
Если я запускаю следующий SQL, используя разработчик Oracle SQL.
select payee_id, to_char(check_date,'d') as DOW,
(cmcl_bank_cleared - check_date) as DateDiff from AP_Master
where (cmcl_bank_cleared is not null) AND ((cmcl_bank_cleared - check_date) >=1)
order by payee_address_zip, DOW, DateDiff
Он работает нормально, однако, когда я пытаюсь сделать это, используя Delphi
SQL.Add('select payee_id, to_char(check_date, ' + QuotedStr('d') + ') as DOW, ');
SQL.Add('(cmcl_bank_cleared - check_date) as DateDiff from AP_Master ');
SQL.Add('where (cmcl_bank_cleared is not null) AND ((cmcl_bank_cleared - check_date) >=:DaysParam))');
SQL.Add('order by payee_id, DOW, DateDiff;');
Я получаю команду «ORA-00933: SQL и должным образом законченное» сообщение об ошибке
Решение
Посмотрите на двойной кронштейн после DayParams. У вас нет этого в своем разработчике SQL SQL. Чтобы избежать использования Stackoverflow в качестве проверки орфографии Oracle SQL, вы можете:
- Используйте редактор SQL и вставьте текст запроса там
- Используйте константу строки и назначьте ее в целом, вместо линии по строке
Другие советы
Почему вы настаиваете на том, чтобы сделать это трудным путем? :)
const
SQLText = 'select payee_id, to_char(check_date, ''d'') as DOW,'#13 +
'(cmcl_bank_cleared - check_date) as DateDiff from AP_Master'#13 +
'where (cmcl_bank_cleared is not null)'#13 +
'AND (cmcl_bank_cleared - check_date >=:DaysParam)'#13 +
'order by payee_id, DOW, DateDiff'#13;
begin
MyQuery.SQL.Text := SQLText;
MyQuery.ParamByName('DaysParam').AsInteger := SomeNumberOfDays;
try
MyQuery.Open;
// Use query results
finally
MyQuery.Free;
end;
end;
У меня есть утилита, которая позволит вам выбрать это в IDE и скопировать его в буфер обмена, запустить утилиту, а затем вставить непосредственно в окно запроса Developer SQL (или любое другое управление редактированием). У меня также есть тот, который делает обратный разор. const Whatever =
Чтобы сделать идеально сформированную постоянную строку Delphi для использования, как указано выше (на самом деле я использовал ее после очистки ваших операторов SQL.Add, чтобы убедиться, что встроенные цитаты были правильными).
Какие компоненты вы используете в Delphi для вашего запроса?
У вас есть полуколон в конце вашей строки заказа по пункту, которая вызовет эту ошибку, в зависимости от того, какие компоненты вы используете для запроса.