与C和JAVA体系类似,Oracle中存在一些保留词(Reserved Words)或关键词(Keywords)以及少量的命名空间(Namespace)。
保留词(Reserved Words)是优先级最高的词汇,在Oracle中这些词都有着特殊的意义。所以这些词不允许被重定义 (redefine),换而言之就不是不允许用作对象的名字。以下为Oracle 10g中保留词的列表:
| Oracle Reserved Words | |||
|---|---|---|---|
| ACCESS | ELSE | MODIFY | START |
| ADD | EXCLUSIVE | NOAUDIT | SELECT |
| ALL | EXISTS | NOCOMPRESS | SESSION |
| ALTER | FILE | NOT | SET |
| AND | FLOAT | NOTFOUND | SHARE |
| ANY | FOR | NOWAIT | SIZE |
| ARRAYLEN | FROM | NULL | SMALLINT |
| AS | GRANT | NUMBER | SQLBUF |
| ASC | GROUP | OF | SUCCESSFUL |
| AUDIT | HAVING | OFFLINE | SYNONYM |
| BETWEEN | IDENTIFIED | ON | SYSDATE |
| BY | IMMEDIATE | ONLINE | TABLE |
| CHAR | IN | OPTION | THEN |
| CHECK | INCREMENT | OR | TO |
| CLUSTER | INDEX | ORDER | TRIGGER |
| COLUMN | INITIAL | PCTFREE | UID |
| COMMENT | INSERT | PRIOR | UNION |
| COMPRESS | INTEGER | PRIVILEGES | UNIQUE |
| CONNECT | INTERSECT | PUBLIC | UPDATE |
| CREATE | INTO | RAW | USER |
| CURRENT | IS | RENAME | VALIDATE |
| DATE | LEVEL | RESOURCE | VALUES |
| DECIMAL | LIKE | REVOKE | VARCHAR |
| DEFAULT | LOCK | ROW | VARCHAR2 |
| DELETE | LONG | ROWID | VIEW |
| DESC | MAXEXTENTS | ROWLABEL | WHENEVER |
| DISTINCT | MINUS | ROWNUM | WHERE |
| DROP | MODE | ROWS | WITH |
注意虽然我们不能直接将保留词用于对象名,但还是可以通过特殊手段来完成这种不推荐的定义目的,如:
如上表所列START为一个保留词
SQL> CREATE TABLE START (T1 INT);
CREATE TABLE START (T1 INT)
ORA-00903: invalid table name
利用双引号可以成功将保留词用作对象名,但是在管理时会很麻烦,极力不推荐!
SQL> CREATE TABLE "START" (T1 INT);
Table created
SQL> SELECT * FROM START;
SELECT * FROM START
ORA-00903: invalid table name
SQL> SELECT * FROM "START";
T1
---------------------------------------
SQL> SELECT * FROM "start";
SELECT * FROM "start"
ORA-00942: table or view does not exist
SQL> select object_name from dba_objects where object_name='START';
OBJECT_NAME
--------------------------------------------------------------------------------
START
SQL> DROP TABLE "start";
DROP TABLE "start"
ORA-00942: table or view does not exist
SQL> DROP TABLE "START";
Table dropped
关键词同样是在Oracle中具有特殊意义的词汇,但是其可以用作重定义(redefine)。Oracle文档介绍这些关键词可能在今后的版本中变成保留词。以下为Oracle 10g中关键词的列表:
| Oracle Keywords | |||
|---|---|---|---|
| ADMIN | CURSOR | FOUND | MOUNT |
| AFTER | CYCLE | FUNCTION | NEXT |
| ALLOCATE | DATABASE | GO | NEW |
| ANALYZE | DATAFILE | GOTO | NOARCHIVELOG |
| ARCHIVE | DBA | GROUPS | NOCACHE |
| ARCHIVELOG | DEC | INCLUDING | NOCYCLE |
| AUTHORIZATION | DECLARE | INDICATOR | NOMAXVALUE |
| AVG | DISABLE | INITRANS | NOMINVALUE |
| BACKUP | DISMOUNT | INSTANCE | NONE |
| BEGIN | DOUBLE | INT | NOORDER |
| BECOME | DUMP | KEY | NORESETLOGS |
| BEFORE | EACH | LANGUAGE | NORMAL |
| BLOCK | ENABLE | LAYER | NOSORT |
| BODY | END | LINK | NUMERIC |
| CACHE | ESCAPE | LISTS | OFF |
| CANCEL | EVENTS | LOGFILE | OLD |
| CASCADE | EXCEPT | MANAGE | ONLY |
| CHANGE | EXCEPTIONS | MANUAL | OPEN |
| CHARACTER | EXEC | MAX | OPTIMAL |
| CHECKPOINT | EXPLAIN | MAXDATAFILES | OWN |
| CLOSE | EXECUTE | MAXINSTANCES | PACKAGE |
| COBOL | EXTENT | MAXLOGFILES | PARALLEL |
| COMMIT | EXTERNALLY | MAXLOGHISTORY | PCTINCREASE |
| COMPILE | FETCH | MAXLOGMEMBERS | PCTUSED |
| CONSTRAINT | FLUSH | MAXTRANS | PLAN |
| CONSTRAINTS | FREELIST | MAXVALUE | PLI |
| CONTENTS | FREELISTS | MIN | PRECISION |
| CONTINUE | FORCE | MINEXTENTS | PRIMARY |
| CONTROLFILE | FOREIGN | MINVALUE | PRIVATE |
| COUNT | FORTRAN | MODULE | PROCEDURE |
| PROFILE | SAVEPOINT | SQLSTATE | TRACING |
| QUOTA | SCHEMA | STATEMENT_ID | TRANSACTION |
| READ | SCN | STATISTICS | TRIGGERS |
| REAL | SECTION | STOP | TRUNCATE |
| RECOVER | SEGMENT | STORAGE | UNDER |
| REFERENCES | SEQUENCE | SUM | UNLIMITED |
| REFERENCING | SHARED | SWITCH | UNTIL |
| RESETLOGS | SNAPSHOT | SYSTEM | USE |
| RESTRICTED | SOME | TABLES | USING |
| REUSE | SORT | TABLESPACE | WHEN |
| ROLE | SQL | TEMPORARY | WRITE |
| ROLES | SQLCODE | THREAD | WORK |
| ROLLBACK | SQLERROR | TIME | |
Pl/SQL中还有部分的保留词(PL/SQL Reserved Words),在嵌入SQL语句需要对这些词汇特殊处理。
| PL/SQL Reserved Words | |||
|---|---|---|---|
| ABORT | BETWEEN | CRASH | DIGITS |
| ACCEPT | BINARY_INTEGER | CREATE | DISPOSE |
| ACCESS | BODY | CURRENT | DISTINCT |
| ADD | BOOLEAN | CURRVAL | DO |
| ALL | BY | CURSOR | DROP |
| ALTER | CASE | DATABASE | ELSE |
| AND | CHAR | DATA_BASE | ELSIF |
| ANY | CHAR_BASE | DATE | END |
| ARRAY | CHECK | DBA | ENTRY |
| ARRAYLEN | CLOSE | DEBUGOFF | EXCEPTION |
| AS | CLUSTER | DEBUGON | EXCEPTION_INIT |
| ASC | CLUSTERS | DECLARE | EXISTS |
| ASSERT | COLAUTH | DECIMAL | EXIT |
| ASSIGN | COLUMNS | DEFAULT | FALSE |
| AT | COMMIT | DEFINITION | FETCH |
| AUTHORIZATION | COMPRESS | DELAY | FLOAT |
| AVG | CONNECT | DELETE | FOR |
| BASE_TABLE | CONSTANT | DELTA | FORM |
| BEGIN | COUNT | DESC | FROM |
| FUNCTION | NEW | RELEASE | SUM |
| GENERIC | NEXTVAL | REMR | TABAUTH |
| GOTO | NOCOMPRESS | RENAME | TABLE |
| GRANT | NOT | RESOURCE | TABLES |
| GROUP | NULL | RETURN | TASK |
| HAVING | NUMBER | REVERSE | TERMINATE |
| IDENTIFIED | NUMBER_BASE | REVOKE | THEN |
| IF | OF | ROLLBACK | TO |
| IN | ON | ROWID | TRUE |
| INDEX | OPEN | ROWLABEL | TYPE |
| INDEXES | OPTION | ROWNUM | UNION |
| INDICATOR | OR | ROWTYPE | UNIQUE |
| INSERT | ORDER | RUN | UPDATE |
| INTEGER | OTHERS | SAVEPOINT | USE |
| INTERSECT | OUT | SCHEMA | VALUES |
| INTO | PACKAGE | SELECT | VARCHAR |
| IS | PARTITION | SEPARATE | VARCHAR2 |
| LEVEL | PCTFREE | SET | VARIANCE |
| LIKE | POSITIVE | SIZE | VIEW |
| LIMITED | PRAGMA | SMALLINT | VIEWS |
| LOOP | PRIOR | SPACE | WHEN |
| MAX | PRIVATE | SQL | WHERE |
| MIN | PROCEDURE | SQLCODE | WHILE |
| MINUS | PUBLIC | SQLERRM | WITH |
| MLSLABEL | RAISE | START | WORK |
| MOD | RANGE | STATEMENT | XOR |
| MODE | REAL | STDDEV | |
| NATURAL | RECORD | SUBTYPE | |
除去保留词和关键词外,Oracle内部还存在一张命名空间(namespace)的列表,这些命名空间或为OCI函数或为Oracle内部函数作为函数的起始字符,如SQL*NET透明网络服务相关函数都以”NS”为函数名的开头,Oracle不推荐使用用户函数使用这些保留的命名空间为开头,以避免潜在的冲突可能。
Oracle Reserved Namespaces
| Namespace | Library |
|---|---|
| O | OCI functions |
| S | function names from SQLLIB and system-dependent libraries |
| XA | external functions for XA applications only |
| GEN KP L NA NC ND NL NM NR NS NT NZ TTC UPI | Internal functions |
Leave a Reply