2012-11-13 110 views
1

我是ASP.NET和Oracle SQL的新手。我试图创建一个长的SQL字符串(使用UNION ALL),然后将字符串传递给一个Data Handler类来处理剩下的事情。这个问题当然存在于我的SQL字符串中。ASP.NET Oracle 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这个SQL与另一个SELECT声明,我得到以下异常:

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对我大吼,但我不确定是否正确使用它们。从本质上讲,我只是说每一列我SELECTedGROUP BY

否则,我肯定还有其他的错误,我很想念。请帮忙!

谢谢。

+0

通过让SQL语句首先在您的asp.net应用程序之外工作,可能更容易识别问题。快速浏览之后,您还需要在UNION ALL之后或下一个选择语句之前留出空间。 – Fishcake

回答

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) 
+0

非常感谢。这个错误确实是'UNION ALL'和'SELECT'之间的缺失空间。此外,我删除了所有的SUM函数,并使用常规运算符'+'和'-'来代替。现在,我不必使用“GROUP BY”子句。 – TimeBomb006

相关问题