SQL查询在PL / SQL中有效,但在Visual Studio中无效

时间:2015-06-07 13:16:35

标签: sql asp.net oracle visual-studio syntax-error

我在网上搜索并发现许多人有同样的问题,但没有解决方案适合我。 我真的希望你能帮助我: 我有这个在PL / SQL中正常工作的ORACLE SQL查询:

    select PROVIDER,sum(CALLS),sum(CHARGE),sum(DUR)
from (
select bzq_terminate_provider PROVIDER,callsnum CALLS,charge_amount CHARGE,at_call_dur_sec DUR
from   usage_cycle_sum 
where  ban='80072922' and ben='1'
  and  subscriber_no='036585305'
  and  start_cycle_code ='20150207'
  and  feature_code_rank='1'
union  
select bzq_terminate_provider PROVIDER,0 CALLS,charge_amount CHARGE,0 DUR
from   usage_cycle_sum 
where  ban='80072922' and ben='1'
  and  subscriber_no='036585305'
  and  start_cycle_code ='20150207'
  and  feature_code_rank='2'
  )
group by PROVIDER 

我也试过这个其他版本也可以正常工作:

<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
      <title>Insert title here</title>
      <%--color picker --%>
      <script type="text/javascript" src="jscolor.js"></script>
      <script type="text/javascript">
         function add() {
            document.body.innerHTML += "<input id=\"zaz1\" size=\"5\" class=\"color\" value=\"000000\"> ";
         }
      </script>
   </head>
   <body>
      <input id="zaz" size="5" class="color" value="000000">
      <p onclick="add()">add</p>
   </body>
</html>

我的问题是,当我在Visual Studio Web应用程序中创建数据网格时,我收到一个错误:语法错误:期望标识符或带引号的标识符

连接正常,我检查了简单的选择查询以及我附加的第二个查询中的整个联合部分,它们有效! 但是当我使用这两个版本时,我得到了这个错误。

可能是什么问题?还有另一种解决方法吗? 感谢。

编辑21/06/2015 似乎visual studio不能很好地处理复杂的查询,我仍然在寻找解决方案,因为我的下一个查询更复杂......

1 个答案:

答案 0 :(得分:1)

你的第二个查询写得好得多:

select bzq_terminate_provider as PROVIDER, sum(callsnum) as CALLS,
       sum(charge_amount) as CHARGE, sum(at_call_dur_sec) as DUR
from usage_cycle_sum 
where ban = '80072922' and ben = '1' and
      subscriber_no = '036585305' and
      start_cycle_code ='20150207' and
      feature_code_rank in ('1', '2')
group by bzq_terminate_provider ;

或者,select可能需要:

select bzq_terminate_provider as PROVIDER,
       sum(case when feature = '1' then callsnum else 0 end) as CALLS,
       sum(charge_amount) as CHARGE,
       sum(case when feature = '1' then at_call_dur_sec else 0 end) as DUR

(第一个版本假设字段在第二个子查询中被清零,因为它们在数据中是NULL,但这可能不是真的。)

但是,应用程序软件还不够智能,无法识别这些写得不好的查询,因此这不是您面临的实际问题。如果查询在数据库中有效,但在应用程序中无效,那么典型的问题是:

  • 应用程序未连接到正确的数据库。
  • 应用程序没有数据库或表的权限。
  • 应用程序查询与数据库中运行的查询不同,通常是由于某些替换问题。
  • 未正确解释在应用程序中运行查询的结果。