2011-04-27 95 views
0

如果我运行使用Oracle的SQL Developer中的下列SQL。帮助ORA-00933: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命令,也没有正确地结束” 错误消息

+0

对不起,我贴错SQL顶部,反正,你明白我的意思。替换为payee_id和相同的SQL – IElite 2011-04-27 18:37:42

+1

的payee_address_zip如果贴错了SQL,那么请编辑的问题解决它。在发现不准确之后,没有任何不准确的问题存在。它只是混淆稍后访问此问题的人。 – 2011-04-27 20:40:32

回答

5

看DayParams后的双支架。你没有在你的SQL Developer SQL中。为了避免您使用的StackOverflow作为Oracle SQL拼写检查器,您可以:

  1. 使用SQL编辑器并粘贴 查询文本有
  2. 使用字符串常量,并在整个分配 它,而不是通过 线
0

是什么成分你在Delphi中使用你的查询?

你得在你的订单结束BY子句字符串中的分号,这将导致这个错误,这取决于你使用的组件查询。

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开发人员查询窗口(或其他任何编辑控制)。我也有一个则相反 - 你选择的任何查询文本到剪贴板,运行实用程序,然后将代码粘贴后const Whatever =做出五脏俱全德尔福字符串常量如上使用(其实我之后用它清理你的SQL.Add语句以确保嵌入的引号是正确的)。

相关问题