【问题标题】:Rename column named TYPE, LEVEL in sqlplus在 sqlplus 中重命名名为 TYPE、LEVEL 的列
【发布时间】:2015-08-08 01:25:02
【问题描述】:

这需要在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;

【问题讨论】:

  • "level""LEVEL" 不同。有关详细信息,请参阅手册:docs.oracle.com/cd/E11882_01/server.112/e41084/…,我 100% 确定最后一条语句 not 在 SQL Developer 中工作(事实上,它在任何 SQL 客户端中都不起作用,因为它是无效的 SQL - 因为手册中记录)

标签: sql oracle11g sqlplus


【解决方案1】:

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>

【讨论】:

  • 将此标记为答案,因为这是对问题的一个很好的解释,感谢 Lalit Kumar B
【解决方案2】:

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

@{file-path}

另见link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 2021-04-24
    相关资源
    最近更新 更多