[Resolvido]Stored Procedure em Postgresql

5 respostas
R

Ola pessoal estou com uma duvida aqui como fazer a stored procedure no postgre e como utilizar esta mesma stored no java ?
Eu tenho um cadastro de cliente e gostaria de saber como implementar ela no Postgres tenho uma ideia vaga tipo.
CREATE OR REPLACE sp_pesq_usuarios(integer) RETURNS ??? aqui quero saber como coloco para retornar os dados da tabela. AS

BEGIN

SELECT * FROM US_USUARIOS WHERE COD_USUARIO = $1;

TEM QUE FAZER ALGUM PARAMETRO DE RETORNO ?
END’
LANGUAGE plpgsql

Pessoal depois disto como utilizar no java para recuperar os dados e mostrar os mesmos na tela ?

5 Respostas

E

não entendi sua dúvida, poderia ir exatamente no ponto em que tem dúvida? O que você já pesquisou e o que te deixou confuso?

R

Amigo fico grato pela sua ajuda eis o que estou tentando fazer no postgres:

CREATE OR REPLACE FUNCTION sp_pesqusuarios(integer)
  RETURNS SETOF us_usuarios AS
'
BEGIN

	SELECT usu_nome, usu_login, usu_senha, usu_dtexpira FROM us_usuarios WHERE usu_codigo = $1;
	
END;
'
  LANGUAGE plpgsql

Quando tento executar esta procedure esta dando o seguinte erro no pgadmin III

ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function "sp_pesqusuarios" line 4 at SQL statement

********** Error **********

ERROR: query has no destination for result data
SQL state: 42601
Hint: If you want to discard the results of a SELECT, use PERFORM instead.
Context: PL/pgSQL function "sp_pesqusuarios" line 4 at SQL statement

Sei que deve se tratar da meneira que estou tentando mostrar o resultado, mais nao sei como fazer isso ?

E
create or replace function sp_pesqusuarios(integer)  
returns setof category
as $$
begin 
  return query SELECT usu_nome, usu_login, usu_senha, usu_dtexpira FROM us_usuarios WHERE usu_codigo = $1; 
end;
$$ 
language plpgsql;


select * from sp_pesqusuario(1)
R

Amigo agradeco a ajuda deu muito certo mais agora estou querendo implementar um Join fiz da seguinte forma :

create or replace function sp_pesqusuarios(integer)     
returns setof us_usuarios   
as '   
begin   
  return query SELECT usu_codigo, usu_nome, usu_login, usu_senha, usu_ativo, 
                      usu_dtexpira, usu_cod_nivel, us_niveis.niv_descricao, 
                      usu_dtcadastro, usu_dtalteracao

                      FROM us_usuarios

				INNER JOIN us_niveis ON (us_niveis.niv_codigo  = usu_cod_nivel)

				 WHERE usu_codigo = $1;

				
end;   
'   
language plpgsql;

Mais esta me retornando o seguinte erro ao rodar o select *

ERROR:  structure of query does not match function result type
DETAIL:  Returned type character varying(100) does not match expected type date in column 8.
CONTEXT:  PL/pgSQL function "sp_pesqusuarios" line 3 at RETURN QUERY

********** Error **********

ERROR: structure of query does not match function result type
SQL state: 42804
Detail: Returned type character varying(100) does not match expected type date in column 8.
Context: PL/pgSQL function "sp_pesqusuarios" line 3 at RETURN QUERY
R

Pessoal dei uma pesquisada e cheguei ao seguinte :

create or replace function sp_pesqusuarios(IN integer, OUT usu_codigo integer, 
OUT usu_nome character varying, OUT niv_descricao character varying)     
returns setof record   
as '   
begin   
  return query SELECT 
			us_usuarios.usu_codigo, us_usuarios.usu_nome, us_niveis.niv_descricao

                      FROM us_usuarios

				LEFT OUTER JOIN us_niveis ON (us_niveis.niv_codigo  = usu_cod_nivel)

				WHERE us_usuarios.usu_codigo = $1;

end;   
'   
language plpgsql;

Espero ter ajudado e agradeco a ajuda de todos, um forte abraco a todos.

Criado 8 de janeiro de 2012
Ultima resposta 9 de jan. de 2012
Respostas 5
Participantes 2