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

来源:互联网 发布:矩阵的列空间基底 编辑:程序博客网 时间:2024/05/21 07:03

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

总的来说,是因为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不是很了解,也许你就很难找出这个错误。

原创粉丝点击