¿Quiero saber como puedo consultar los registros de diferentes tablas utilizando el mismo cursor?
Quisiera saber como se podría consultar los registros de diferentes tablas utilizando el mismo cursor. Es decir, creando un primer cursor sobre las tablas a las que deseo consultar sus registros, poder hacer consulta de los registros de cada una de ella. El problema es que necesito hacer una migración de unas tablas de una base de datos a otra base de datos, con la misma estructura, pero no lo quiero hacer con un insert select, si no que deseo intentar insertar los registros uno por uno de cada una de las tablas de origen. Esto debido a que requiero controlar cuales registros, por ejemplo, tienen problema de integridad de datos, o mejor dicho que tengan ids repetidos en la base de datos de destino, y poder identificarlos. Lo explico mejor con el código que tengo y escucho sugerencias:
DECLARE
CURSOR cuTableNoChange
IS
SELECT AT.TABLE_NAME, AT.OWNER, CTL.TABLEV_LEVEL FROM ALL_TABLES AT, CSE_TABLE_LEVEL CTL
WHERE AT.TABLE_NAME = CTL.TABLEV_TABLENAME
AND AT.TABLE_NAME IN (
'AB_PREMISE_TYPE','AB_SYNONYM','AB_TOKEN_SYNONYM','AB_VALID_CROSS','AB_WAY_BY_LOCATION'
)ORDER BY TABLEV_LEVEL;
.........
rTableNoChange cuTableNoChange%ROWTYPE;
.........
sbFieldsTableNew:='';
FOR rFieldTableNew IN cuFieldTableNew(rTableNoChange.TABLE_NAME) LOOP
EXIT WHEN cuFieldTableNew%NOTFOUND;
BEGIN
sbFieldsTableNew:=sbFieldsTableNew||' '||rFieldTableNew.COLUMN_NAME||',';
EXCEPTION
WHEN OTHERS THEN
ut_trace.trace('Error Creando Campos: '||sqlErrm, 1);
ROLLBACK;
END;
END LOOP;
sbFieldsTableNew:=SUBSTR(sbFieldsTableNew,0,LENGTH(sbFieldsTableNew)-1);
sbSelectTableNew:='SELECT '||sbFieldsTableNew||' FROM '||sbOwnerNew||'.'||rTableNoChange.TABLE_NAME||'@'||sbDataBaseNew;
ut_trace.trace('Campos Tabla New-> '||sbSelectTableNew, 1);
sbFieldsTableOld:='';
FOR rFieldTableOld IN cuFieldTableOld(rTableNoChange.TABLE_NAME) LOOP
EXIT WHEN cuFieldTableOld%NOTFOUND;
BEGIN
sbFieldsTableOld:=sbFieldsTableOld||' '||rFieldTableOld.COLUMN_NAME||',';
EXCEPTION
WHEN OTHERS THEN
ut_trace.trace('Error Creando Campos: '||sqlErrm, 1);
ROLLBACK;
END;
END LOOP;
sbFieldsTableOld:=SUBSTR(sbFieldsTableOld,0,LENGTH(sbFieldsTableOld)-1);
sbSelectTableOld:='SELECT '||sbFieldsTableOld||' FROM '||sbOwnerOld||'.'||rTableNoChange.TABLE_NAME||'@'||sbDataBaseOld;
ut_trace.trace('Campos Tabla Old-> '||sbSelectTableOld, 1);
sbCursorInsert:=sbSelectTableOld||' MINUS '||sbSelectTableNew;
/// y aqui va el problema... Necesito despues de esto hacer un loop con el resultado de la diferencia de la tabla nueva y la tabla vieja, extraer sus registro e insertarlos uno por uno, con el fin de controlar el comportamiento de cada registro.
Gracias a todos por su colaboración y el tiempo que me puedan brindar