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

Select Insert...

Estas en el tema de Select Insert... en el foro de Oracle en Foros del Web. Hola, ¿es posible hacer esto directamente sin tener que usar un procedimiento o funcion? Tabla A --------- ID - Descripcion 1 - A 2 - ...
  #1 (permalink)  
Antiguo 21/04/2008, 12:28
Avatar de CDj
CDj
 
Fecha de Ingreso: junio-2004
Mensajes: 61
Antigüedad: 19 años, 10 meses
Puntos: 0
Select Insert...

Hola, ¿es posible hacer esto directamente sin tener que usar un procedimiento o funcion?

Tabla A
---------
ID - Descripcion
1 - A
2 - B
3 - C
4 - D
5 - E

Hacer un INSERT sobre la tabla A siempre y cuando no exista ese valor ya -normalmente pegaria una excepción-, osea...

SELECT Descripcion
CASE Descripcion
WHEN Descripcion = NULL THEN INSERT INTO a VALUES(MAX(id) + 1, ?valor)
FROM a
WHERE Descripcion = 'C';

En este caso no lo deberia insertar, ya que existe... en caso contrario sí.
¿Esto está bien? ¿alguna sugerencia?.

Muchas gracias, saludos!!
  #2 (permalink)  
Antiguo 22/04/2008, 04:52
Avatar de CDj
CDj
 
Fecha de Ingreso: junio-2004
Mensajes: 61
Antigüedad: 19 años, 10 meses
Puntos: 0
Re: Select Insert...

Creo que con...

insert into A (id, descriocion)
select '5', descripcion from A
where descripcion not exist (select descripcion from A)
and descripcion = 'D'

Insertaria 5, D ya que ese código no existe.
¿alguien opina como hacerlo más óptimo?
  #3 (permalink)  
Antiguo 22/04/2008, 05:46
 
Fecha de Ingreso: marzo-2008
Ubicación: Euskadi
Mensajes: 64
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Select Insert...

Hola CDj,

creo que lo ideal sería poner el campo descripción como UNIQUE, si realmente no quieres que nunca se repitan, de manera que al hacer la insert de manera habitual captures la excepción y decidas por código qué hacer.

Si se trata de un caso particular o quieres hacerlo con un script sin bloques PL-SQL, entonces puedes hacerlo de la siguiente manera:
Código:
INSERT INTO tabla(id, descripcion) SELECT idNueva, 'desc' FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM tabla WHERE Descripcion = 'desc');
Cita:
... INSERT INTO a VALUES(MAX(id) + 1,...
Esto te podría llegar a dar problemas, utiliza las secuencias.

Un saludo.
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 17:22.