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

Responder a