Oracle ORA-00933的帮助:SQL命令未正确结束

Oracle ORA-00933的帮助:SQL命令未正确结束,oracle,delphi,delphi-7,ora-00933,Oracle,Delphi,Delphi 7,Ora 00933,如果我使用Oracle的SQL Developer运行以下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_add

如果我使用Oracle的SQL Developer运行以下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命令未正确结束”错误消息

您在Delphi中使用哪些组件进行查询


您的ORDER BY子句字符串末尾有一个分号,这将导致此错误,具体取决于您用于查询的组件。

您在Delphi中用于查询的组件是什么


ORDER BY子句字符串的末尾有一个分号,这将导致此错误,具体取决于用于查询的组件。

查看DayParams后面的双括号。您的SQL开发人员SQL中没有它。为避免将StackOverflow用作Oracle SQL拼写检查器,您可以:

  • 使用SQL编辑器并粘贴 在那里查询文本
  • 使用字符串常量并赋值 它是一个整体,而不是一行一行 线

  • 看DayParams后面的双括号。您的SQL开发人员SQL中没有它。为避免将StackOverflow用作Oracle SQL拼写检查器,您可以:

  • 使用SQL编辑器并粘贴 在那里查询文本
  • 使用字符串常量并赋值 它是一个整体,而不是一行一行 线

  • 你为什么坚持要这么做?:)


    我有一个实用程序,可以让您在IDE中选择它并将其复制到剪贴板,运行该实用程序,然后直接粘贴到SQL Developer查询窗口(或任何其他编辑控件)中。我还有一个可以做相反的操作——你选择任何查询文本到剪贴板,运行实用程序,然后将代码粘贴在
    constwhater=
    之后,以使一个格式完美的Delphi字符串常量可以像上面一样使用(事实上,我在清理SQL之后使用了它。添加语句以确保嵌入的引号是正确的).

    你为什么坚持要这么做


    我有一个实用程序,可以让您在IDE中选择它并将其复制到剪贴板,运行该实用程序,然后直接粘贴到SQL Developer查询窗口(或任何其他编辑控件)中。我还有一个可以做相反的操作——你选择任何查询文本到剪贴板,运行实用程序,然后将代码粘贴到
    constwhater=
    后面,使一个格式完美的Delphi字符串常量可以像上面一样使用(事实上,我是在清理SQL之后使用它的。添加语句以确保嵌入的引号是正确的)。

    对不起,我在顶部发布了错误的sql,不管怎样,你明白我的意思了。如果您发布了错误的SQL,请用收款人id及其相同的SQL替换收款人地址,然后通过编辑问题来修复它。在发现错误后,没有理由存在不准确的问题。这只是让后来访问这个问题的人感到困惑。对不起,我在顶部发布了错误的sql,不管怎样,你明白我的意思了。如果您发布了错误的SQL,请用收款人id及其相同的SQL替换收款人地址,然后通过编辑问题来修复它。在发现错误后,没有理由存在不准确的问题。它只是让后来访问这个问题的人感到困惑。
    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;