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;