更改Oracle表名称

时间:2012-11-08 15:57:47

标签: sql oracle11g alter-table table-rename

我正在尝试在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;

我收到此错误:

  

在命令的第1行开始出错:alter table ORDERS rename to   ORDER错误报告:SQL错误:ORA-00903:表名无效   00903. 00000 - “无效的表名”   *原因:
  *操作:

3 个答案:

答案 0 :(得分:33)

语法“RENAME TABLE tab_old TO tab_new”不正确。
正确的语法:“RENAME tab_old TO tab_new” Word“TABLE”不应出现在声明中。

答案 1 :(得分:4)

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

答案 2 :(得分:0)

RENAME TABLE table-Name TO new-Table-Name

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

在你的情况下,“ORDER”表名是RESERVED所以请尝试更改名称