在sqlplus中重命名名为TYPE,LEVEL的列

时间:2015-05-26 11:35:43

标签: sql oracle11g sqlplus

这需要在sql plus中完成。

嗨,我正在努力重命名表中的两列。他们被命名为" TYPE"和" LEVEL"。

这需要在sql plus中完成,没有例外。

以下不起作用(在sql developer tho中工作):

alter table client rename column level to clevel;
alter table client rename column "level" to clevel;

2 个答案:

答案 0 :(得分:2)

LEVEL 是Oracle 关键字,但不是保留。如果要将其用作对象名称,则只要引用该对象,就需要使用双引号来表示带有带引号的标识符的对象的名称。< / p>

SQL> SELECT keyword, reserved FROM V$RESERVED_WORDS WHERE keyword='LEVEL';

KEYWORD                        R
------------------------------ -
LEVEL                          N

SQL>

如果您使用关键字LEVEL作为非引用标识符,这就是原因,它会引发错误:

SQL> CREATE TABLE t(level NUMBER);
CREATE TABLE t(level NUMBER)
               *
ERROR at line 1:
ORA-00904: : invalid identifier

现在,根据Database Object Names and Qualifiers的文档,如果使用双引号创建对象,它将变为区分大小写,并且必须始终以相同的方式使用对象被引用的位置

例如,

SQL> CREATE TABLE t1("level" NUMBER);

Table created.

SQL>
SQL> ALTER TABLE t1 RENAME COLUMN "level" to clevel;

Table altered.

SQL>
SQL> CREATE TABLE t2("LEVEL" NUMBER);

Table created.

SQL>
SQL> ALTER TABLE t2 RENAME COLUMN "LEVEL" to clevel;

Table altered.

SQL>

最好不要使用关键字,并给出正确的命名约定。

SQL> CREATE TABLE t(clevel NUMBER);

Table created.

SQL>

答案 1 :(得分:0)

您还可以在sqlplus中执行sql脚本。只需将语句保存在文件中,然后使用以下命令:

@{file-path}

另见link