Rubens José Rodrigues escreveu:
Colegas,
Segue abaixo uma function que criei compila sem nenhum erro, mas quando
vou usa-la apresenta a seguinte mensagem de erro :
---------------------- FUNCTION DE LOGIN
CREATE TYPE login_sistema as (loginseq_s integer, usuario_s varchar(20),
gruposeq_s integer, grupo_s varchar(20));
CREATE OR REPLACE FUNCTION fnc_login ( e_login varchar(20), e_senha
varchar(32) )
RETURNS
SETOF
login_sistema
AS
$body$
DECLARE reg login_sistema%ROWTYPE;
BEGIN
FOR REG IN SELECT usuarios.seq ,
usuarios.nome,
grupousuarios.seq,
grupousuarios.grupo
FROM usuarios
LEFT OUTER JOIN
uniao_grupo_usuario ON
uniao_grupo_usuario.codusuario=usuarios.seq
LEFT OUTER JOIN
grupousuarios ON
uniao_grupo_usuario.codgrupo=grupousuarios.seq
WHERE
usuarios.login=$1 AND
usuarios.senha=md5($2)
ORDER BY grupousuarios.seq,usuarios.seq
LOOP
REG.loginseq_s:=usuarios.seq;
REG.usuario_s:=usuarios.nome;
REG.gruposeq_s:=grupousuarios.seq;
REG.grupo_s:=grupousuarios.grupo;
RETURN NEXT REG;
END LOOP;
RETURN NEXT REG;
RETURN;
END;
$body$
LANGUAGE 'plpgsql' ;
--------------------------------------------- MENSAGEM AO USAR O SELECT
NA FUNCTION
ERROR: missing FROM-clause entry for table "usuarios" at character 8
QUERY: SELECT usuarios.seq
CONTEXT: PL/pgSQL function "fnc_login" line 17 at assignment
As linhas abaixo não tem sentido, a atribuição ao REG já foi feita no
comando FOR, retire-as e teste sua função:
REG.loginseq_s:=usuarios.seq;
REG.usuario_s:=usuarios.nome;
REG.gruposeq_s:=grupousuarios.seq;
REG.grupo_s:=grupousuarios.grupo;
Veja:
http://www.postgresql.org/docs/8.2/interactive/plpgsql-control-structures.html#PLPGSQL-RECORDS-ITERATING
[]s
Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral