DM8 SQL语句中包含保留词时该如何处理

项目场景:

今天,在给某集成商做SQL优化时,无意中发现无法创建索引,创建索引时报错如下


问题描述

今天,在给某集成商做SQL优化时,无意中发现无法创建索引,创建索引时报错如下

在audit字段上创建索引报错,语法分析错误:

 

 

原因分析:

在对语法进行了分析,错误代码为-2007,并未发现该创建索引的语句有错误

create index IDX_CMSARTIE_I_A ON CMSARTIE (id,audit) ;


解决方案:

经查,audit为达梦数据库中保留关键词,此次解决的办法在audit字段上加上双引号。

create index idx_cmsartie_i_a on cmsartil(id,"audit")

达梦的关键字/保留字可以在《DM SQL语言使用手册》附录 1 中查询,手册位于数据库安装路径 /dmdbms/doc 文件夹。

下面是处理表语句和关键字或者保留字冲突的方法:

双引号法

这个一般可以用来处理建表语句中的保留字冲突,如表名或者字段名是 DM 的保留字。这种方法一般可以快速地绕过问题,但是对于大小写敏感的库,这种用双引号的方法会固定死字段大小写,对于小写的字段,可能会带来无效的表名或者列名的问题。

dm.ini 中的参数设置

在 dm.ini 中有个参数 EXCLUDE_RESERVED_WORDS,这个参数可以用来屏蔽你想要屏蔽的保留字,将需要屏蔽的保留字写在 = 号后面,然后以逗号分隔。设置在 dm.ini 中的好处就是一旦设置,永久生效而且对所有客户端都有效,这样就不需要在所有客户端系统中进行专门配置。但是设置在 dm.ini 中之后,这个保留字就永久性失效了,哪怕你想通过 Manager 客户端工具在本地连接也没用了。而且该方式还存在一个隐患就是由于屏蔽掉了一些系统的保留字,所以可能会导致系统的一些功能无法正常使用。

不建议用这个参数,会有严重的副作用,并且比较隐蔽;在不改表的字段的情况下,最好的方案是改名字,次之给对象名加双引号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值