Problema alcopiar de una bd a otra

Hola muy buenas,
estoy intentado copiar una tabla de una bd a otra, y me funciona siempre y cuando no se produzca un error en concreto "restricción única violada"
Y no se como controlarlo.
Es es la sentencia que utilizo:
copy from &1 to &2 -
insert eb1.M62E54T0 -
USING SELECT * FROM eb2.M62E54T0 WHERE NUM_EXPEDIENTE LIKE '&3%'
&1-->bd origen
&2-->bd destino
&3-->condicion de busqueda
Esta instrucción la tengo en un .sql.
He intentado añadirle un begin y una exception pero casca y no se porque.
Bueno haber si me puedes echar una mano.
Gracias por todo, un saludo

1 respuesta

Respuesta
1
Primero, siento haber tardado tanto en responder, pero por alguna razón hasta hoy no he podido entrar.
El problema que estas teniendo es que tienes alguna constraint de clave única o primaria, es decir, tienes algún campo definido como único y al intentar introducir los datos de la primera tabla en la segunda, algunos de los datos nuevos coincide con los que ya están en la tabla, por eso te da ese error.
Puedesver las restricciones que tiene la tabla de la forma:
sql> select constraint_name,search_condition from user_constraints
where table_name=segunda_tabla.
Para ver todo lo que puedes ver con la vista user_constraints puedes ejecutar:
sql> desc user_constraints;
Una vez vista la constraint, tu decides si quitarla o mantenerla.
Hola, y muchas gracias por contestar.
Quizás la explicación no es muy aclarativa, pero mi duda no era el porque se producía el error, sino saber si hay alguna forma de controlarlo.
Un saludo y gracias por todo.
Es lo que te respondo al final, pero al igual que tu creo que no me explique muy bien ;).
A ver, primero debes buscar la constraint y ver que es lo que esta haciendo (sobre todo el cmapo involucrado), ten en cuenta que si por ejemplo es una clave primaria, a lo mejor no puedes 8o no debes) quitarla.
Una vez la hayas localizado y visto la condición, preguntate si puedes quitarla o no, es decir, si puedes permitir que haya registros repetidos por ese campo en la tabla destino.
Si la puedes borrar, pues la borras:
sql> alter table table_name drop constraint constraint name.
Una vez hecho esto debería funcionar.
En caso que n puedas quitarla, deberías filtrar por el campo que tiene la constraint de forma que solo insertes en al segunda tabla los registros de la primera que no están en la segunda, como si fuera más bien un append.
La condición extra sería
and tabla_origen. Campo not in (select campo from tabla_destino).
Esto hará que tu consulta vaya un poco más lenta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas