Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/06/2011, 11:37
Avatar de manuelpsx
manuelpsx
 
Fecha de Ingreso: junio-2011
Mensajes: 2
Antigüedad: 12 años, 10 meses
Puntos: 0
Sustituir datos en el SELECT de una Funcion

Hola compañeros, buenas las tengan y mejor las pasen!! Este es mi primer post en la pagina que me ha ayudado bastante en otras ocasiones al googlear mi problema y llegar a forosdelweb.com Espero aprender mucho y compartir lo que se cuando sea de utilidad.

Luego de la breve introducción quiero plantearles mi problemita y ver si alguien me puede orientar un poco, es sobre postgres lenguaje que apenas voy trabajando y si bien no es difícil hay cosas que como cualquier novato se me pasan o simplemente no las se.

Tengo una función que me hace un SELECT a varios campos de diferentes tablas y me devuelve el resultado del query, hasta ahí funciona perfectamente ahora lo que necesito es sustituir algunos valores de dos campos en especial. Les pongo mi función y después continuo detallando..

Código:
CREATE OR REPLACE FUNCTION obtenerreporte()
  RETURNS SETOF tdatos AS
$BODY$

DECLARE 
	linea tDatos;

BEGIN
	FOR linea IN
	SELECT 
	tr.fecha_emision,
	es.nombre,
	m.nombre,
	e.medio,
	c.nombre,
	c.siglas,
	tr.tiempo_inicio,
	tr.tiempo_fin,
	tr.tiempo_fin - tr.tiempo_inicio,
	te.nombre,
	tr.contenido,
	tr.calificacion 
	FROM transcripcion AS tr
	INNER JOIN transcripcion_ubicacion AS tu ON (tr.id = tu.transcripcion)
	INNER JOIN estado AS es ON (tu.estado = es.id)
	INNER JOIN municipio AS m ON (tu.municipios = m.id)
	INNER JOIN emisora AS e ON (tr.emisora = e.id)
	INNER JOIN canal AS c ON (tr.canal = c.id)
	INNER JOIN transcripcion_tema AS tt ON (tr.id = tt.transcripcion)
	INNER JOIN tema AS te ON (tt.tema = te.id)
	ORDER BY tr.fecha_emision DESC

	LOOP
	
	RETURN NEXT linea;

	END LOOP;

	--UPDATE linea SET linea.medio = 'RADIO' WHERE lista.medio = '1';
	--UPDATE linea SET linea.medio = 'TELEVISION' WHERE lista.medio = '2';
	--UPDATE linea SET linea.medio = 'PRENSA ESCRITA' WHERE lista.medio = '3';

	END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100
  ROWS 1000;
ALTER FUNCTION obtenerreporte() OWNER TO postgres;
Bien pues lo que trato es cambiar los valores en mi campo linea.medio, este campo siempre me traerá ya sea un 1 o un 2 o un 3, quiero reemplazar esos números y que me aparezca la palabra RADIO si es 1, la palabra TELEVISION si trae un 2 o que diga PRENSA ESCRITA si contiene un 3.

Al final del LOOP pueden ver que tengo comentados unos UPDATE es porque ya probé utilizando ese comando y me genera un error, cabe destacar que eh intentado poner los UPDATE dentro del LOOP antes y después del RETURN pero siempre me marca el mismo error. Aquí se los muestro..

Código:
ERROR:  error de sintaxis en o cerca de «$1»
LÍNEA 1: UPDATE  $1  SET  $2  = 'RADIO' WHERE lista.medio = '1'
                 ^
CONSULTA:  UPDATE  $1  SET  $2  = 'RADIO' WHERE lista.medio = '1'
CONTEXTO:  SQL statement in PL/PgSQL function "obtenerreporte" near line 41

********** Error **********

ERROR: error de sintaxis en o cerca de «$1»
SQL state: 42601
Context: SQL statement in PL/PgSQL function "obtenerreporte" near line 41
Si alguien me pudiera orientar o ayudar con este problema le agradeceré bastante, tal vez lo estoy haciendo mal y ya no puedo modificar esa tabla, cualquier sugerencia es bienvenida, espero haber sido claro o si les queda alguna duda preguntenme para dejar mas claro mi problema. Gracias y un saludo a todos el foro es excelente.