0

OracleのSQLDeveloperを使用して次のSQLを実行した場合。

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  

正常に動作しますが、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;');

「ORA-00933:SQLコマンドも正しく終了していません」というエラーメッセージが表示されます

4

3 に答える 3

5

DayParamsの後の二重括弧を見てください。SQLDeveloperSQLにはありません。StackOverflowをOracleSQLスペルチェッカーとして使用しないようにするには、次のようにします。

  1. SQLエディタを使用して、クエリテキストをそこに貼り付けます
  2. 文字列定数を使用して、行ごとではなく全体として割り当てます
于 2011-04-27T18:48:55.827 に答える
1

なぜあなたはこれを難しい方法で行うことを主張するのですか?:)

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;

IDEでこれを選択してクリップボードにコピーし、ユーティリティを実行してから、SQL Developerクエリウィンドウ(またはその他の編集コントロール)に直接貼り付けることができるユーティリティがあります。私は逆のこともします-クリップボードに任意のクエリテキストを選択し、ユーティリティを実行し、その後にコードを貼り付けて、const Whatever =上記のように使用する完全に形成されたDelphi文字列定数を作成します(実際、私はクリーニング後にそれを使用しましたSQL.Addステートメントを作成して、埋め込まれた引用符が正しいことを確認します)。

于 2011-04-27T19:47:38.860 に答える
0

Delphiでクエリに使用しているコンポーネントは何ですか?

ORDER BY句の文字列の最後にセミコロンがあり、クエリに使用しているコンポーネントによっては、このエラーが発生します。

于 2011-04-27T18:47:32.937 に答える