2016-07-18 2 views
0

Эксперты. У меня есть следующий код для создания месячного раздела в поле VARCHAR.Создание месячного раздела на поле varchar

SELECT COUNT(*) INTO FCNT FROM USER_TABLES WHERE TABLE_NAME = 'WORK_RECON_T'; 

    IF (FCNT = 1) THEN 
     DBMS_OUTPUT.PUT_LINE('DROPPING TABLE WORK_RECON_T'); 
     EXECUTE IMMEDIATE 'DROP TABLE WORK_RECON_T'; 
     DBMS_OUTPUT.PUT_LINE('DROPPED TABLE WORK_RECON_T'); 
    END IF; 

    EXECUTE IMMEDIATE 'CREATE TABLE WORK_RECON_T (
      ANI VARCHAR (255), 
      COMPANYID VARCHAR (255), 
      DIVISION VARCHAR (255), 
      TIMESTAMP TIMESTAMP, 
      OMCPROCESSTIME VARCHAR (255), 
vRange number GENERATED ALWAYS AS 
     (to_number(OMCPROCESSTIME))) 
partition by range(vRange) 
INTERVAL(100) 
(partition empty values less than (20160101))'; 

Данные OMCPROCESSTIME выглядит следующим образом 20160718094020. Я не смог создать раздел с этой командой. Не могли бы вы бросить какой-то свет, если это правильный способ?

ответ

1

Пожалуйста, попробуйте указанные ниже.

declare 

v_sql varchar2(2000); 

begin 

IF (FCNT = 1) THEN 
    DBMS_OUTPUT.PUT_LINE('DROPPING TABLE WORK_RECON_T'); 
    EXECUTE IMMEDIATE 'DROP TABLE WORK_RECON_T'; 
    DBMS_OUTPUT.PUT_LINE('DROPPED TABLE WORK_RECON_T'); 
END IF; 

v_sql:='CREATE TABLE WORK_RECON_T (
      ANI VARCHAR (255), 
      COMPANYID VARCHAR (255), 
      DIVISION VARCHAR (255), 
      TIMESTAMP TIMESTAMP, 
      OMCPROCESSTIME VARCHAR (255), 
      vRange number GENERATED ALWAYS AS (to_number(OMCPROCESSTIME))) 
partition by range(vRange) 
INTERVAL(100) 
(partition empty values less than (20160101))'; 

execute immediate v_sql; 

end;