更改 Oracle 表名

6
我将尝试在Oracle中更改表名。 首先运行此脚本来声明表。
CREATE TABLE CUSTOMER
(
  C_ID NUMBER(6,0),
  C_LAST VARCHAR2(25),
  C_FIRST varchar2(25),
  C_MI char(1),
  C_DOB DATE,
  C_ADDRESS varchar2(100),
  C_CITY varchar2(35),
  C_STATE char(2),
  C_ZIP varchar2(10),
  C_DPHONE varchar2(12),
  C_EPHONE varchar2(12),
  C_USERID varchar2(20),
  C_PASSWORD VARCHAR2(30),
  CONSTRAINT CUSTOMER_PK PRIMARY KEY(C_ID)
);

CREATE TABLE ORDER_SOURCE
(
  OS_ID NUMBER(6),
  OS_DESC varchar2(255),
  CONSTRAINT ORDER_SOURCE_PK PRIMARY KEY(OS_ID)
);

CREATE TABLE ORDERS
(
  O_ID NUMBER(6),
  O_DATE DATE,
  O_METHPMT varchar2(25),
  C_ID NUMBER(6),
  OS_ID NUMBER(6),
  CONSTRAINT ORDERS_PK PRIMARY KEY(O_ID),
  CONSTRAINT ORDERS_CUSTOMER_FK FOREIGN KEY(C_ID) REFERENCES CUSTOMER(C_ID),
  CONSTRAINT ORDERS_ORDER_SOURCE_FK FOREIGN KEY(OS_ID) REFERENCES ORDER_SOURCE(OS_ID)
);

它运行正常,然后我尝试运行。
alter table ORDERS
rename to ORDER;

我遇到了这个错误:

在命令的第一行进行alter table ORDERS rename to 操作时出错。 错误报告:SQL 错误:ORA-00903: 无效的表名 00903. 00000 - "无效的表名" *原因:
*解决方法:


2
ORDER 是保留字(例如 order by),请尝试使用 rename to "ORDER"(或者 [ORDER],我记不清 Oracle 使用哪个)。 - Alex K.
3个回答

42

语法 "RENAME TABLE tab_old TO tab_new" 是不正确的。
正确的语法是: "RENAME tab_old TO tab_new"。
"TABLE"这个单词在语句中不应该出现。


9
这对我起了作用!但真希望Oracle文档没有告诉我们语法是RENAME TABLE... - Baodad
1
@Baodad,您链接的是MySQL 5.1参考手册,而不是Oracle数据库文档。 - miazo

5

在Oracle中,order是一个保留字,因此您不能将其用作表名。您可以尝试使用双引号进行转义("order"),但这不是一个好习惯。


0
RENAME TABLE table-Name TO new-Table-Name

如果有一个视图或外键引用了该表,尝试重命名它将会生成一个错误。此外,如果该表上有任何检查约束或触发器,尝试重命名它也会生成一个错误。

而在您的情况下,“ORDER”表名是保留的,请尝试更改名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接