暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

达梦数据库设置屏蔽关键字

原创 董小姐 2024-06-18
528

1.屏蔽关键字的缘由

为了兼容国内外主流数据库,达梦系统关键字较多,应用系统数据从其他数据库迁移到达梦时可能会遇到表名,字段名等是达梦的关键字,从而导致查询报错。此时,可以选择屏蔽部分达梦的关键字。

2.屏蔽关键字的方法

达梦数据库中有下面三种方法屏蔽关键字:

  1. 修改数据库dm.ini中参数EXCLUDE_RESERVED_WORDS
  2. 配置客户端dm_svc.conf文件,添加KEYWORDS配置项
  3. 使用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.service

4.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.


参考链接:https://www.cnblogs.com/fangzpa/p/15320695.html#:~:text=%E8%BE%BE%E6%A2%A6%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%AD%E6%9C%89%E4%B8%8B%E9%9D%A2%E4%B8%89%E7%A7%8D%E6%96%B9%E6%B3%95%E5%B1%8F%E8%94%BD%E5%85%B3%E9%94%AE%E5%AD%97%EF%BC%9A%20%E4%BF%AE%E6%94%B9%E6%95%B0%E6%8D%AE%E5%BA%93dm.ini%E4%B8%AD%E5%8F%82%E6%95%B0EXCLUDE_RESERVED_WORDS,%E9%85%8D%E7%BD%AE%E5%AE%A2%E6%88%B7%E7%AB%AFdm_svc.conf%E6%96%87%E4%BB%B6%EF%BC%8C%E6%B7%BB%E5%8A%A0KEYWORDS%E9%85%8D%E7%BD%AE%E9%A1%B9%20%E4%BD%BF%E7%94%A8sp_set_para_string_value%EF%BC%88%EF%BC%89%E4%BF%AE%E6%94%B9%20%E5%A4%9A%E4%B8%AA%E5%85%B3%E9%94%AE%E5%AD%97%E7%94%A8%E9%80%97%E5%8F%B7%E9%9A%94%E5%BC%80%EF%BC%8C%E4%BF%AE%E6%94%B9%E6%88%90%E5%8A%9F%E4%B9%8B%E5%90%8E%E9%87%8D%E5%90%AF%E6%95%B0%E6%8D%AE%E5%BA%93%E6%89%8D%E8%83%BD%E7%94%9F%E6%95%88

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论