首先我们要知道哪些是达梦的关键字? 避免在数据库对象设计时使用
V$RESERVED_WORDS视图中RESERVED=Y的关键字为系统保留字,无法直接在SQL语句中使用。
RES_FIXED=Y的保留字是不能屏蔽的,屏蔽会影响使用。
select * from V$RESERVED_WORDS where RESERVED='Y' and KEYWORD='TOP';
如果非要使用这些关键字,方法有以下四种:
以下以有使用关键字percent和top为例
1.写sql 时通过双引号引起来
select "percent","top" from tt;
注意:如果需要屏蔽的关键字属于SQL中的常用子句的关键字,不建议使用除添加双引号外的其他方式进行屏蔽。
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');
重启数据库服务生效
5. 关键字导致的问题举例
1)设置屏蔽 DM 关键字方式不正确导致 DM 自增出问题
问题:IDENTITY关键字屏蔽后无法使用自增列
具体描述:修改数据库dm.ini中参数EXCLUDE_RESERVED_WORDS、配置客户端dm_svc.conf文件,添加KEYWORDS配置项
这两种屏蔽关键字的方法都会使自增列无法使用
**正确的处理方式:**这种情况不建议使用除添加双引号外的其他方式进行屏蔽。