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

War es hilfreich?

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:

  1. Verwenden Sie den SQL -Editor und fügen Sie dort den Abfragetext ein
  2. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top