Question

Si je lance le SQL à l'aide du développeur SQL d'Oracle.

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  

Il fonctionne très bien, mais lorsque je tente de le faire en utilisant 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;');

je reçois le: message d'erreur "ORA-00933 Commande SQL, ni correctement terminé"

Était-ce utile?

La solution

Regardez la double support après DayParams. Vous ne l'avez pas dans votre SQL Developer SQL. Pour vous éviter d'utiliser StackOverflow comme un correcteur orthographique Oracle SQL, vous pouvez:

  1. Utilisez l'éditeur SQL et collez le texte de la requête il y a
  2. Utilisez une constante de chaîne et assign dans son ensemble, au lieu de la ligne par ligne

Autres conseils

Pourquoi insistez-vous à faire cela à la dure? :)

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;

J'ai un utilitaire qui vous permettra de sélectionner ce dans l'EDI et le copier dans le presse-papiers, exécutez l'utilitaire, puis coller directement dans la fenêtre requête SQL Developer (ou tout autre contrôle d'édition). J'ai aussi celui qui fait l'inverse - vous sélectionnez un texte de la requête dans le presse-papiers, exécutez l'utilitaire, puis collez le code après la const Whatever = pour faire une constante de chaîne Delphi parfaitement formé à l'utilisation comme ci-dessus (en fait, je l'ai utilisé après nettoyage vos déclarations SQL.Add pour faire des citations que incorporées sont correctes).

Quels sont les composants que vous utilisez dans Delphi pour votre requête?

Vous avez un point-virgule à la fin de votre commande par chaîne de clause qui provoque cette erreur, en fonction des composants que vous utilisez pour la requête.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top