Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Oracle (http://www.forosdelweb.com/f100/)
-   -   Select Insert... (http://www.forosdelweb.com/f100/select-insert-578346/)

CDj 21/04/2008 12:28

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!!

CDj 22/04/2008 04:52

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?

MutenRo 22/04/2008 05:46

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.


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

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.