Oracle - RESPALDOS ORACLE

   
Vista:
Imágen de perfil de CHRISTIAN

RESPALDOS ORACLE

Publicado por CHRISTIAN (8 intervenciones) el 19/12/2013 15:19:24
SALUDOS ...me puede alguien ayudar con este tema de oracle....
tengo dos tablas la una es enfermo y la otra respaldo enfermo...
las 2 estan con datos... pero ahora he insertado mas registros en la tabla enfermo como puedo hacer para copiarlos todos sin que se repitan los datos...
funciona correctamente si los paso de uno en uno pero son vario.. de uno en uno uso este sql:

insert into respaldoenfermo
SELECT NUMSEGSOCIAL,DIRECCION,NOMBRE,APELLIDOS,FNACIMIENTO,SEXO, SYSDATE,to_char(sysdate,'yyyy')-to_char(fnacimiento,'yyyy')
from enfermo where NUMSEGSOCIAL=280862486

Ahora como paso los demas me puede alguien ayudar...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JULIO_VAZQUEZ

RESPALDOS ORACLE

Publicado por JULIO_VAZQUEZ julio_moe@hotmail.es (3 intervenciones) el 20/12/2013 19:40:23
Hola CHRISTIAN, si aun tienes la duda, quizá esto te funcione

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
DECLARE
   nss_repetido   VARCHAR (13);
 
   CURSOR cur_1
   IS
      SELECT numsegsocial, direccion, nombre-- DATOS QUE SE INSERTARAN EN EL RESPALDO
        FROM enfermo;
BEGIN
   FOR i IN cur_1--INICIA CURSOR
   LOOP
      BEGIN --ALMACENA EL NSS DEL REGISTRO EN CURSO QUE YA EXISTA EN ENFERMO2
         SELECT DISTINCT numsegsocial
                    INTO nss_repetido
                    FROM enfermo2
                   WHERE numsegsocial = i.numsegsocial;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            nss_repetido := 0;
      END;
 
      IF i.numsegsocial <> nss_repetido THEN --SI ES DIFERENTE LO INSERTA
         INSERT INTO enfermo2 (numsegsocial, direccion, nombre)
              VALUES (i.numsegsocial, i.direccion, i.nombre);
      END IF;
   END LOOP;
END;

saludos, buen día
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RESPALDOS ORACLE

Publicado por luis pablo luis2409@gmail.com (232 intervenciones) el 24/12/2013 15:43:30
Hola Julio, muchas líneas de programación para algo tan simple, esto se hace con un insert con una sentencia select.

Saludos

Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RESPALDOS ORACLE

Publicado por luis pablo luis2409@gmail.com (232 intervenciones) el 24/12/2013 15:41:36
Hola CHRISTIAN , todo con un simple insert select :


Insert into respaldoenfermo( NUMSEGSOCIAL, DIRECCION, NOMBRE, APELLIDOS, FNACIMIENTO, SEXO, fecreg, edad )
SELECT e.NUMSEGSOCIAL,e.DIRECCION,e.NOMBRE,e.APELLIDOS,e.FNACIMIENTO,e.SEXO, SYSDATE,to_char(sysdate,'yyyy')-to_char(e.fnacimiento,'yyyy')
from enfermo e
where NOT EXISTS ( SELECT 1 FROM respaldoenfermo r
WHERE r.NUMSEGSOCIAL = e.NUMSEGSOCIAL);


Recomendación, en todo insert colocar siempre los campos destino, pues con el tiempo una tabla puede ser modificada en la cantidad de columnas si se adicionan mas columnas tu sentencia insert fallaría y tendrías que modificar la sentencia insert.

Saludos


Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de JULIO_MOE

RESPALDOS ORACLE

Publicado por JULIO_MOE (3 intervenciones) el 24/12/2013 16:59:48
jejeje tienes razón!
Siempre le doy mucha vuelta al código, esto me servirá para optimizar.
Gracias, saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RESPALDOS ORACLE

Publicado por luis pablo (232 intervenciones) el 30/12/2013 16:53:19
Genial
Aquí en el foro todos estamos para aprender de todos.

Saludos

Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar