应用系统数据从其他数据库迁移到达梦时可能会遇到表名、字段名等是达梦的关键字,从而导致查询报错。为了数据库兼容,可以选择屏蔽部分达梦的关键字。本文将讨论如何查看达梦关键字,以及屏蔽关键字的两种常用方法,帮助数据库管理人员更好的使用达梦数据库。
环境说明:
数据库版本:DM8;
关键词:关键字屏蔽
一、查看达梦关键字
查看视图V$RESERVED_WORD获取DM关键字
SQL> select keyword,reserved from v$reserved_words;
以关键字LIST为例,由于LIST是关键字,所以作为列的别名时sql会报语法分析错误。
SQL> select username list from dba_users;
select username list from dba_users;
select username list from dba_users;
*
第 1 行, 第 34 列[list]附近出现错误[-2007]:
语法分析出错.
查看LIST是否存在DM关键字中
SQL> select keyword,reserved from v$reserved_words where keyword='LIST';
行号 KEYWORD RESERVED
--- ------- --------
1 LIST Y
二、达梦数据库屏蔽关键字的两种方法
2.1 方法一:通过设置参数参数屏蔽关键字
设置EXCLUDE_RESERVED_WORDS参数值为要屏蔽的关键字,重启数据库实例生效。
SQL> SP_SET_PARA_STRING_VALUE(2, 'EXCLUDE_RESERVED_WORDS','LIST');
[dmdba@localhost bin]$ ./DmServicePROD restart
生效后再查看视图V$RESERVED_WORDS中已经没有LIST;
SQL> select keyword,reserved from v$reserved_words where keyword='LIST';
未选定行
此时LIST关键字被屏蔽,可以作为列别名使用。
SQL> select username list from dba_users;
行号 LIST
--- -----
1 SYSSSO
2 TEST
3 SYSDBA
4 SYS
5 SYSAUDITOR
2.2 方法二:通过配置dm_svc.conf文件来屏蔽关键字
32 位的 DM 安装在 Win32 操作平台下,此文件位于%SystemRoot%\system32 目录;
64 位的 DM 安装在Win64 操作平台下,此文件位于%SystemRoot%\system32 目录;
32 位的 DM 安装在 Win64操作平台下,此文件位于%SystemRoot%\SysWOW64 目录;
在 Linux 平台下,此文件位于/etc 目录。
以linux为例:
[dmdba@localhost ~]$ vi /etc/dm_svc.conf
添加以下内容:(其中dm为自定义服务名)
dm=(192.168.45.102:5237)
[dm]
KEYWORDS=(LIST) ##多个关键字以逗号隔离
用服务名登录达梦数据库;
[dmdba@localhost bin]$ ./disql sysdba/Dameng123@dm
查看关键字屏蔽是否生效。
SQL> select username list from dba_users;
行号 LIST
---- -----
1 SYSSSO
2 TEST
3 SYSDBA
4 SYS
5 SYSAUDITOR
欢迎访问个人博客Jackin's Blog