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

时间:2011-04-27 18:36:28

标签: 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_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命令也未正确结束”错误消息

3 个答案:

答案 0 :(得分:5)

看看DayParams之后的双括号。您没有在SQL Developer SQL中使用它。为避免将StackOverflow用作Oracle SQL拼写检查程序,您可以:

  1. 使用SQL编辑器粘贴 在那里查询文本
  2. 使用字符串常量并指定 它在一个整体而不是排队 线

答案 1 :(得分: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语句后使用它来确保嵌入式引号是正确的。

答案 2 :(得分:0)

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

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