Помощь с ORA-00933: команда SQL не завершена должным образом - PullRequest
0 голосов
/ 27 апреля 2011

Если я запускаю следующий SQL с помощью Oracle SQL Developer.

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 не завершена правильно»

Ответы [ 3 ]

5 голосов
/ 27 апреля 2011

Посмотрите на двойную скобку после DayParams.У вас его нет в вашем SQL Developer SQL.Чтобы избежать использования StackOverflow в качестве средства проверки орфографии Oracle SQL, вы можете:

  1. Использовать редактор SQL и вставить туда текст запроса
  2. Использовать строковую константу и назначить еецелое, а не построчное
1 голос
/ 27 апреля 2011

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

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 и скопировать в буфер обмена, запустить утилиту, а затем вставить прямо в окно запроса SQL Developer (или любой другой элемент управления редактирования). У меня также есть тот, который делает обратное - вы выбираете любой текст запроса в буфер обмена, запускаете утилиту, а затем вставляете код после const Whatever =, чтобы сделать идеально сформированную строковую константу Delphi для использования, как описано выше (на самом деле я использовал это после очистки ваших операторов SQL.Add, чтобы убедиться, что встроенные кавычки были правильными).

0 голосов
/ 27 апреля 2011

Какие компоненты вы используете в Delphi для своего запроса?

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

...