在创建表时如果使用了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 identifier2.保留字作为表名时使用“number”作为表名也是一样会报错sys@ora10g> create table number ( x int);create table number ( x int) *ERROR at line 1:ORA-00903: invalid table name3.查询一下还有哪些保留字不可以作为标识符(以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 NPCTFREE 7 Y N N N NEXISTS 6 Y N N N N& 1 Y N N N NINSERT 6 Y N N N NDROP 4 Y N N N NBETWEEN 7 Y N N N NFROM 4 Y N N N N) 1 Y N N N NDESC 4 Y N N N NOPTION 6 Y N N N NTO 2 Y N N N NPRIOR 5 Y N N N NLONG 4 Y N N N NTHEN 4 Y N N N NDEFAULT 7 Y N N N NIS 2 Y N N N N, 1 Y N N N NINTO 4 Y N N N NHAVING 6 Y N N N NMINUS 5 Y N N N NINTEGER 7 Y N N N YUPDATE 6 Y N N N NGRANT 5 Y N N N N/ 1 Y N N N NALL 3 Y N N N N^ 1 Y N N N NORDER 5 Y N N N NEXCLUSIVE 9 Y N N N NFLOAT 5 Y N N N NDATE 4 Y N N N NON 2 Y N N N NNUMBER 6 Y N N N NUNION 5 Y N N N NRESOURCE 8 Y N N N NPUBLIC 6 Y N N N NTABLE 5 Y N N N NVARCHAR2 8 Y N N N N@ 1 Y N N N NELSE 4 Y N N N NVALUES 6 Y N N N N. 1 Y N N N NRENAME 6 Y N N N NAS 2 Y N N N N= 1 Y N N N NALTER 5 Y N N N NINDEX 5 Y N N N NFOR 3 Y N N N NWHERE 5 Y N N N NCHECK 5 Y N N N NSMALLINT 8 Y N N N YWITH 4 Y N N N NDELETE 6 Y N N N NREVOKE 6 Y N N N N( 1 Y N N N NSIZE 4 Y N N N NNOCOMPRESS 10 Y N N N N> 1 Y N N N NAND 3 Y N N N N| 1 Y N N N N: 1 Y N N N NNULL 4 Y N N N NGROUP 5 Y N N N NASC 3 Y N N N NIN 2 Y N N N NVIEW 4 Y N N N NSET 3 Y N N N NCOMPRESS 8 Y N N N N- 1 Y N N N N[ 1 Y N N N N< 1 Y N N N NNOT 3 Y N N N NLIKE 4 Y N N N NTRIGGER 7 Y N N N NSELECT 6 Y N N N NCLUSTER 7 Y N N N NLOCK 4 Y N N N NCREATE 6 Y N N N NINTERSECT 9 Y N N N N] 1 Y N N N NDISTINCT 8 Y N N N N! 1 Y N N N NCONNECT 7 Y N N N NMODE 4 Y N N N NOF 2 Y N N N NRAW 3 Y N N N N* 1 Y N N N NUNIQUE 6 Y N N N NSYNONYM 7 Y N N N NVARCHAR 7 Y N N N NANY 3 Y N N N NDECIMAL 7 Y N N N YIDENTIFIED 10 Y N N N NOR 2 Y N N N NSTART 5 Y N N N NNOWAIT 6 Y N N N NBY 2 Y N N N NCHAR 4 Y N N N Y99 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_WORDSThis view gives a list of all SQL keywords. To determine whether a particular keyword is reserved in any way, check theRESERVED,RES_TYPE,RES_ATTR, andRES_SEMIcolumns.
6.小结
很多问题Oracle都在内部给出了答案,很是便利。如本例中使用V$RESERVED_WORDS视图快速得到保留字的功能就是一个很好的例子。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/751371/viewspace-718827/
,如需转载,请注明出处,否则将追究法律责任。