`
yr512656630
  • 浏览: 320335 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

oracle关键字作为列名

 
阅读更多
http://space.itpub.net/519536/viewspace-621601

在创建表时如果使用了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
<                                       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_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.

Column Datatype Description
KEYWORD VARCHAR2(30) Name of the keyword
LENGTH NUMBER Length of the keyword
RESERVED VARCHAR2(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_TYPE VARCHAR2(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_ATTR VARCHAR2(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_SEMI VARCHAR2(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.
DUPLICATE VARCHAR2(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视图快速得到保留字的功能就是一个很好的例子。
分享到:
评论

相关推荐

    mybatis中使用oracle关键字出错的解决方法

    mybatis中使用oracle关键字出错的解决方法 MyBatis是一种非常流行的持久层框架,它提供了大量的便捷功能,帮助开发者快速高效地开发应用程序。然而,在使用MyBatis时,可能会遇到一些问题,例如使用Oracle关键字时...

    oracle关键字作为字段名使用方法

    在Oracle中,双引号的作用是标识一个标识符(如表名、列名)为一个区分大小写的标识,并且允许使用Oracle关键字作为标识符。例如,如果我们有一个字段名叫做`UID`,而`UID`是Oracle的一个关键字,我们可以这样创建表...

    查找oracle数据库表中是否存在系统关键字的方法

    避免使用Oracle的系统关键字或者SQL的关键字,通常建议使用描述性且不常见的单词作为列名。在修改列名时,记得更新所有依赖于这个列名的代码,如存储过程、触发器、索引、视图等。 此外,为了防止将来再次出现此类...

    达梦和oracle的差异说明

    如果在SQL语句中直接使用这些关键字作为列名,则会导致语法错误。为了解决这个问题,可以使用双引号将这些关键字括起来,如`"BEGIN"`和`"END"`。 示例代码: ```sql SELECT c.contractid, CONTRACTNO, c....

    Oracle AS关键字 提示错误

    在Oracle数据库系统中,"AS"关键字用于定义别名或别名字段,但在某些特定情况下,可能会遇到使用AS关键字提示错误的问题。这个问题通常涉及到SQL语句的语法规范和数据库之间的兼容性差异。以下是对这个话题的详细...

    oracle设定自增长列

    在这个表中定义了三个字段:`INDEX`(实际上应避免使用SQL关键字作为列名,这里可能是`INDEXID`)、`ABC`和`DEF`。其中,`INDEX`字段被定义为整型(`INT`)且不可为空(`NOT NULL`),并被指定为主键(`PRIMARY KEY`),这...

    Oracle公司内部数据库培训学习资料

    注意,SQL语句中的关键字和列名是大小写不敏感的,但为了提高代码的可读性,通常建议使用标准的大小写约定,如将关键字大写,列名小写。 第1-8页指出,SQL语句的书写应注重格式,例如,关键字不应缩写,各子句通常...

    oracle数据库 笔记

    在执行SQL查询时,distinct关键字用于去除结果中的重复行,select语句可以进行算术运算,同时可以使用as关键字为列名起别名。若要合并多个列,则需要使用“||”运算符,并且要添加的字符串需要用单引号括起来。对于...

    MySQL 5.7中的关键字与保留字详解

    保留字则是那些不能直接作为数据库对象名称(如表名、列名)的关键字,因为它们已经被系统预留,用于特定的语法结构。 MySQL的关键字分为两类:保留关键字和非保留关键字。非保留关键字可以在不加引号的情况下用作...

    SQL关键字大写

    1. **提高可读性**:大写关键字可以使代码更加醒目,帮助开发者快速区分关键字与表名、列名或变量名。在长的SQL查询中,这种视觉区别尤为明显。 2. **统一风格**:许多数据库管理系统(DBMS)和开发工具默认以大写...

    Informix迁移至Oracle数据库的研究.pdf

    - SELECT语句中的GROUP BY子句,在Oracle中需要指定列名,而不是列的位置。 - DISTINCT关键字在Oracle中与LIMIT功能类似,可以结合ROWNUM来限制返回的行数。 - WHERE子句中的条件判断,Oracle通常使用代替,并且...

    Mysql的表对象Sql语句转换单表,转换成Oracle创建表sql

    - 约束定义:Oracle使用`CONSTRAINT`关键字定义约束,而MySQL可以直接在列定义中指定。 - 表空间:Oracle支持表空间概念,用于存储数据文件,而在MySQL中没有这样的概念。 - 创建语句的语法结构:两者在创建表的...

    Sql语法转换为Oracle语法

    7. 连接操作:SQL Server使用 `JOIN ON`,Oracle也支持这种写法,但更常见的Oracle风格是 `USING` 关键字。 8. 事务处理:SQL Server使用 `BEGIN TRANSACTION`,`COMMIT` 和 `ROLLBACK`,Oracle也有对应的 `BEGIN`...

    Oracle数据库开发和设计规范

    命名规则还要求避免使用 Oracle 的保留字和关键字。各表之间相关列名尽量同名,且命名只能使用英文字母、数字和下划线。 二、表名规则 表名规则要求使用英文单词或词组作为表名,不得使用汉语拼音。表名规则还要求...

    oracle数据库从入门到精通.pdf

    如果需要更改字段名,则可以使用“alter table 表名称 rename column 原列名 to 新列名”的语法。 DML(Data Manipulation Language)语句是用于操作数据库中数据的语言,包括插入(insert)、更新(update)、删除...

    SQLServer与Oracle语法差异汇总.docx

    至于`SELECT`语句,Oracle允许将结果集作为临时表使用,无需别名,并且有`DUAL`虚表用于计算不依赖于实际表的表达式。在SQL Server中,虽然不常用,但也可以实现类似功能,只是没有内置的`DUAL`表。 总的来说,...

    oracle讲义

    - **别名**:可以使用`AS`关键字或直接在列名后加上别名,例如`SELECT empno AS "员工号", ename AS "姓名" FROM emp;`。 - 注意:如果别名中包含空格或关键字,则必须使用双引号括起来。 - **DISTINCT关键字**:...

    Mysql迁移到Oracle一些需要注意的事项和方案

    - **关键字列名处理**:检查并修改Mysql中使用到的Oracle保留关键字,如`comment`、`orders`、`online`、`uid`,需要修改为非关键字形式,如添加下划线`_`。 3. **自增主键处理**: - Mysql的自动增长ID在Oracle...

Global site tag (gtag.js) - Google Analytics