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

Uso correcto de Case dentro de una Función

Estas en el tema de Uso correcto de Case dentro de una Función en el foro de PostgreSQL en Foros del Web. Buenas gente del foro... Estoy armando una funcion del tipo trigger en la cual necesito hacer uso de alguna funcion condicional al mejor estilo "select ...
  #1 (permalink)  
Antiguo 24/02/2009, 11:43
Avatar de [NiRVaNa]  
Fecha de Ingreso: abril-2004
Ubicación: Someplace In The Middle Of Nowhere!
Mensajes: 325
Antigüedad: 20 años
Puntos: 6
Uso correcto de Case dentro de una Función

Buenas gente del foro...

Estoy armando una funcion del tipo trigger en la cual necesito hacer uso de alguna funcion condicional al mejor estilo "select case o switch"... Sé que existe una funcion llamada case dentro de postgres, pero nunca la habia usado en una funcion, solo en consultas...

Tengo armado esto hasta ahora, pero me marca error ni bien entra a ciclo del case:
Código:
CREATE OR REPLACE FUNCTION cargarOtros()
  RETURNS "trigger" AS
$BODY$
BEGIN
IF ((TG_OP = 'INSERT') OR (TG_OP = 'UPDATE')) THEN
	
	CASE
	-- Nivel de Estudios 
		WHEN new.otrainstisec is not null THEN
			IF ((select count(*) from institucion where nombre = new.otrainstisec) = 0) THEN
				insert into institucion (nombre, tipoinst) values (new.otrainstisec, 'SEC');
			END IF;
			
		WHEN new.otroinstiterc is not null THEN
			IF ((select count(*) from institucion where nombre = new.otroinstiterc) = 0) THEN
				insert into institucion (nombre, tipoinst) values (new.otroinstiterc, 'UNI');
			END IF;
			
		WHEN new.otroinstimae is not null THEN
			IF ((select count(*) from institucion where nombre = new.otroinstimae) = 0) THEN
				insert into institucion (nombre, tipoinst) values (new.otroinstimae, 'ESP');
			END IF;
			
		WHEN new.otrainstidoc is not null THEN
			IF ((select count(*) from institucion where nombre = new.otrainstidoc) = 0) THEN
				insert into institucion (nombre, tipoinst) values (new.otrainstidoc, 'ESP');
			END IF;
END;
	
END IF;
RETURN NEW;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
El error que me marca es:
Cita:
ERROR: syntax error at or near "CASE" at character 1
QUERY: CASE WHEN $1 is not null THEN IF ((select count(*) from institucion where nombre = $2 ) = 0) THEN insert into institucion (nombre, tipoinst) values ( $3 , 'SEC')
El case lo uso a modo de validación y para no hacer uso excesivo de IF...

Es posible hacer loque estoy intentando hacer? O me tendre que conformar con el IF...

Salu2...
__________________
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."

Última edición por [NiRVaNa]; 24/02/2009 a las 11:45 Razón: Se me chispoteo el titulo...
  #2 (permalink)  
Antiguo 26/02/2009, 11:57
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Uso correcto de Case dentro de una Función

En realidad quieres usar el CASE WHEN como un IF, por que es un uso Mi excesivo???

Mi consejo, hazlo directamente con IF, si las condiciones las estas metiendo dentro de los when sera lo mismo.

Salu2
  #3 (permalink)  
Antiguo 26/02/2009, 12:06
Avatar de [NiRVaNa]  
Fecha de Ingreso: abril-2004
Ubicación: Someplace In The Middle Of Nowhere!
Mensajes: 325
Antigüedad: 20 años
Puntos: 6
Respuesta: Uso correcto de Case dentro de una Función

La verdad que pensando como programador, para cada necesidad su solución pertinente... En este case el Case o Switch...

Pero viendo muchos ejemplos llegue a la conclusión (mi conclusió, puedo estar errado) de que no es posible utilizarlo de la manera en que quiero utilizarlo, ya que DEBE estar dentro de un SELECT para que funcione correctamente.

Anyway... Lo hice con multiples IFsss...

Saludos.
__________________
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
  #4 (permalink)  
Antiguo 26/02/2009, 13:34
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Uso correcto de Case dentro de una Función

Cita:
Iniciado por [NiRVaNa] Ver Mensaje
La verdad que pensando como programador, para cada necesidad su solución pertinente... En este case el Case o Switch...
mmmm desde el punto de vista del programador yo diría que este caso no es un "switch", ya que no evaluas el valor de una variable si no de 4 variables distintas, por tanto 4 IFs sería (desde mi punto de vista) lo correcto.

Cita:
Pero viendo muchos ejemplos llegue a la conclusión (mi conclusió, puedo estar errado) de que no es posible utilizarlo de la manera en que quiero utilizarlo, ya que DEBE estar dentro de un SELECT para que funcione correctamente.
Correcto, ten en cuenta que lo puedes usar, por ejemplo en el ORDER BY, como he mostrado recientemente (hoy mismo) en otro post.

Salu2
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 09:05.