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

È stato utile?

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:

  1. Utilizzare l'editor SQL e incollare il testo della query ci
  2. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top