注册
达梦中屏蔽关键字
培训园地/ 文章详情 /

达梦中屏蔽关键字

烤羊肉的肖恩คิดถึง 2022/12/28 3095 2 0

在创建表或者其他数据库对象的时候可能会报出"语法分析错误",这种情况可能是由于创建对象的名称使用了数据库系统所保留的关键字,针对这种情况达梦提供了两种解决方法来屏蔽关键字。
1、修改数据库dm.ini中的参数EXCLUDE_RESERVED_WORDS
2、配置客户端dm_svc.conf文件,添加KEYWORDS配置项(推荐

1.修改dm.ini

参数EXCLUDE_RESERVED_WORDS:该参数为静态参数,默认为空,值为需要去除的保留字列表,保留字之间以逗号分隔开。
确认关键字信息:

select * from v$reserved_words where keyword in ('PERCENT','ORDER');

image.png
RES_FIXED可以判断关键字是否可以EXCLUDE,Y 不可以,N 可以
如上图查询,其中PERCENT为可排除关键字,ORDER为不可排除关键字
对于RES_FIXED=Y的保留字,修改dm.ini中EXCLUDE_RESERVED_WORDS参数是无法屏蔽的,对RES_FIXED=N的保留字可以屏蔽。

2.配置dm_svc.conf文件

第二种方法在配置dm_svc_conf文件。不同安装环境配置文件存放地方不同:
32 位的 DM 安装在 Win32 操作平台下,此文件位于%SystemRoot%system32
64 位的 DM 安装在 Win64 操作平台下,此文件位于%SystemRoot%system32
32 位的 DM 安装在 Win64 操作平台下,此文件位于%SystemRoot%SysWOW64
在 Linux 平台下,此文件位于/etc 目录
通过KEYWORDS添加需要屏蔽的关键字信息,具体dm_svc.conf配置如下:

# 全局配置区
TIME_ZONE=(480)
LANGUAGE=(cn)
DB1=(192.168.15.35:5236)
[DB1] 
# 服务配置区
KEYWORDS=(PERCENT,ORDER)

通过测试可以发现对于RES_FIXED=Y的保留字,dm_svc.conf也可以进行屏蔽,但是屏蔽之后可能会导致使用上的问题。
以ORDER为例:
通过dm_svc.conf屏蔽后,使用dm_svc.conf进行连接的程序,将无法使用数据库中自带的包含单独的order单词的函数等,将会导致程序功能异常。比如order by;
注意: 通过dm_svc.conf对保留字进行屏蔽,只影响通过dm_svc.conf进行连接的应用程序,不使用dm_svc.conf不会影响。

总结

  1. 对于有使用到系统关键字保留字的所有SQL语句和对象名称,最优选是修改SQL语句和对象名称;
  2. 对于必须需要数据库进行屏蔽的关键字,建议使用dm_svc.conf文件进行屏蔽,尽量减少影响;
  3. RES_FIXED=Y的保留字是不能屏蔽的,屏蔽之后会影响使用;
  4. 如果对象名称加上双引号,即使对象名称是未屏蔽的保留字,对象也可以创建成功。但是在该对象名称上使用SQL语句时,也需要给对象名称加上双引号。
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服