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

Sentencias If y Case

Estas en el tema de Sentencias If y Case en el foro de PostgreSQL en Foros del Web. Hola señores. En mi base de datos he creado funciones, en las cuales envio dos parámetros, uno es de tipo integer y el otro es ...
  #1 (permalink)  
Antiguo 27/07/2010, 10:24
 
Fecha de Ingreso: abril-2010
Mensajes: 49
Antigüedad: 14 años, 8 meses
Puntos: 0
Pregunta Sentencias If y Case

Hola señores.

En mi base de datos he creado funciones, en las cuales envio dos parámetros, uno es de tipo integer y el otro es de tipo text. Lo que debo hacer es que según la segunda variable se ejecute una sentencia. No he trabajado con este tipo de funciones y es por eso que pido ayuda, ¿Como podria hacerlo? Su ayuda me sería muy satisfactoria, gracias.
  #2 (permalink)  
Antiguo 27/07/2010, 10:25
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 19 años, 3 meses
Puntos: 7
Respuesta: Sentencias If y Case

Se me ocurre, que pruebas, y sí te salen errores, los pases por acá para ayudarte. En la documentación hay buenos ejemplos
__________________
Gracias de todas todas
-----
Linux!
  #3 (permalink)  
Antiguo 27/07/2010, 10:50
 
Fecha de Ingreso: abril-2010
Mensajes: 49
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Sentencias If y Case

Por ejemplo esta función pr_translvl10(idactivo,condicion)

Código HTML:
DECLARE
	registros idactivo;
	a ALIAS FOR $2;
BEGIN
	IF a='primero' THEN
		FOR registros IN EXECUTE 'select d.idtransferencia from transferenciadetalle d, 
		transferencia t where d.idactivo=' ||  quote_literal(idactivo) || ' and d.estado=' || quote_literal('T') || ' 
		and d.idtransferencia=t.nro_doc and t.estado=' ||  quote_literal('F') || ' order by d.idtransferencia desc limit 1' loop
	ELSE IF a='segundo' THEN
		FOR registros IN EXECUTE 'select id_responsable_destino,id_ubicacion_destino from transferencia 
		where nro_doc=' ||  quote_literal(transferencia) loop
	END IF;
return next registros;
end loop;
return;
END;
Y tampoco pueda crear esta función, el error que se me genera es 'sintax error at or near "ELSE" at character 495'
  #4 (permalink)  
Antiguo 27/07/2010, 11:06
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 19 años, 3 meses
Puntos: 7
Respuesta: Sentencias If y Case

y si pruebas con CASE ?
__________________
Gracias de todas todas
-----
Linux!
  #5 (permalink)  
Antiguo 27/07/2010, 11:17
 
Fecha de Ingreso: abril-2010
Mensajes: 49
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Sentencias If y Case

Código HTML:
DECLARE
	registros idactivo;
	a ALIAS FOR $2;
BEGIN
	CASE a 
	WHEN 'primero' THEN
		FOR registros IN EXECUTE 'select d.idtransferencia from transferenciadetalle d, 
		transferencia t where d.idactivo=' ||  quote_literal(idactivo) || ' and d.estado=' || quote_literal('T') || ' 
		and d.idtransferencia=t.nro_doc and t.estado=' ||  quote_literal('F') || ' order by d.idtransferencia desc limit 1' loop
		end loop;
	WHEN 'segundo' THEN
		FOR registros IN EXECUTE 'select id_responsable_destino,id_ubicacion_destino from transferencia 
		where nro_doc=' ||  quote_literal(transferencia) loop
		end loop;
	END
return next registros;
END;
Me genera error en WHEN
  #6 (permalink)  
Antiguo 27/07/2010, 11:19
Avatar de chicohot20  
Fecha de Ingreso: mayo-2009
Mensajes: 388
Antigüedad: 15 años, 6 meses
Puntos: 43
Respuesta: Sentencias If y Case

En la documentación hay ejemplos:
Código:
IF number = 0 THEN
    result := 'zero';
ELSIF number > 0 THEN 
    result := 'positive';
ELSIF number < 0 THEN
    result := 'negative';
ELSE
    -- hmm, the only other possibility is that number is null
    result := 'NULL';
END IF;
  #7 (permalink)  
Antiguo 27/07/2010, 11:23
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 19 años, 3 meses
Puntos: 7
Respuesta: Sentencias If y Case

http://www.postgresql.org/docs/curre....html#AEN11381
__________________
Gracias de todas todas
-----
Linux!
  #8 (permalink)  
Antiguo 27/07/2010, 12:20
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: Sentencias If y Case

Empecemos desde cero.
idactivo es un tipo de dato construído por vos. Que tipo de dato es?

Si es un cursor, el problema que tienes es tratar de abrirlo y ejecutarlo dentro del condicional.

Lo que yo haría es:
OPEN registros FOR execute'sentencia';

Fuera de los condicionales, hacerles el respectivo recorrido con el LOOP.

explica mejor que es lo que quieres.

saludos Dantalian
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: case, sentencias
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 06:08.