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

來源:互聯網
上載者:User

今天因為這個問題糾結了很久,其實這已不是第一次犯這樣的錯誤了,今天特別記錄下來,以防再犯。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.