ASP.NET Oracle SQL查询未正确结束?

时间:2012-11-13 21:27:23

标签: asp.net sql oracle

我是ASP.NET和Oracle SQL的新手。我正在尝试创建一个长SQL字符串(使用UNION ALL),然后将该字符串传递给Data Handler类,该类负责其余部分。问题肯定存在于我的SQL字符串中。

这是我的代码的第一部分,它完美运行:

sql = "SELECT 'DCS - HCA (81)', HCA_SENT_DCS, HCA_VALID_DCS, HCA_SUSPEND_DCS, HCA_REJECTED_DCS,"
sql &= " SUM(HCA_VALID_DCS + HCA_SUSPEND_DCS + HCA_REJECTED_DCS) As ""Total Returned"","
sql &= " RESOLVED_CNT, SUM(HCA_REJECTED_DCS - RESOLVED_CNT) As ""To Do"""
sql &= " FROM HUB_CDI_CONTROL_NBRS WHERE REPORT_DATE = :0 "
_param.Add(dateSelected.ToString("dd-MMM-yyyy"))
sql &= " GROUP BY HCA_SENT_DCS, HCA_VALID_DCS, HCA_SUSPEND_DCS, HCA_REJECTED_DCS,"
sql &= " RESOLVED_CNT"

但是,当我尝试使用另一个UNION语句SELECT此SQL时,我得到以下异常:

ORA-00933: SQL command not properly ended

以下是完整代码:

sql = "SELECT 'DCS - HCA (81)', HCA_SENT_DCS, HCA_VALID_DCS, HCA_SUSPEND_DCS, HCA_REJECTED_DCS,"
sql &= " SUM(HCA_VALID_DCS + HCA_SUSPEND_DCS + HCA_REJECTED_DCS) As ""Total Returned"","
sql &= " RESOLVED_CNT, SUM(HCA_REJECTED_DCS - RESOLVED_CNT) As ""To Do"""
sql &= " FROM HUB_CDI_CONTROL_NBRS WHERE REPORT_DATE = :0 "
sql &= " GROUP BY HCA_SENT_DCS, HCA_VALID_DCS, HCA_SUSPEND_DCS, HCA_REJECTED_DCS,"
sql &= " RESOLVED_CNT"

sql &= " UNION ALL"

sql &= "SELECT 'SFDC - HCA (82)', HCA_SENT_SFDC, HCA_VALID_SFDC, HCA_SUSPEND_SFDC, HCA_REJECTED_SFDC,"
sql &= " SUM(HCA_VALID_SFDC + HCA_SUSPEND_SFDC + HCA_REJECTED_SFDC) As ""Total Returned"","
sql &= " RESOLVED_CNT, SUM(HCA_REJECTED_SFDC - RESOLVED_CNT) As ""To Do"""
sql &= " FROM HUB_CDI_CONTROL_NBRS WHERE REPORT_DATE = :0 "
sql &= " GROUP BY HCA_SENT_SFDC, HCA_VALID_SFDC, HCA_SUSPEND_SFDC, HCA_REJECTED_SFDC,"
sql &= " RESOLVED_CNT"

_param.Add(dateSelected.ToString("dd-MMM-yyyy"))
_DH.TheSQL = sql
_DT = _DH.GetTableWithParameters(_param.ToArray)

我关注此代码的两部分:

  1. 我是否正确调用_param.Add()函数?由于我使用:0两次引用参数,我只需要使用一次_param.Add()函数吗?

  2. 我觉得我错误地使用了GROUP BY语法。当我试图在不使用GROUP BY的情况下运行查询时,Oracle对我大吼大叫,但我不确定我是否正确使用它们。基本上,我只是将每个列SELECTed添加到GROUP BY

  3. 否则,我确信还有其他错误。请帮忙!

    谢谢。

1 个答案:

答案 0 :(得分:1)

sql &= " UNION ALL"
sql &= "SELECT 'SFDC - HCA (82)', HCA_SENT_SFDC, HCA_VALID_SFDC, HCA_SUSPEND_SFDC, HCA_REJECTED_SFDC,"

结果,在中间的某个地方:

... UNION ALLSELECT 'SFDC - HCA (82)', HCA_SENT_SFDC, ...

注意:“UNION ALLSELECT

<小时/> 包含其他修复程序的完整代码。我不相信你真的想要GROUP BY,加/减,你不需要SUM()函数。要在UNION ALL中有效,必须将第一部分的所有列命名为/别名。

sql = "SELECT 'DCS - HCA (81)' Title, HCA_SENT_DCS, HCA_VALID_DCS, HCA_SUSPEND_DCS, HCA_REJECTED_DCS,"
sql &= " HCA_VALID_DCS + HCA_SUSPEND_DCS + HCA_REJECTED_DCS As ""Total Returned"","
sql &= " RESOLVED_CNT, HCA_REJECTED_DCS - RESOLVED_CNT As ""To Do"""
sql &= " FROM HUB_CDI_CONTROL_NBRS WHERE REPORT_DATE = :0 "
sql &= " UNION ALL "
sql &= "SELECT 'SFDC - HCA (82)', HCA_SENT_SFDC, HCA_VALID_SFDC, HCA_SUSPEND_SFDC, HCA_REJECTED_SFDC,"
sql &= " HCA_VALID_SFDC + HCA_SUSPEND_SFDC + HCA_REJECTED_SFDC As ""Total Returned"","
sql &= " RESOLVED_CNT, HCA_REJECTED_SFDC - RESOLVED_CNT As ""To Do"""
sql &= " FROM HUB_CDI_CONTROL_NBRS WHERE REPORT_DATE = :1 "

_param.Add(dateSelected.ToString("dd-MMM-yyyy"))
_param.Add(dateSelected.ToString("dd-MMM-yyyy"))  ' 2nd one
_DH.TheSQL = sql
_DT = _DH.GetTableWithParameters(_param.ToArray)