达梦中sql使用group by 命令报错不是GROUP BY 表达式

执行sql时报错如下:

有三种解决方法:

1.直接在查询中添加参数:/*+GROUP_OPT_FLAG(1)*/
    select /*+GROUP_OPT_FLAG(1)*/* from DMHR.CITY GROUP BY CITY_NAME;

2.修改dm.ini参数GROUP_OPT_FLAG=1,使用sysdba用户修改,该参数属于动态会话级参数,不用重启数据库。但是需要注意该参数有默认值,先查下默认值是什么,然后再+1赋值。也可以直接执行命令:

   sp_set_para_value(1,'GROUP_OPT_FLAG',1);
   select para_name,para_value from v$dm_ini where para_name='GROUP_OPT_FLAG';
 
3.配置兼容参数COMPATIBLE_MODE=4,兼容mysql,该参数属于静态参数,需要重启数据库生效。

  sp_set_para_value(1,'COMPATIBLE_MODE',4);   

  select para_name,para_value from v$dm_ini where para_name='COMPATIBLE_MODE';
 

备注:
 COMPATIBLE_MODE
 0:不兼容
 1:兼容sql92标准
 2:部分兼容oracle
 3:部分兼容sql server
 4:部分兼容mysql
 5.兼容dm6
 
 注意:
 如果修改参数COMPATIBLE_MODE 的话需要重启数据库才能生效,
不然就只调整 sp_set_para_value(1,'GROUP_OPT_FLAG',1);  就行,该参数针对新的会话生效,如果要对当前会话生效的话,可以执行以下过程,让已存在的会话也生效。
    begin
       for i in (select sess_id ssid, sess_seq sseq from v$sessions ) 
    loop
       SP_SET_PARAM_IN_SESSION(i.ssid, i.sseq,  'GROUP_OPT_FLAG', 1);
    end loop;  
    end;

达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值