[Pgsql-ayuda] procedimientos (esto me va a matar)

Manuel Sugawara masm@fciencias.unam.mx
16 Mar 2004 15:11:24 -0600


"Magnvs -- Carles Querol" <magnvsctv@hotmail.com> writes:

> Hola, sigo con mi cruzada personal con los procedimientos almacenados... =
He
> escrito esto para modificar los permisos de un solo usuario a las tablas y
> secuencias de una base de datos (inicialmente quer=EDa que el procedimien=
to
> leyese el nombre del usuario como par=E1metro y modificar los permisos, p=
ero
> no hay forma de que funcione).=20

Utiliza execute, ej:

CREATE OR REPLACE FUNCTION public.privilegis(text)
  RETURNS int4 AS
'
	DECLARE
                username alias for $1;
		taula1	record;
		taula2	record;
		suma   int4;

	BEGIN
		suma:=3D0;

		FOR taula1 IN SELECT *
			FROM pg_tables
		LOOP
			IF taula1.schemaname=3D\'public\' THEN
				execute ''GRANT ALL ON TABLE '' || taula1.schemaname || ''.'' || taula1=
.tablename || '' TO '' || username;
			END IF;
			suma:=3Dsuma+1;
		END LOOP;


		FOR taula2 IN SELECT *
			FROM pg_statio_user_sequences
		LOOP
			IF taula2.schemaname=3D\'public\' THEN
				execute ''GRANT ALL ON TABLE '' || taula2.schemaname || ''.'' || taula2=
.tablename || '' TO '' || username;
			END IF;
			suma:=3Dsuma+1;
		END LOOP;

		RETURN suma;
	END;
'
  LANGUAGE 'plpgsql';

Saludos,
Manuel.