Reputation: 137
Experts, I have the following code to create monthly partition on VARCHAR field.
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) )';
The data in OMCPROCESSTIME looks like this 20160718094020
. I wasn't able to create partition with this command. Could you please throw some light , if this is right way to do ?
Upvotes: 0
Views: 191
Reputation: 9886
Please try the below mentioned.
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;
Upvotes: 1