2015-01-05 3 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'에서'variable substitution '을 사용하여이 작업을 수행 할 수 있습니다. 내 대답을 보라. –

답변

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*Plusvariable 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> 

그래서, 지금 테이블 TT_05_01_2015 이름을 변경합니다.

관련 문제