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.