2012-11-08 58 views
4

我想在oracle中更改表名。 我第一次運行該腳本申報表更改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; 

我得到這個錯誤:

Error starting at line 1 in command: alter table ORDERS rename to ORDER Error report: SQL Error: ORA-00903: invalid table name 00903. 00000 - "invalid table name" *Cause:
*Action:

+2

'ORDER'被保留(如'爲了by')嘗試'重命名爲 「ORDER」'(或'[訂購]'我不記得使用甲骨文) –

回答

4

順序是Oracle的保留字,所以你不能用它作爲表名。您可以嘗試使用雙引號(「order」)進行轉義,但這不是一種好的做法

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

如果有是引用表的視圖或外鍵,嘗試重命名它會產生錯誤。另外,如果表上有任何檢查約束或觸發器,則嘗試重命名它也會產生錯誤。

而在你的情況下,「訂單」表名稱已保留,所以請嘗試更改名稱

32

句法「RENAME TABLE tab_old TO tab_new」是不正確的。
正確語法:「RENAME tab_old TO tab_new」。
單詞「TABLE」不應該在聲明中。

+5

這奏效了我!當然希望[Oracle文檔](http://docs.oracle.com/cd/E17952_01/refman-5.1-en/rename-table.html)沒有告訴我們語法是'RENAME TABLE ...' – Baodad

+1

@Baodad您鏈接了MySQL 5.1參考手冊,而不是Oracle數據庫文檔。 – miazo