Faccruz 0 Denunciar post Postado Maio 8, 2009 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
KennyxD 0 Denunciar post Postado Maio 8, 2009 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
Faccruz 0 Denunciar post Postado Maio 8, 2009 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
KennyxD 0 Denunciar post Postado Maio 8, 2009 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
Faccruz 0 Denunciar post Postado Maio 8, 2009 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
KennyxD 0 Denunciar post Postado Maio 8, 2009 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
Motta 645 Denunciar post Postado Maio 8, 2009 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
Faccruz 0 Denunciar post Postado Maio 8, 2009 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