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

Rename column named TYPE, LEVEL in sqlplus

这需要在 sql 加上完成。

您好,我正在努力重命名 table 中的两列。它们被命名为 "TYPE" 和 "LEVEL".

这需要在 sql 加上无一例外地完成。

以下内容无效(在 sql 开发人员中有效):

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

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

@{file-path}

另请参阅此 link

LEVEL 是一个 Oracle 关键字,虽然没有保留。如果您想将其用作对象名称,则需要使用 双引号 带引号的标识符 来表示对象的名称引用那个对象。

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>