最近需要写存储过程,总结下自己曾经遇到的问题.总结是按照目前遇到的问题写的,难免有不周到的地方,还望各位看官海涵.
ORA-00979: 不是 GROUP BY 表达式:
目前遇到的原因有二:
1.出现在select语句中的字段,除非是出现在聚合函数当中,否则必须出现在group by后面
2.同时使用了group by 和order by时, order by的字段必须选自group by当中的字段
错误示范1:
select count(a), b, c from mytable where conditions group by b; --错误,因为c出现在了select当中,group by中也必须有c,a出现在聚合函数中,所以可以不出现在group by 当中错误示范2:
select count(a), b, c from mytable where conditions group by b, c order by x --错误,因为order by的字段不是选自group by的字段
出现这种情况常见在使用to_date(string, format)转换日期的时候,在转换前请确认待转换的字符串的格式,通常是你给定的format的长度比待转换的字符串短了
错误示范:
select to_date('2015-01-03 16:08:32','yyyy-mm-dd') from dual; --待转换的日期的字符串比'yyyy-mm-dd'长
select to_date('2015-01-03 16:08:32','yyyy-mm-dd hh24:mi:ss') from dual;
在Oracle中,分钟的格式代码是mi而不是mm,所以mm会被视为是月份的格式代码,正确的 时:分:秒 的format应该是 hh24:mi:ss
正确示范:
select to_char(to_date('2015-01-03 16:08:32','yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') from dual;输出: 2015-01-03 16:08:32
ORA-00984列在此处不允许:
目前遇到的原因也有二:
1.insert插入操作中字符型的两端要添加单引号
2.如果使用了游标cursor, 可能是游标的名字错了