Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Faccruz

[Resolvido] Procedure retornando valor

Recommended Posts

Bom dia,

 

Como faço para criar uma procedure que irá receber um valor do programa, reservar um registro de uma tabela (update em uma variavel) e retornar o id desse registro reservado?

 

 

tem que ser via procedure, politica da empresa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode criar uma procedure que retorna um valor por um parâmetro OUT

 

PROCEDURE fazUpdate(p_retorno OUT NUMBER) IS

BEGIN

p_retorno := 5; --id

END fazUpdate;

 

 

pra usar ela poderia ser assim daí

 

DECLARE

retorno_procedure NUMBER;

BEGIN

fazUpdate(retorno);

END;

 

Não sei se é isso que você queria saber.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode criar uma procedure que retorna um valor por um parâmetro OUT

 

PROCEDURE fazUpdate(p_retorno OUT NUMBER) IS

BEGIN

p_retorno := 5; --id

END fazUpdate;

 

 

pra usar ela poderia ser assim daí

 

DECLARE

retorno_procedure NUMBER;

BEGIN

fazUpdate(retorno);

END;

 

Não sei se é isso que você queria saber.

 

É quase isso, vou tentar explicar melhor.

 

Quero criar uma procedure que receba um valor, acesse uma tabela (+ de 100 mil registros), reserve o primeiro resistro não usado (tem uma flag char(1)), grave o valor recebido da procedure na mesma tabela e registro, e retorno no final o registro que ele selecionou

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos ver se eu entendi...

 

DECLARE
  retorno_procedure NUMBER;

  -- Procedure que faz o update e retorna o COLUNA_CODIGO
  PROCEDURE fazUpdate(p_valor_entrada IN VARCHAR2, p_retorno OUT NUMBER) IS
	retorno_tabela NUMBER;
  BEGIN
	UPDATE tabela
	  SET coluna = p_valor_entrada
	WHERE flag = 'n'
	RETURNING coluna_codigo INTO retorno_tabela;
	p_retorno := retorno_tabela;

  END fazUpdate;
BEGIN
  fazUpdate('Valor Entrada', retorno_procedure);
  dbms_output.put_line(retorno_procedure);
END;

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais ou menos isso, mas desse jeito ele faz o update em todos os registros ou estou enganado?

 

Quero selecionar apenas um registro, fazer o update (No parametro e a flag) e retornar para o programa esse registro alterado.

 

65 filiais irão usar essa mesma procedure

Compartilhar este post


Link para o post
Compartilhar em outros sites

daí você vai ter que montar um Update adequado para essas condições...

Daí não posso te ajudar...

 

 

eu tentei mostrar algo que poderia lhe ajudar (algo BEM simples...)

Meu conhecimento em PL/SQL não é muito bom, desculpe

 

dá uma procurada sobre procedures que você consegue.

 

 

 

 

valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta passar por parametro os campos que qualificam o registro a ser alterado e testar no update;

 

PROCEDURE fazUpdate(p_chave_tabela in number,p_valor_entrada IN VARCHAR2, p_retorno OUT NUMBER) IS

BEGIN

UPDATE tabela

SET coluna = p_valor_entrada

WHERE chave = p_chave_tabela and flag = 'n';

p_retorno := sql%rowcount;--qtd registros alterados

END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui!

 

Para aqueles que necessitar

 

CREATE OR REPLACE PROCEDURE CYBELAR_RES_NRSORTE(P_LOJA IN varchar2,
											P_NROSORTE OUT varchar2 ) is
  retorno_nrsorte varchar2(5);
  
  cursor cur_nrosorte is
	select rowid, nrosorte
	  from cybelar_nrosorte
	  where flguso = 'N' or flguso is null and rownum = 1;  
	  
res cur_nrosorte%rowtype;

begin
  open cur_nrosorte;
  loop
	fetch cur_nrosorte into res;
	if cur_nrosorte%notfound then
	  exit;
	end if;
  end loop;
	
  update cybelar_nrosorte
	set loja = p_loja, flguso = 'S'
	where nrosorte = res.nrosorte 
	returning nrosorte into retorno_nrsorte;
	
	commit;

	close cur_nrosorte;

	p_nrosorte := retorno_nrsorte;
end cybelar_res_nrsorte;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.