[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.