【问题标题】:Error with the query in OracleOracle 中的查询错误
【发布时间】:2015-09-21 23:08:27
【问题描述】:

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

ORA-01740:标识符中缺少双引号

这是我的查询

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() 必须像 to_date('20-Jan-2015','DD-Mon-YYYY') .. 你的日期转换有点混乱
  • @MaheswaranRavisankar:是的,我在 Toad 中尝试过,但出现错误
  • @MaheswaranRavisankar:好的,让我编辑和检查
  • 在您声明的最后似乎有一个无与伦比的"...(以...开头)
  • @Abecee:你能帮我正确查询吗?

标签: sql asp.net oracle oracle10g


【解决方案1】:

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

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

应该是这样的:

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

找到一个没有右引号的初始双引号 (")。如果 标识符包含除 $、# 或 _,必须用双引号括起来。

Documentation

【讨论】:

  • 你能帮我完成完整的查询吗,因为我仍然遇到同样的错误
【解决方案2】:

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

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 +"')"

为了提高可读性并避免SQL*Injection,你应该try using bind variables(我对.NET语法不是很彻底)

【讨论】:

  • 第一个在 oracle 中工作正常,但第二个给出错误为 ; 预期 (fnd_conc_date.string_to_date('"TxtIndate.Text"')
  • string_to_date() 是你在asp.net 中的函数吗?
  • 不,我猜它是在oracle中用于动态调用的
  • @nad 在这种情况下,你不需要 to_date() ,假设名称..它返回日期本身..
  • @nad 我用我的 iPad 进行了编辑.. 非常困难!现在应该可以了。
【解决方案3】:

将评论变成答案...

您可能想先验证一下,数据实际上是从数据库流向您的前端。为此,验证一个简化的查询以返回数据,例如 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')

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

【讨论】:

    猜你喜欢
    • 2015-03-06
    • 2011-10-05
    • 2011-11-01
    • 2012-04-15
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2013-02-13
    • 2012-02-27
    相关资源
    最近更新 更多