1.屏蔽关键字的缘由
为了兼容国内外主流数据库,达梦系统关键字较多,应用系统数据从其他数据库迁移到达梦时可能会遇到表名,字段名等是达梦的关键字,从而导致查询报错。此时,可以选择屏蔽部分达梦的关键字。
2.屏蔽关键字的方法
达梦数据库中有下面三种方法屏蔽关键字:
- 修改数据库dm.ini中参数EXCLUDE_RESERVED_WORDS
- 配置客户端dm_svc.conf文件,添加KEYWORDS配置项
- 使用sp_set_para_string_value()修改
多个关键字用逗号隔开,修改成功之后重启数据库才能生效
本文档采用方法3屏蔽关键字
3.查看数据库是否有屏蔽关键字
--登录数据库
[dmdba@zfsyb84 ~]$ disql sysdba/SYSDBA:5235
--查看数据库是否有关键字
SELECT * FROM "V$DM_INI" WHERE PARA_NAME LIKE 'EXCLUDE_RESERVED_WORDS';
行号 PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE
---------- ---------------------- ---------- --------- --------- ------------- ------- ---------- ---------- --------------------------------- ---------
1 EXCLUDE_RESERVED_WORDS NULL NULL NULL NULL N NULL NULL The reserved words to be excluded IN FILE
已用时间: 99.015(毫秒). 执行号:3327601.PARA_VALUE为空说明没有屏蔽的关键字。
4.屏蔽关键字步骤
4.1.分别创建字段名为关键字array、list和 domain的测试表
分别创建字段名为关键字array、list和 domain的测试表,提示语法报错,如下所示:
SQL> create table toptest(array int);
create table toptest(array int);
create table toptest(array int);
*
line 1, column 21, nearby [array] has error[-2007]:
Syntax error.
used time: 144.879(ms). Execute id is 0.
SQL> create table toptest1(list int);
create table toptest1(list int);
create table toptest1(list int);
*
line 1, column 22, nearby [list] has error[-2007]:
Syntax error.
used time: 0.220(ms). Execute id is 0.
SQL> create table toptest2(domain int);
create table toptest2(domain int);
create table toptest2(domain int);
*
line 1, column 22, nearby [domain] has error[-2007]:
Syntax error.
used time: 0.311(ms). Execute id is 0.4.2.屏蔽关键字
sp_set_para_string_value(2,'EXCLUDE_RESERVED_WORDS','list,array,domain');4.3.重启数据库
[root@zfsyb84 /]# systemctl restart DmServiceECPS.service4.4.查看数据库是否有屏蔽关键字
--登录数据库
[dmdba@zfsyb84 ~]$ disql sysdba/SYSDBA:5235
--查看数据库是否有关键字
SELECT * FROM "V$DM_INI" WHERE PARA_NAME LIKE 'EXCLUDE_RESERVED_WORDS';
行号 PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE
---------- ---------------------- ---------- --------- --------- ------------- ------- ---------- ---------- --------------------------------- ---------
1 EXCLUDE_RESERVED_WORDS list,array,domain NULL NULL NULL N NULL NULL The reserved words to be excluded IN FILE
已用时间: 99.015(毫秒). 执行号:3327601.4.5.再次分别创建字段名为关键字array、list和 domain的测试表
再次分别创建字段名为关键字array、list和 domain的测试表,则创建成功。
SQL> create table toptest(array int);
executed successfully
used time: 676.390(ms). Execute id is 601.
SQL> create table toptest1(list int);
executed successfully
used time: 8.021(ms). Execute id is 602.
SQL> create table toptest2(domain int);
executed successfully
used time: 8.808(ms). Execute id is 603.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




