【保留字】使用视图V$RESERVED_WORDS得到Oracle的保留字

在创建表时如果使用了Oralce的某些保留字,将会收到系统提示的“无效名”等错误,那么Oracle都有哪些保留字需要回避呢?
这个问题完全可以使用Oralce自带的V$RESERVED_WORDS视图来回答,不同的版本中这个视图中记录的内容是有差别的,以实际环境查询内容为准。

简单演示一下使用保留字创建表时报错的现象。当看到有类似“invalid ... name”等错误时,就要提高警惕了,不是你敲错了字母就是用到了某些被禁止使用的保留字。

1.保留字作为列名时
例如,我们打算使用“number”这个名字作为表的一个列名,尝试创建这个表是就会收到报错
sec@ora10g> create table t (number int);
create table t (number int)
                *
ERROR at line 1:
ORA-00904: : invalid identifier

2.保留字作为表名时
使用“number”作为表名也是一样会报错
sys@ora10g> create table number ( x int);
create table number ( x int)
             *
ERROR at line 1:
ORA-00903: invalid table name

3.查询一下还有哪些保留字不可以作为标识符(以Oracle 10gR2环境为例)
如果V$RESERVED_WORDS视图的RESERVED字段内容是“Y”表示这个保留字不可以在标识符中使用的。
sys@ora10g> select * from v$reserved_words where RESERVED = 'Y';

KEYWORD                            LENGTH R R R R D
------------------------------ ---------- - - - - -
SHARE                                   5 Y N N N N
+                                       1 Y N N N N
PCTFREE                                 7 Y N N N N
EXISTS                                  6 Y N N N N
&                                       1 Y N N N N
INSERT                                  6 Y N N N N
DROP                                    4 Y N N N N
BETWEEN                                 7 Y N N N N
FROM                                    4 Y N N N N
)                                       1 Y N N N N
DESC                                    4 Y N N N N
OPTION                                  6 Y N N N N
TO                                      2 Y N N N N
PRIOR                                   5 Y N N N N
LONG                                    4 Y N N N N
THEN                                    4 Y N N N N
DEFAULT                                 7 Y N N N N
IS                                      2 Y N N N N
,                                       1 Y N N N N
INTO                                    4 Y N N N N
HAVING                                  6 Y N N N N
MINUS                                   5 Y N N N N
INTEGER                                 7 Y N N N Y
UPDATE                                  6 Y N N N N
GRANT                                   5 Y N N N N
/                                       1 Y N N N N
ALL                                     3 Y N N N N
^                                       1 Y N N N N
ORDER                                   5 Y N N N N
EXCLUSIVE                               9 Y N N N N
FLOAT                                   5 Y N N N N
DATE                                    4 Y N N N N
ON                                      2 Y N N N N
NUMBER                                  6 Y N N N N
UNION                                   5 Y N N N N
RESOURCE                                8 Y N N N N
PUBLIC                                  6 Y N N N N
TABLE                                   5 Y N N N N
VARCHAR2                                8 Y N N N N
@                                       1 Y N N N N
ELSE                                    4 Y N N N N
VALUES                                  6 Y N N N N
.                                       1 Y N N N N
RENAME                                  6 Y N N N N
AS                                      2 Y N N N N
=                                       1 Y N N N N
ALTER                                   5 Y N N N N
INDEX                                   5 Y N N N N
FOR                                     3 Y N N N N
WHERE                                   5 Y N N N N
CHECK                                   5 Y N N N N
SMALLINT                                8 Y N N N Y
WITH                                    4 Y N N N N
DELETE                                  6 Y N N N N
REVOKE                                  6 Y N N N N
(                                       1 Y N N N N
SIZE                                    4 Y N N N N
NOCOMPRESS                             10 Y N N N N
>                                       1 Y N N N N
AND                                     3 Y N N N N
|                                       1 Y N N N N
:                                       1 Y N N N N
NULL                                    4 Y N N N N
GROUP                                   5 Y N N N N
ASC                                     3 Y N N N N
IN                                      2 Y N N N N
VIEW                                    4 Y N N N N
SET                                     3 Y N N N N
COMPRESS                                8 Y N N N N
-                                       1 Y N N N N
[                                       1 Y N N N N

NOT                                     3 Y N N N N
LIKE                                    4 Y N N N N
TRIGGER                                 7 Y N N N N
SELECT                                  6 Y N N N N
CLUSTER                                 7 Y N N N N
LOCK                                    4 Y N N N N
CREATE                                  6 Y N N N N
INTERSECT                               9 Y N N N N
]                                       1 Y N N N N
DISTINCT                                8 Y N N N N
!                                       1 Y N N N N
CONNECT                                 7 Y N N N N
MODE                                    4 Y N N N N
OF                                      2 Y N N N N
RAW                                     3 Y N N N N
*                                       1 Y N N N N
UNIQUE                                  6 Y N N N N
SYNONYM                                 7 Y N N N N
VARCHAR                                 7 Y N N N N
ANY                                     3 Y N N N N
DECIMAL                                 7 Y N N N Y
IDENTIFIED                             10 Y N N N N
OR                                      2 Y N N N N
START                                   5 Y N N N N
NOWAIT                                  6 Y N N N N
BY                                      2 Y N N N N
CHAR                                    4 Y N N N Y

99 rows selected.

4.强制使用保留字的方法
如果要强制使用这些保留字,可以使用双银行将保留字括起来使用。不过如果使用了保留字,那么使用起时将非常的不便,而且极易出现混淆的问题,因此应该严格禁止这种情况的发生。
1)以上面的例子为例演示一下使用保留字成功创建表的情况
sys@ora10g> create table t ("number" int);

Table created.

sys@ora10g> create table "number" ( x int);

Table created.

sys@ora10g> desc t
 Name                      Null?    Type
 ------------------------- -------- ----------------
 number                             NUMBER(38)

2)此时必须使用带引号的形式引用这个特殊的表名,操作不便,而且容易出现错误。
sys@ora10g> desc "number"
 Name                      Null?    Type
 ------------------------- -------- ----------------
 X                                  NUMBER(38)

5.V$RESERVED_WORDS视图中的其他列的的含义请参考Oracle的官方文档
http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_2048.htm#REFRN30204

V$RESERVED_WORDS

This view gives a list of all SQL keywords. To determine whether a particular keyword is reserved in any way, check the RESERVED, RES_TYPE, RES_ATTR, and RES_SEMI columns.

ColumnDatatypeDescription
KEYWORDVARCHAR2(30)Name of the keyword
LENGTHNUMBERLength of the keyword
RESERVEDVARCHAR2(1)A value of Y means that the keyword cannot be used as an identifier. A value of N means that it is not reserved.
RES_TYPEVARCHAR2(1)A value of Y means that the keyword cannot be used as a type name. A value of N means that it is not reserved.
RES_ATTRVARCHAR2(1)A value of Y means that the keyword cannot be used as an attribute name. A value of N means that it is not reserved.
RES_SEMIVARCHAR2(1)A value of Y means that the keyword is not allowed as an identifier in certain situations, such as in DML. A value of N means that it is not reserved.
DUPLICATEVARCHAR2(1)A value of Y means that the keyword is a duplicate of another keyword. A value of N means that it is not a duplicate.


6.小结
很多问题Oracle都在内部给出了答案,很是便利。如本例中使用V$RESERVED_WORDS视图快速得到保留字的功能就是一个很好的例子。

Good luck.

secooler
09.12.03

-- The End --


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-621601/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/519536/viewspace-621601/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值