【问题标题】:Oracle Weird error : Unexpected error ORA-00937: not a single-group group functionOracle 奇怪的错误:意外错误 ORA-00937:不是单组组函数
【发布时间】:2010-12-08 09:59:17
【问题描述】:

Oracle 奇怪错误:意外错误 ORA-00937:不是单组组函数

从 VB6 应用程序执行,使用 Adodb,使用 Provider=MSDAORA.1

查询:

Select Max(SNO) as SRNO 
  From Orders 
 Where OrderDate = '30-Jan-2009' 

错误:

意外错误 ORA-00937:不是单组组函数

据我所知,仅当查询包含聚合函数时才应触发此错误,而选定的列不在聚合函数中,那么这些列必须在 Group By 子句中。

现在在我的查询中,没有选择额外的列。

更奇怪的:

如果在 oracle SQL Plus 中执行相同的查询,它会起作用。但如果从 VB6 执行,则会出现上述错误。任何提示

我使用 rownum 和内部查询解决了 MAX 问题。

select SRNO  
  from (Select SNO as SRNO 
          From Orders 
         Where OrderDate = '08/Dec/2009'  
      order by SNO  desc ) 
 where RowNum = 1 

【问题讨论】:

  • 额外提示,完全不相关,但很重要:在与日期列进行比较时使用日期。所以最好使用date '2009-01-30'to_date('30-Jan-2009','dd-Mon-yyyy','nls_date_language=american'),而不是'30-Jan-2009'

标签: sql oracle ora-00937


【解决方案1】:

如果您将CURSOR_SHARING 设置为FORCESIMILAR,则可能是错误1988231,这是Microsoft 驱动程序和数据库最高版本为10.2.0.4 的问题。建议似乎是将CURSOR_SHARING 设置为EXACT(我认为是默认值),或者改用Oracle ODBC 驱动程序。

(错误本身已作为非错误关闭(因为它是 Microsoft 问题而不是 Oracle 问题),并且引用自 Metalink 文档 ID 462734.1)。

【讨论】:

  • 感谢您提供这个角落案例。在一段时间内,我将无法在客户端位置进行相同的测试,并且他们已开始处理待处理的作业。我已经提出了。一旦测试,我将标记为接受。
【解决方案2】:

它看起来像 ADO 提供程序中的一个错误,如果您将提供程序更改为 OraOLEDB.Oracle - 查询应该可以工作

【讨论】:

  • 这是 VB6。它没有 OraOLEDB.Oracle
  • "using Adodb using Provider=MSDAORA.1" -> 更改Provider=OraOLEDB.Oracle.1(你可以用oracle客户端安装)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 2011-08-01
  • 1970-01-01
相关资源
最近更新 更多