Function recebendo parametro e retornando outro

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
facc
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 104
Registrado em: Qua, 27 Mai 2009 2:37 pm
Localização: Cerquilho / SP

Boa tarde, estou fazendo uma importação de um sistema legado para um plataforma WEB e preciso pegar o código antigo e atualizar para o que passará em vigor (Codigo novo). Portando gostaria de saber como posso fazer para uma Function receber o código antido e retornar novo? Ou seja, basicamente um De/Para.

Em SQL eu usaria da seguinte forma:

Selecionar tudo

Select Codigo_Novo from Cad_Produtos where Codigo_Antigo = :pCodAnt

Estou aberto a sugestões.
paulochagas
Moderador
Moderador
Mensagens: 86
Registrado em: Qua, 15 Mar 2006 2:46 pm
Localização: São Paulo - SP
Paulo Chagas Filho
__________________

Analista Funcional / Desenvolvedor Oracle EBS
MSN - paulochagas@hotmail.com
Gtalk - pachafi@gmail.com
Skype - paulochagas

Tudo bom?

Uma maneira simples que pensei foi essa.....


Selecionar tudo


CREATE OR REPLACE FUNCTION FNC_DEPARA (PI_COD IN NUMBER)
   RETURN NUMBER
IS
   L_RETURN   NUMBER;
BEGIN
   SELECT Codigo_Novo
       INTO L_RETURN
      FROM Cad_Produtos
    WHERE Codigo_Antigo = PI_COD;
   --
   RETURN L_RETURN;
   /* você PODE CONVENCIONAR PARA RETORNAR 
   -1 QUANDO NÃO ENCONTRAR NADA
   -2 QUANDO ENCONTRAR MAIS VALORES
   -99 QUANDO FOR UM ERRO INESPERADO
   */
EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      RETURN -1; 
   WHEN TOO_MANY_ROWS
   THEN
      RETURN -2;
   WHEN OTHERS
   THEN
      RETURN -99;
END FNC_DEPARA;

Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Boa tarde...
To na finaleira da tarde, então pensei bem por cima :D

Selecionar tudo

CREATE OR REPLACE FUNCTION funcao_teste_codigo(pcod_ant NUMBER) RETURN NUMBER IS
  RESULT NUMBER;
BEGIN
  SELECT codigo_novo
    INTO RESULT
    FROM cad_produtos
   WHERE codigo_antigo = :pcodant;

  RETURN(RESULT);

EXCEPTION
  WHEN no_data_found THEN
    RETURN NULL;
END funcao_teste_codigo;
Vê se te ajuda.
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

"Perdi" por um minuto, hein Paulo? hahaha
facc
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 104
Registrado em: Qua, 27 Mai 2009 2:37 pm
Localização: Cerquilho / SP

Irei testar e posto o resultado.

Para eu testar, funciona igual em Delphi/VB.Net? Ou seja,

Selecionar tudo

<variavel> = Nome_Funcao(Codigo);
Seria basicamente isso?
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Isso ai.
paulochagas
Moderador
Moderador
Mensagens: 86
Registrado em: Qua, 15 Mar 2006 2:46 pm
Localização: São Paulo - SP
Paulo Chagas Filho
__________________

Analista Funcional / Desenvolvedor Oracle EBS
MSN - paulochagas@hotmail.com
Gtalk - pachafi@gmail.com
Skype - paulochagas

Magina hhahahahahaha :D

Ainda bem que concordamos na solução :P
facc
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 104
Registrado em: Qua, 27 Mai 2009 2:37 pm
Localização: Cerquilho / SP

Funcionou. Muito Obrigado
Responder
  • Informação