PROCEDIMIENTO PARA SEPARAR COLUMNAS DE LA FAMILIA LOB EN UN TABLESPACE DIFERENTE AL DE LA TABLA PROPIETARIA.

1.- CREAR DUPLICADO CON LAS MODIFICACIONES CORRECTAS
2.- INSERTAR EN DUPLICADO EL CONTENIDO DE LA TABLA ORIGINAL
3.- EXTRAER DE LA TABLA ORIGINAL LOS SCRIPTS NECESARIOS PARA LA SIGUIENTE INFORMACION
    3.1.- CREACION DE INDICES.
    3.2.- CREACION DE SINONIMOS.
    3.3.- CREACION DE CONSTRAINTS.
    3.4.- CREACION DE GRANTS.
    3.5.- CREACION DE FK DE OTRAS TABLAS QUE HACEN REFERENCIA A LAS RESTRICCIONES UNICAS O PK DE LA TABLA ORIGINAL.
4.- BORRAR TABLA ORIGINAL.
5.- RENOMBRAR LA TABLA DUPLICADA COMO LA TABLA ORIGINAL
6.- CREAR LOS SIGUIENTES OBJETOS:
    6.1.- CREAR DE INDICES.
    6.2.- CREAR DE SINONIMOS.
    6.3.- CREAR DE CONSTRAINTS.
    6.4.- CREAR DE GRANTS.
    6.5.- CREAR DE FK DE OTRAS TABLAS QUE HACEN REFERENCIA A LAS RESTRICCIONES UNICAS O PK DE LA TABLA ORIGINAL.
    

----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
PROCEDIMIENTO QUE GENERA LAS DDL NECESARIAS EN LOS PASOS 3.5 Y 6.5
EL UNICO PARAMETRO DE ENTRADA ES :PK. 
SE CREARAN TODAS LAS RESTRICCIONES DEPENDIENTES DE LA PK DADA
----------------------------------------------------------------------------------

DECLARE
CURSOR CMAESTRO IS
SELECT * FROM DBA_CONSTRAINTS
WHERE R_CONSTRAINT_NAME IN (:PK);

CURSOR CDETALLE(P_CONSTRAINT VARCHAR2) IS
SELECT * FROM DBA_CONS_COLUMNS
WHERE CONSTRAINT_NAME = P_CONSTRAINT;

V_SQL VARCHAR2(1000);
BEGIN
    FOR RMAESTRO IN CMAESTRO LOOP
        V_SQL := 'ALTER TABLE ' || RMAESTRO.OWNER || '.' || RMAESTRO.TABLE_NAME || ' ADD CONSTRAINT ' || RMAESTRO.CONSTRAINT_NAME || ' FOREIGN KEY(';   
        
        FOR RDETALLE IN CDETALLE(RMAESTRO.CONSTRAINT_NAME) LOOP
            V_SQL := V_SQL || RDETALLE.COLUMN_NAME || ',';
        END LOOP;
        
        V_SQL := SUBSTR(V_SQL,1,LENGTH(V_SQL)-1);
        
        V_SQL := V_SQL || ') REFERENCES ';
        
        FOR RDETALLE IN CDETALLE(RMAESTRO.R_CONSTRAINT_NAME) LOOP
            IF CDETALLE%ROWCOUNT = 1 THEN
               V_SQL := V_SQL || RDETALLE.OWNER || '.' || RDETALLE.TABLE_NAME || '(';
            END IF;
            
            V_SQL := V_SQL || RDETALLE.COLUMN_NAME || ',';
        END LOOP;
        
        V_SQL := SUBSTR(V_SQL,1,LENGTH(V_SQL)-1);
        
        V_SQL := V_SQL || ');';
    
       DBMS_OUTPUT.PUT_LINE(V_SQL);
    END LOOP;
    
END;   
    