2015-01-05 52 views
4

我想通過向其添加SYSDATE來更改表名稱。例如,我想將表EXAMPLE_TABLE更改爲EXAMPLE_TABLE_05_01_2015,但我想從SYSDATE獲取日期。使用sysdate更改表名稱

我準備以下,但它不工作:

ALTER TABLE "MYDB"."EXAMPLE_TABLE" rename to (SELECT 'EXAMPLE_TABLE' || TO_CHAR(SYSDATE, '_dd_MM_yyyy') FROM DUAL); 

我怎樣才能使它發揮作用?

以下是錯誤:

SQL Error: ORA-14047: ALTER TABLE|INDEX RENAME may not be combined with other operations 
14047. 00000 - "ALTER TABLE|INDEX RENAME may not be combined with other operations" 
*Cause: ALTER TABLE or ALTER INDEX statement attempted to combine 
      a RENAME operation with some other operation which is illegal 
*Action: Ensure that RENAME operation is the sole operation specified in 
      ALTER TABLE or ALTER INDEX statement; 
+0

回報你什麼錯誤? – rtome

+0

你可以在'SQL * Plus'中使用'變量替換'。看到我的答案。 –

回答

6

使用execute immediate

begin 
    execute immediate 
    'alter table mydb.example_table rename to ' || 
    'example_table_' || to_char(sysdate, 'dd_mm_yyyy'); 
end; 
/

這就是說,我有預感,你最好使用分區表。

+1

偉大的解決方案。同意第二部分,如果這是你的解決方案的一部分,你應該考慮其他選擇。 – mmmmmpie

0

SQL*Plus,你可以使用variable substitution

只是另一種方式

SQL> CREATE TABLE t(ID NUMBER) 
    2/

Table created. 

SQL> 
SQL> COLUMN new_tablename NEW_VALUE new_tablename 
SQL> SELECT 't_' || to_char(sysdate, 'dd_mm_yyyy') AS new_tablename from dual 
    2/

NEW_TABLENAM 
------------ 
t_05_01_2015 

SQL> 
SQL> RENAME t TO &new_tablename 
    2/
old 1: RENAME t TO &new_tablename 
new 1: RENAME t TO t_05_01_2015 

Table renamed. 

SQL> 
SQL> select * from t_05_01_2015; 

no rows selected 

SQL> 

所以,現在的表T改名T_05_01_2015