Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Insertar si no existe

Estas en el tema de Insertar si no existe en el foro de Oracle en Foros del Web. Hola a todos, Le estoy dando vueltas a esto y no sé como diablos hacerlo. Necesito hacer un INSERT siempre y cuando no exista ya ...
  #1 (permalink)  
Antiguo 21/08/2008, 04:28
Avatar de CDj
CDj
 
Fecha de Ingreso: junio-2004
Mensajes: 61
Antigüedad: 20 años, 4 meses
Puntos: 0
Insertar si no existe

Hola a todos,

Le estoy dando vueltas a esto y no sé como diablos hacerlo.
Necesito hacer un INSERT siempre y cuando no exista ya la clave primaria. He estado lleyendo la sentencia INSERT WHEN pero no me aclaro. ¿Alguna idea, ejemplo o similar?

Muchas gracias,
Miguel.
  #2 (permalink)  
Antiguo 21/08/2008, 05:50
Avatar de CDj
CDj
 
Fecha de Ingreso: junio-2004
Mensajes: 61
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: Insertar si no existe

¿Esto es óptimo?

INSERT INTO usuario_bd (login, nombre, apellido1, apellido2, rol)
SELECT 'administrador', 'nombre_miguel', 'sanchez', 'gamez', '0'
FROM DUAL
WHERE 1 NOT IN (SELECT 1 FROM usuario_bd WHERE login = 'administrador')
  #3 (permalink)  
Antiguo 21/08/2008, 08:58
 
Fecha de Ingreso: junio-2008
Ubicación: D.F.
Mensajes: 62
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Insertar si no existe

Que Tal,


Bueno depende un poco de la versión de Oracle que tengas. Si cuentas con la vesión 9i o superior, puedes usar la sentencia merge.


MERGE INTO tabla1 a
USING tabla2 b
ON (a.id = b.id)
WHEN MATCHED THEN
UPDATE SET a.des -- SI QUIERES ACTUALIZAR
--WHERE 1 = 0 -- PERO CON UNA SENTENCIA COMO ESTA TE PUEDES SALTAR LA ACTUALIZACION
WHEN NOT MATCHED THEN
INSERT (id, des, etc)
VALUES (1,'1', ''etc');


Espero que te sea de utilidad.
  #4 (permalink)  
Antiguo 22/08/2008, 05:35
Avatar de CDj
CDj
 
Fecha de Ingreso: junio-2004
Mensajes: 61
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: Insertar si no existe

Genial!!

MERGE INTO usuario_bd
USING (SELECT 1
FROM DUAL)
ON (id_usuario = 'administrador')
WHEN MATCHED THEN
UPDATE
SET bloqueado = 'S'
WHEN NOT MATCHED THEN
INSERT (id_usuario, nombre, apellido1, apellido2, id_rol)
VALUES ('administrador', 'nombre', 'apellido1', 'apellido2', '0');

Encima va muchíiiiiiiisimo más rápido que el INSERT de toda la vida.
Mil gracias Oscar (te debo unas cañitas jejeje)

Miguel.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:20.