Oracle 中的查询错误

Error with the query in Oracle

我正在使用 Oracle 并在我的 toad 中使用来检查结果是什么。但是我收到错误消息

ORA-01740: missing double quote in identifier

这是我的查询

SELECT T1.Project_Id, 
       PROPERTY_NAME Project_name,
       T1.Vehicle_No,
       T1.Creation_date,
       T1.Time_In,
       T1.Time_Out
FROM 
       XXCUS.XX_SUPINV T1
   INNER JOIN XXACL_PN_PROJBUILD_V T2 
       ON T1.Project_Id = T2.Project_id
WHERE  t1.Project_Id = '" + ddlProjectName.SelectedValue + "' 
   AND Creation_date BETWEEN to_date fnd_conc_date.string_to_date('"TxtIndate.Text"') AND 
         to_date fnd_conc_date.string_to_date('"txtOutDate.Text"')"

请指出我错在哪里

您似乎在查询末尾有额外的 ":

to_date fnd_conc_date.string_to_date('"txtOutDate.Text"')" -- here

应该是这样的:

to_date fnd_conc_date.string_to_date('"txtOutDate.Text"')

An initial double quote (") was found without a closing quote. If an identifier contains a blank or special characters other than $, #, or _, it must be enclosed in double quotes.

Documentation

这是您要执行的实际查询(包含数据)。

SELECT T1.Project_Id, 
       PROPERTY_NAME Project_name,
       T1.Vehicle_No,
       T1.Creation_date,
       T1.Time_In,
       T1.Time_Out
FROM 
       XXCUS.XX_SUPINV T1
   INNER JOIN XXACL_PN_PROJBUILD_V T2 
       ON T1.Project_Id = T2.Project_id
WHERE  t1.Project_Id = '409' 
   AND Creation_date BETWEEN to_date('01-jan-2015','DD-mon-yyyy') AND 
         to_date('01-jan-2012','DD-mon-yyyy')

您的程序化版本可能是(刚从您的基础版本派生而来)

 sl =  "SELECT T1.Project_Id, 
           PROPERTY_NAME Project_name,
           T1.Vehicle_No,
           T1.Creation_date,
           T1.Time_In,
           T1.Time_Out
    FROM 
           XXCUS.XX_SUPINV T1
       INNER JOIN XXACL_PN_PROJBUILD_V T2 
           ON T1.Project_Id = T2.Project_id
    WHERE  t1.Project_Id = '" + ddlProjectName.SelectedValue + "' 
       AND Creation_date BETWEEN fnd_conc_date.string_to_date('" + TxtIndate.Text+ "') AND 
             fnd_conc_date.string_to_date('"+ txtOutDate.Text +"')"

To improve readability and avoid SQL*Injection,you should try using bind variables( I am not so thorough with the .NET syntax)

正在将评论变成答案...

您可能要先验证一下,数据确实是从数据库流向您的前端。为此,验证对 return 数据的简化查询,例如 TOAD。然后只需将查询字符串复制到您的应用程序代码,并将其从那里发送到数据库。尝试以下方法:

SELECT
  T1.Project_Id,
  PROPERTY_NAME Project_name,
  T1.Vehicle_No,
  T1.Creation_date,
  T1.Time_In,
  T1.Time_Out
FROM XXCUS.XX_SUPINV T1
INNER JOIN XXACL_PN_PROJBUILD_V T2
  ON T1.Project_Id = T2.Project_id
WHERE t1.Project_Id = 409
  AND Creation_date BETWEEN TO_DATE('01-jan-2015', 'DD-MON-YYYY')
                    AND TO_DATE('01-jan-2012', 'DD-MON-YYYY')

如果需要调整/进一步的详细信息,请发表评论。