- 浏览: 321494 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
dsjt:
oracle(UTF-8) 某列类型是varchar2(400 ...
varchar2和nvarchar2和char最大长度 -
grofis:
你他妈真是个大傻逼啊。。。。这个东西写出来之后你也不看了吧
unable to bind to property on class (class is not an IEventDispatcher) -
continentlu:
this.getHibernateTemplate().exe ...
Cannot get a connection, pool error Timeout waiting for idle object -
a8928959:
我按照你的这样配置的,也是这个错误,请问有什么解决方法吗
fckeditor绝对路径的配置以及源文件的修改 -
红叶2012:
好
htmlparser
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视图快速得到保留字的功能就是一个很好的例子。
在创建表时如果使用了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视图快速得到保留字的功能就是一个很好的例子。
发表评论
-
oracle 删除DBF文件
2013-08-16 11:11 2011曾经以为把所有的表清空drop掉后其文件已经删除,但实质DBF ... -
Oracle删除当前用户下的所有表、视图、序列、函数、存储过程、包
2012-07-06 15:35 849http://wuaner.iteye.com/blog/44 ... -
Oracle 系统性能变慢常规处理诊断及定位处理方法
2011-04-27 17:11 1539系统性能变慢常规处理诊断及定位处理方法 一、可能的系统现象 ... -
oracle 优化分析
2011-04-25 14:26 1028记录下来,做数据库优化和索引分析的方案 案例: 1:在分区表 ... -
dbms_stats
2011-04-19 19:49 904dbms_stats能良好地估计统计数据(尤其是针对较大的分区 ... -
Oracle Unknown host specified
2011-04-19 19:46 4872Io 异常:Unknown host specified; ... -
awr ammd用法
2011-04-19 19:44 1032Oracle10g中就推出了新的 ... -
oracle 修改SGA过大ORA-27102
2011-04-12 20:33 5135在做sql查询的时候发现 ... -
oracle数据库同步技术
2011-04-12 10:43 4904项目上有一个需求,从 ... -
ORA-01653 ora-01144
2011-04-02 20:46 1867http://blog.csdn.net/flyingstar ... -
ORA-28000: the account is locked
2010-11-14 09:38 1903我的PC上有2个数据库的,在用sysdba的时候老是会报 or ... -
oracle常用字段类型设置
2010-09-26 18:19 892name一般定义 VARCHAR2(32) 大多数不定义nv ... -
oracle自增ID实现
2010-09-26 17:58 967创建序列 create sequence SID_TB_PUB ... -
不能打开到主机的连接, 在端口 1521: 连接失败
2010-08-20 22:07 3935今天启动工程,突然提示无法连接远程Oracle。我试着te ... -
Ora-12514解决方法
2010-07-28 10:39 2856OracleOraDb10g_home1TNSListener ...
相关推荐
在Oracle中,双引号的作用是标识一个标识符(如表名、列名)为一个区分大小写的标识,并且允许使用Oracle关键字作为标识符。例如,如果我们有一个字段名叫做`UID`,而`UID`是Oracle的一个关键字,我们可以这样创建表...
mybatis中使用oracle关键字出错的解决方法 MyBatis是一种非常流行的持久层框架,它提供了大量的便捷功能,帮助开发者快速高效地开发应用程序。然而,在使用MyBatis时,可能会遇到一些问题,例如使用Oracle关键字时...
避免使用Oracle的系统关键字或者SQL的关键字,通常建议使用描述性且不常见的单词作为列名。在修改列名时,记得更新所有依赖于这个列名的代码,如存储过程、触发器、索引、视图等。 此外,为了防止将来再次出现此类...
如果在SQL语句中直接使用这些关键字作为列名,则会导致语法错误。为了解决这个问题,可以使用双引号将这些关键字括起来,如`"BEGIN"`和`"END"`。 示例代码: ```sql SELECT c.contractid, CONTRACTNO, c....
在Oracle数据库系统中,"AS"关键字用于定义别名或别名字段,但在某些特定情况下,可能会遇到使用AS关键字提示错误的问题。这个问题通常涉及到SQL语句的语法规范和数据库之间的兼容性差异。以下是对这个话题的详细...
在这个表中定义了三个字段:`INDEX`(实际上应避免使用SQL关键字作为列名,这里可能是`INDEXID`)、`ABC`和`DEF`。其中,`INDEX`字段被定义为整型(`INT`)且不可为空(`NOT NULL`),并被指定为主键(`PRIMARY KEY`),这...
注意,SQL语句中的关键字和列名是大小写不敏感的,但为了提高代码的可读性,通常建议使用标准的大小写约定,如将关键字大写,列名小写。 第1-8页指出,SQL语句的书写应注重格式,例如,关键字不应缩写,各子句通常...
在执行SQL查询时,distinct关键字用于去除结果中的重复行,select语句可以进行算术运算,同时可以使用as关键字为列名起别名。若要合并多个列,则需要使用“||”运算符,并且要添加的字符串需要用单引号括起来。对于...
保留字则是那些不能直接作为数据库对象名称(如表名、列名)的关键字,因为它们已经被系统预留,用于特定的语法结构。 MySQL的关键字分为两类:保留关键字和非保留关键字。非保留关键字可以在不加引号的情况下用作...
1. **提高可读性**:大写关键字可以使代码更加醒目,帮助开发者快速区分关键字与表名、列名或变量名。在长的SQL查询中,这种视觉区别尤为明显。 2. **统一风格**:许多数据库管理系统(DBMS)和开发工具默认以大写...
- SELECT语句中的GROUP BY子句,在Oracle中需要指定列名,而不是列的位置。 - DISTINCT关键字在Oracle中与LIMIT功能类似,可以结合ROWNUM来限制返回的行数。 - WHERE子句中的条件判断,Oracle通常使用代替,并且...
- 约束定义:Oracle使用`CONSTRAINT`关键字定义约束,而MySQL可以直接在列定义中指定。 - 表空间:Oracle支持表空间概念,用于存储数据文件,而在MySQL中没有这样的概念。 - 创建语句的语法结构:两者在创建表的...
7. 连接操作:SQL Server使用 `JOIN ON`,Oracle也支持这种写法,但更常见的Oracle风格是 `USING` 关键字。 8. 事务处理:SQL Server使用 `BEGIN TRANSACTION`,`COMMIT` 和 `ROLLBACK`,Oracle也有对应的 `BEGIN`...
命名规则还要求避免使用 Oracle 的保留字和关键字。各表之间相关列名尽量同名,且命名只能使用英文字母、数字和下划线。 二、表名规则 表名规则要求使用英文单词或词组作为表名,不得使用汉语拼音。表名规则还要求...
如果需要更改字段名,则可以使用“alter table 表名称 rename column 原列名 to 新列名”的语法。 DML(Data Manipulation Language)语句是用于操作数据库中数据的语言,包括插入(insert)、更新(update)、删除...
至于`SELECT`语句,Oracle允许将结果集作为临时表使用,无需别名,并且有`DUAL`虚表用于计算不依赖于实际表的表达式。在SQL Server中,虽然不常用,但也可以实现类似功能,只是没有内置的`DUAL`表。 总的来说,...
- **别名**:可以使用`AS`关键字或直接在列名后加上别名,例如`SELECT empno AS "员工号", ename AS "姓名" FROM emp;`。 - 注意:如果别名中包含空格或关键字,则必须使用双引号括起来。 - **DISTINCT关键字**:...
- **关键字列名处理**:检查并修改Mysql中使用到的Oracle保留关键字,如`comment`、`orders`、`online`、`uid`,需要修改为非关键字形式,如添加下划线`_`。 3. **自增主键处理**: - Mysql的自动增长ID在Oracle...