如果我使用Oracle的SQL开发人员运行以下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命令,也没有正确结束”错误消息

有帮助吗?

解决方案

看一位末日的双括号。您在SQL开发人员SQL中没有它。为了避免使用Stackoverflow作为Oracle SQL Spell Checker,您可以:

  1. 使用SQL编辑器并在那里粘贴查询文本
  2. 使用字符串常数并整体分配,而不是按行分配

其他提示

您为什么坚持这样做? :)

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开发人员查询窗口(或任何其他编辑控件)中。我也有一个反向进行的 - 您选择任何查询文本到剪贴板中,运行实用程序,然后在后面粘贴代码 const Whatever = 为了使完美形成的delphi字符串常数如上所述(实际上,我在清理您的SQL.ADD语句后使用它以确保嵌入式引号正确)。

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

您在订单结尾处通过子句字符串有一个半彩色,这将导致此错误,具体取决于您用于查询的组件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top