Aiuto di ORA-00933: SQL Comando non correttamente conclusa
Domanda
Se si esegue il seguente SQL utilizzando 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
Funziona bene, ma quando provo a farlo utilizzando 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;');
ho la "ORA-00933: Comando SQL né correttamente terminato" messaggio di errore
Soluzione
Guardate la doppia staffa dopo DayParams. Non avete nel vostro SQL Developer SQL. Per evitare di utilizzare StackOverflow come un correttore ortografico Oracle SQL, si potrebbe:
- Utilizzare l'editor SQL e incollare il testo della query ci
- Utilizzare una costante di stringa e assegnare in un intero, invece di linea da riga
Altri suggerimenti
Perché insisti a fare questo nel modo più duro? :)
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;
Ho un utility che vi permetterà di selezionare questo nell'IDE e copiarlo negli appunti, esegue l'utilità, e quindi incollare direttamente nella finestra di query SQL Developer (o qualsiasi altro controllo di modifica). Ho anche uno che fa il contrario - si seleziona un testo di query nella clipboard, esegue l'utilità, e quindi incollare il codice dopo la const Whatever =
di fare una costante stringa di Delphi perfettamente formato per l'uso come sopra (in realtà, l'ho usato dopo ripulire le sue dichiarazioni SQL.Add per rendere sicuri citazioni incorporate erano corrette).
Quali componenti stai usando in Delphi per la tua ricerca?
Hai un punto e virgola alla fine del tuo ordine stringa di clausola che causerà questo errore, a seconda di quali componenti che si sta utilizzando per la query.