Duda con función que consulta una vista

From: Cesar A <cesar(dot)carbonara(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Duda con función que consulta una vista
Date: 2011-03-23 03:21:29
Message-ID: AANLkTind0h=BnWEWiorDCwBFnVpEFXfcrU211Km=u9z3@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Saludos
Estoy buscando implementar una función y en las pruebas me encontré
con la siguiente duda, tengo la siguiente vista:

CREATE VIEW menu_permisos AS
SELECT menu.etiqueta, menu.mascara, menu.id_padre,
menu.etiqueta_padre, menu.mascara_padre, menu.visible, menu.accion,
usuario_menu.id_usuario FROM (menu JOIN usuario_menu ON ((menu.id =
usuario_menu.id_menu))) WHERE (menu.activo = true) ORDER BY
menu.posicion, menu.etiqueta;

La consulto: SELECT * FROM menu_permisos WHERE id_usuario = x; //
siendo x un id válido

y me devuelve correctamente la salida.

Creo la siguiente función, que lee la vista:

CREATE OR REPLACE FUNCTION consultar_menu(id_usuario int) RETURNS
SETOF menu_permisos AS '
DECLARE
r cc1.menu_permisos%rowtype;
BEGIN
RETURN QUERY SELECT * FROM cc1.menu_permisos WHERE id_usuario = $1;
END;
' LANGUAGE plpgsql;

Que, al hacer SELECT * FROM consultar_menu(x); debería devolverme los
mismos resultados que la vista, para el mismo valor de x, pero no se
cumple, me devuelve todos los valores existentes en la tabla.

Sí, la función la creo, con la sentencia de la vista directa, y no
consultado la vista:
CREATE OR REPLACE FUNCTION crear_menu(uid int) RETURNS SETOF menu_permisos AS '
DECLARE r menu_permisos%rowtype;
BEGIN
RETURN QUERY
SELECT menu.etiqueta, menu.mascara, menu.id_padre,
menu.etiqueta_padre, menu.mascara_padre, menu.visible, menu.accion,
usuario_menu.id_usuario
FROM menu
JOIN usuario_menu ON menu.id = usuario_menu.id_menu
WHERE menu.activo = true AND id_usuario = $1
ORDER BY menu.posicion, menu.etiqueta;
END;
' LANGUAGE 'plpgsql';

entonces sí funciona...

A qué se debe?

Gracias de antemano

--
--
Sí no eres parte de la solución... eres parte del problema.
--
... y no dejes de leer:
Netiqueta: Conjunto de reglas que regulan la conducta del usuario en internet
http://es.wikibooks.org/wiki/Netiquette
--
Cesar A. Carbonara R.
C.I. Nº V.11.952.572
--
Usuario Linux 377997
www.gulmer.org.ve

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Carlos Agustín López Avila 2011-03-23 03:36:33 PostgreSQL en Debian
Previous Message Jose David Verbel Tous 2011-03-23 01:35:01 Problemas con COPY