注册
【积累点滴】在达梦中如何屏蔽关键字
技术分享/ 文章详情 /

【积累点滴】在达梦中如何屏蔽关键字

输入法 2024/01/10 2816 2 1

首先我们要知道哪些是达梦的关键字?避免在数据库对象设计时使用

  • V$RESERVED_WORDS视图中RESERVED=Y的关键字为系统保留字,无法直接在SQL语句中使用。
  • RES_FIXED=Y的保留字是不能屏蔽的,屏蔽会影响使用。
SQL> select * from V$RESERVED_WORDS where RESERVED='Y' and KEYWORD='TOP';

行号     KEYWORD LENGTH      RESERVED RES_SQL RES_PL RES_SCHEMA RES_VARIABLE RES_ALIAS RES_FIXED
---------- ------- ----------- -------- ------- ------ ---------- ------------ --------- ---------
1          TOP     3           Y        Y       Y      N          N            N         N

如果非要使用这些关键字,方法有以下四种:
以下以有使用关键字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) #局部

重启应用生效

5. 数据库服务端屏蔽掉(不推荐)

不建议这样处理,可能引起其它异常

方式1:直接修改dm.ini 配置文件中的EXCLUDE_RESERVED_WORDS参数
注意:多个需屏蔽的关键字之间用逗号隔开

EXCLUDE_RESERVED_WORDS=屏蔽的关键字, 屏蔽的关键字

方式2:disql进入数据库实例,执行以下命令:

sp_set_para_string_value(2,'EXCLUDE_RESERVED_WORDS','percent,top');

重启数据库服务生效

6. 关键字导致的问题举例

1)设置屏蔽 DM 关键字方式不正确导致 DM 自增出问题

问题:IDENTITY关键字屏蔽后无法使用自增列
具体描述:修改数据库dm.ini中参数EXCLUDE_RESERVED_WORDS、配置客户端dm_svc.conf文件,添加KEYWORDS配置项
这两种屏蔽关键字的方法都会使自增列无法使用
正确的处理方式:这种情况不建议使用除添加双引号外的其他方式进行屏蔽。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服