2015-01-05 23 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