System.Data.OracleClient.OracleException: ORA-00979: not a GROUP BY expression

今天因为这个问题纠结了很久,其实这已不是第一次犯这样的错误了,今天特别记录下来,以防再犯。

总的来说,是因为oracleclient类型转换产生的错误,同样一条正确的sql语句,今天不出错误,或许明天就会出错,结合个人的错误经历,错误的来源主要来源于聚集函数,一下示范错误是如何产生的:

首先,给出获取数据源的函数

  public DataTable ORselect(string str)
        {
            DataTable dt = new DataTable();
            OracleConnection conn = new OracleConnection();
            conn.ConnectionString = ConnectionString;
            OracleDataAdapter adapter = new OracleDataAdapter(str, conn);
            try
            {
                conn.Open();
                adapter.Fill(dt);
            }
            catch(OracleException ee)
            {
                ErrorString = ee.ToString();
            }
            finally
            {
                conn.Close(); //关闭连接
            }
            return dt;
        }

然后有调用函数语句:

 string selectsql = "select clusterid,avg(age)  from v_physics_storeaction group by clusterid";

 DataTable dt = conn.ORselect(selectsql);

咋一看,这有错吗??没错啊,但结果却出人意料,在PL/sql下可得到三条记录,但在上述的dt中却只有一条语句,难道这是bug??

那如果把selectsql改一下,改成“select 1/3 from dual” ,这该没错了吧??但是,它还是报错啊,现在你也许知道它错在哪了!这么解决这个问题呢??

其实很简单,你只需要将“select 1/3 from dual”改成“select to_char(1/3)  from dual”就可以了,问题很简单,但你如果对oracleclient不是很了解,也许你就很难找出这个错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值