2016-07-18 9 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; 
関連する問題