v$reserved_words中记录的都是关键字和保留字,reserved字段内容是Y表示这个保留字在标识符中使用。对于reserved为N的关键字,也可能会触发Oracle的bug,所以避免使用是最好的选择。下面来做个试验,创建时会报错,要想创建成功,需要加双引号。
要保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突,比如,最近我编写的一个ODBC 连接程序里有个表,其中就用了DESC 作为说明字段名。后果可想而知!DESC 是DESCENDING 缩写后的保留词。表里的一个SELECT *语句倒是能用,但我得到的却是一大堆毫无用处的信息。
— Daniel Jordan
SQL> select * from v$reserved_words wherekeyword='SIZE';
KEYWORD LENGTH RESERVED RES_TYPE RES_ATTR RES_SEMI DUPLICATE
-------- ---------------- -------- -------- ---------- ----------
SIZE 4 Y N N N N
SQL> createtable test(id number,size number);
create tabletest(id number,size number)
*
第 1 行出现错误:
ORA-00904: : 标识符无效
SQL> createtable test(id number,"size" number);
表已创建。
SQL> insertinto test values(1,1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select *from test;
ID size
--------------------
1 1
SQL> selectsize from test;
select size fromtest
*
第 1 行出现错误:
ORA-00936: 缺失表达式
SQL> select"size" from test;
size
----------
1