为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【问题描述】*:
同样的 sql 语句在两台机器上的达梦上,运行结果不同。请问能否通过某些设置方式统一呢?
select ID, APPID, LoginAccount from t_accountonlineinfo
已经排查出 LoginAccount 为保留字段。
在第一台机器上,必须加 “” 才行运行。
在另一台机器上,不用加 “” 也可以运行。
第一台机器配置
DM Database Server x64 V8
数据库版本小号 --03134283968-20230103-178822-20033
第二台机器配置
DM Database Server x64 V8
数据库版本小号 --03134283914-20220927-170566-20009 Pack3
DM数据库中有4种屏蔽关键字的方式,你可以参考下:
首先我们要知道哪些是达梦的关键字?避免在数据库对象设计时使用- V$RESERVED_WORDS视图中RES_ERVED=Y的关键字为系统保留字,无法直接在SQL语句中使用。
如果非要使用这些关键字,方法有以下四种:
以下以有使用关键字percent和top为例
1.写sql 时通过双引号引起来 select “percent”,“top”from tt; 2.客户端连接字符串url中屏蔽掉 url连接字符串添加 keywords=(屏蔽的关键字, 屏蔽的关键字) jdbc:dm://192.168.80.133:5236/DAMENG?keywords=(percent, top) 3.客户端连接配置文件中屏蔽掉 修改/etc/dm_svc.conf文件,在全局部分或者局部服务名后面添加【多个需屏蔽的关键字之间用逗号隔开】,全局优先级高于局部的keywords= percent,top范例: DM1=(192.168.80.133:5237) TIME_ZONE=(480) LANGUAGE=(cn) KEYWORDS=(percent,top) #全局 [DM1] TIME_ZONE=(480) LANGUAGE=(cn) KEYWORDS=(percent,top) #局部 重启应用生效 4.数据库服务端屏蔽掉(不推荐) 不建议这样处理,可能引起其它异常 方式1:直接修改dm.ini 配置文件中的EXCLUDE_RESERVED_WORDS参数 注意:多个需屏蔽的关键字之间用逗号隔开 EXCLUDE_RESERVED_WORDS=屏蔽的关键字, 屏蔽的关键字 方式2:disql进入数据库实例,执行以下命令: sp_set_para_string_value(2,‘EXCLUDE_RESERVED_WORDS’,‘percent,top’); 重启数据库服务生效