通过V$RESERVED_WORDS查看dm关键字
以关键字LIST为例,由于LIST是关键字,所以作为列的别名时sql会报语法分析错误。
SQL> select * from V$RESERVED_WORDS where keyword='LIST';
行号 KEYWORD LENGTH RESERVED RES_SQL RES_PL RES_SCHEMA RES_VARIABLE RES_ALIAS RES_FIXED
---------- ------- ----------- -------- ------- ------ ---------- ------------ --------- ---------
1 LIST 4 Y Y Y N N N N
已用时间: 0.762(毫秒). 执行号:1401.
SQL> select id LIST from t1;
select id LIST from t1;
select id LIST from t1;
*
第 1 行, 第 22 列[LIST]附近出现错误[-2007]:
语法分析出错.
已用时间: 0.166(毫秒). 执行号:0.
Dm屏蔽关键字有两种方法
通过指定EXCLUDE_RESERVED_WORDS参数屏蔽关键字
--设置EXCLUDE_RESERVED_WORDS值为LIST,并重启数据库使其生效
SQL> SP_SET_PARA_STRING_VALUE(2, 'EXCLUDE_RESERVED_WORDS','LIST');
DMSQL 过程已成功完成
已用时间: 8.807(毫秒). 执行号:1403.
--EXCLUDE_RESERVED_WORDS生效后再查看V$RESERVED_WORDS中已经没有LIST了,
SQL> select * from V$RESERVED_WORDS where keyword='LIST';
未选定行
--LIST关键字被屏蔽,可以作为列名使用
已用时间: 0.546(毫秒). 执行号:401.
SQL> select id LIST from t1;
行号 LIST
---------- -----------
1 1
已用时间: 2.158(毫秒). 执行号:402.
通过配置dm_svc.conf文件来屏蔽关键字
- 32 位的 DM 安装在 Win32 操作平台下,此文件位于%SystemRoot%\system32 目录;
- 64 位的 DM 安装在Win64 操作平台下,此文件位于%SystemRoot%\system32 目录;
- 32 位的 DM 安装在 Win64操作平台下,此文件位于%SystemRoot%\SysWOW64 目录;
- 在 Linux 平台下,此文件位于/etc 目录
[dmdba@DM ~]$ vi /etc/dm_svc.conf
##添加:
dm1=(192.168.3.88:5236) ##ip:port
[dm1] ##自定义服务名
KEYWORDS=(LIST) ##多个关键字以逗号隔离
[dmdba@DM ~]$ disql SYSDBA/SYSDBA@dm1 ##用服务名登录
服务器[192.168.3.88:5236]:处于普通打开状态
登录使用时间 : 1.150(ms)
disql V8
SQL> select id LIST from t1;
行号 LIST
---------- -----------
1 1
已用时间: 1.806(毫秒). 执行号:600.