Hilfe bei ORA-00933: SQL-Befehl oder ordnungsgemäß beendet
Frage
Wenn ich den folgenden SQL mit dem SQL -Entwickler von Oracle ausführe.
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
Es funktioniert gut, aber wenn ich versuche, es mit Delphi zu tun
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;');
Ich erhalte den Befehl "ora-00933: SQL oder ordnungsgemäß beendet" Fehlermeldung
Lösung
Schauen Sie sich die Doppelklasse nach DayParams an. Sie haben es nicht in Ihrem SQL -Entwickler SQL. Um zu vermeiden, dass Sie Stackoverflow als Oracle SQL -Zaubersprüche verwenden, können Sie:
- Verwenden Sie den SQL -Editor und fügen Sie dort den Abfragetext ein
- Verwenden Sie eine String -Konstante und weisen Sie sie in einem Ganze an statt Zeile für die Zeile zu
Andere Tipps
Warum bestehen Sie darauf, dies auf die harte Tour zu machen? :)
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;
Ich habe ein Dienstprogramm, mit dem Sie dies in der IDE auswählen und in die Zwischenablage kopieren, das Dienstprogramm ausführen und dann direkt in Ihr SQL -Entwicklerabfragefenster (oder eine andere Bearbeitungssteuerung) einfügen können. Ich habe auch eine, die umgekehrt ist. const Whatever =
Um eine perfekt geformte Delphi -String -Konstante wie oben zu verwenden (tatsächlich habe ich sie nach dem Aufräumen Ihrer SQL.ADD -Anweisungen verwendet, um sicherzustellen, dass eingebettete Zitate korrekt waren).
Welche Komponenten verwenden Sie in Delphi für Ihre Abfrage?
Sie haben am Ende Ihrer Bestellung eine Semikolon, die diesen Fehler verursacht, je nachdem, welche Komponenten Sie für die Abfrage verwenden.