Seleccionar datos de una DB e insertarlos a otra DB

Estoy tratando de hacer lo siguiente:
Tengo una Base de Datos en MYSQL 5 y otra en ORACLE 10G.
Lo que quiere es seleccionar datos de una tabla de la base de datos en MYSQL y luego insertarlos en una tabla de la base de datos en ORACLE, solo algunos registros que cumplen alguna condición. Me dijeron que si es posible hacerlo. Podrías enviarme algún ejemplo.

2 respuestas

Respuesta
1
Lo que tienes que hacer es dos conexiones, una para MYSQL y el otro para ORACLE.
Creas tu conexión por medio del profile, luego colocas el script de ambas conexiones en tu aplicación, por ejm:
//CONEXION MYSQL
SQLCA.Database = "MYSQL"
....
//CONEXION ORACLE
SQLCA.Database = "ORACLE"
....
Luego creas dos variables de tipo transacción
Transaction conectaMYSQL,conectaORACLE
una vez creado estas variables los reemplazas en tus conexiones, deberian quedar así:
//CONEXION MYSQL
conectaMYSQL.Database = "MYSQL"
....
//CONEXION ORACLE
conectaORACLE.Database = "ORACLE"
...
Ahora recuperas datos de MYSQL
SELECT campo1,campo2,...
INTO :variable1,:variable2,...
FROM nomb_tabla
WHERE condicion
USING conectaMYSQL;
Despues lo insertas en ORACLE
INSERT INTO tabla(campo1,campo2,...)
VALUES(:variable1,:variable2,...)
USING conectaORACLE;
Eso es todo.
Respuesta
1
Podes hacerlo creando una conexión nueva a la bd de oracle.
1. Recuperas losa datos en una dw (dw1)
2. Te conectas a oracle con otra transacción:
2.1 transaction oratrans
oratrans = create transaction
oratrans.dbms = ...
etc.
dw2.settransaction(oratrans)
3. hace un rows copy a otra dw (dw2)
dw_1.RowsCopy(1, dw_1.RowCount(), Primary!, dw_2, 1, Primary!)
4. actualiza y chequea error
if dw2.update() = 1 then
commit using oratrans;
else
rollback using oratrans;
end if
He trabajado con datawindows y resulta que se cuelga la maquina al tratar de recuperar más de 100000 registros. ¿Cómo seria con lenguaje SQL?
declare xxx cursor for
select campo from tabla where criterio
using sqlca;
open xxx;
do while sqlca.sqlcode = 0
fetch xxx into: cccc;
insert into tabla2 set ... USING oratrans;
loop
Un par de consideraciones:
Debido a la cantidad de registros tal vez debas pensar algún esquema de commits intermedios (cada por registros).
También podes investigar el tema de los PIPELINE que son objetos para el envío de datos entre bases.
Aldob

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas