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不是很瞭解,也許你就很難找出這個錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章