Помогите с ORA-00933: команда SQL и должным образом закончившимся

StackOverflow https://stackoverflow.com/questions/5808852

Вопрос

Если я запускаю следующий 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, вы можете:

  1. Используйте редактор SQL и вставьте текст запроса там
  2. Используйте константу строки и назначьте ее в целом, вместо линии по строке

Другие советы

Почему вы настаиваете на том, чтобы сделать это трудным путем? :)

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 для вашего запроса?

У вас есть полуколон в конце вашей строки заказа по пункту, которая вызовет эту ошибку, в зависимости от того, какие компоненты вы используете для запроса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top