Calling Function or Procedure Multiple Times

Asked

Viewed 840 times

0

How to create a Function or Procedure that calls another Procedure to perform a neighborhood exchange on my ERP system?

Below is the precedent I want to define values for its parameters. It should be called based on a table of neighborhoods that should be updated.

CREATE OR REPLACE PROCEDURE Sp_Troca_Bairros2(anBairroAtual in NUMBER, anBairroNovo in NUMBER, anRegiaoAtual in NUMBER)
AS
lsBai          varchar2(1);
lnIdBairro     number(9);
lnIdRegiao     number(9);
rec_bairro     bairros%rowtype;
BEGIN     
     -- TESTA BAIRRO ATUAL 
     begin
        select 'S', bairros.idregiao, bairros.idbairro
          into lsBai, lnIdRegiao, lnIdBairro
          from bairros
         where bairros.idbairro = anBairroAtual
           and bairros.idregiao = anRegiaoAtual;
        exception 
           when no_data_found then
              lsBai := 'N';
     end;
     if lsBai = 'N' then
        raise_application_error(-20000, 'O Bairro '||anBairroAtual||' da Região '||anRegiaoAtual||', não pôde ser localizada, portanto não será alterado.');
        return;
     end if;     

     -- TESTA SE BAIRRO JÁ EXISTE  
     begin
        select 'S'
          into lsBai
          from bairros
         where bairros.idbairro = anBairroAtual
           and bairros.idregiao = anRegiaoAtual;
        exception 
           when no_data_found then
              lsBai := 'N';
     end;
     if lsBai = 'S' then             


         EXECUTE IMMEDIATE 'alter table ANALISE_LEITURA disable all triggers';
         EXECUTE IMMEDIATE 'alter table BAIRROS_LOCALIDADES disable all triggers';     
         EXECUTE IMMEDIATE 'alter table BOLETIM_CADASTRO_AT disable all triggers';
         EXECUTE IMMEDIATE 'alter table BOLETIM_VISTORIA disable all triggers';
         EXECUTE IMMEDIATE 'alter table CALCULO_DADOS disable all triggers';
         EXECUTE IMMEDIATE 'alter table CARGASCOLETORROTAS disable all triggers';
         EXECUTE IMMEDIATE 'alter table CONFIG_ENDERECO disable all triggers';
         EXECUTE IMMEDIATE 'alter table CONSUMIDOR disable all triggers';
         EXECUTE IMMEDIATE 'alter table CRM_PEDIDO_LIGACAO disable all triggers';
         EXECUTE IMMEDIATE 'alter table CRM_SOLICITACOES disable all triggers';
         EXECUTE IMMEDIATE 'alter table DECFEC_SOMA_UC disable all triggers';
         EXECUTE IMMEDIATE 'alter table EXPFAT_LOTE disable all triggers';
         EXECUTE IMMEDIATE 'alter table GRUPO_IMPRESSAO disable all triggers';
         EXECUTE IMMEDIATE 'alter table LIGACAO_PROVISORIA disable all triggers';
         EXECUTE IMMEDIATE 'alter table NOTAS_SERVICO disable all triggers';
         EXECUTE IMMEDIATE 'alter table PONTOSC disable all triggers';
         EXECUTE IMMEDIATE 'alter table PRJ_PONTOSC disable all triggers';
         EXECUTE IMMEDIATE 'alter table PROJETOS_PC disable all triggers';     
         EXECUTE IMMEDIATE 'alter table RUAS disable all triggers';
         EXECUTE IMMEDIATE 'alter table SETORES_CONFIG disable all triggers';
         EXECUTE IMMEDIATE 'alter table SOLICITACOES disable all triggers';
         EXECUTE IMMEDIATE 'alter table SOL_RETIF_SOLICITACOES disable all triggers';
         EXECUTE IMMEDIATE 'alter table UC disable all triggers';
         EXECUTE IMMEDIATE 'alter table AGRUPA_CONS disable all triggers';
         EXECUTE IMMEDIATE 'alter table BOLETIM_CADASTRO disable all triggers';
         EXECUTE IMMEDIATE 'alter table CALC_INDICE_DECFEC_EQUIPTO disable all triggers';     
         EXECUTE IMMEDIATE 'alter table CALENDARIO_LEITURA_RGBART disable all triggers';
         EXECUTE IMMEDIATE 'alter table CAMADA_LIMITES disable all triggers';
            EXECUTE IMMEDIATE 'alter table CGGRUPO_LEITURISTA_MES_UC disable all triggers';
            EXECUTE IMMEDIATE 'alter table COD_BAIRROS disable all triggers';
            EXECUTE IMMEDIATE 'alter table CONSUMIDOR_RECAD disable all triggers';
            EXECUTE IMMEDIATE 'alter table IMPORTA_CONSUMIDOR disable all triggers';
            EXECUTE IMMEDIATE 'alter table PLN_PONTOSC disable all triggers';
           EXECUTE IMMEDIATE 'alter table PLN_PONTOSC_CEN disable all triggers';
           EXECUTE IMMEDIATE 'alter table PLN_SUBESTACOES disable all triggers';
         EXECUTE IMMEDIATE 'alter table PLN_SUBESTACOES_CEN disable all triggers';
         EXECUTE IMMEDIATE 'alter table PRJ_PAR_PONTOSC disable all triggers';
         EXECUTE IMMEDIATE 'alter table PRJ_PAR_PONTOSC_ORIG disable all triggers';
         EXECUTE IMMEDIATE 'alter table RECAD_REMESSA_CONSUMIDOR disable all triggers';            
         EXECUTE IMMEDIATE 'alter table RECAD_REMESSA_UC disable all triggers';            
         EXECUTE IMMEDIATE 'alter table RECAD_RETORNO_CONSUMIDOR disable all triggers';     
         EXECUTE IMMEDIATE 'alter table RECAD_RETORNO_UC_CONS disable all triggers';
         EXECUTE IMMEDIATE 'alter table SUBESTACOES disable all triggers';
         EXECUTE IMMEDIATE 'alter table UC_RECAD disable all triggers';
         EXECUTE IMMEDIATE 'alter table UC_TRCOD disable all triggers';       

         update ANALISE_LEITURA                     set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update BAIRROS_LOCALIDADES                 set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;     
         update BOLETIM_CADASTRO_AT                 set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;     
         update BOLETIM_VISTORIA                    set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update CALCULO_DADOS                       set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update CARGASCOLETORROTAS                  set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update CONFIG_ENDERECO                     set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update CONSUMIDOR                          set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update CRM_PEDIDO_LIGACAO                  set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update CRM_SOLICITACOES                    set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update DECFEC_SOMA_UC                      set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update EXPFAT_LOTE                         set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update GRUPO_IMPRESSAO                     set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update LIGACAO_PROVISORIA                  set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update NOTAS_SERVICO                       set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;     
         update PONTOSC                             set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual; 
         update PRJ_PONTOSC                         set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update PROJETOS_PC                         set IDLOGRADOURO       = anBairroNovo where IDLOGRADOURO      = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update RUAS                                set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update SETORES_CONFIG                      set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update SOLICITACOES                        set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update SOL_RETIF_SOLICITACOES              set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
         update UC                                  set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
            update AGRUPA_CONS                         set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
            update BOLETIM_CADASTRO                    set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
            update CALC_INDICE_DECFEC_EQUIPTO          set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update CALENDARIO_LEITURA_RGBART           set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;
            update CAMADA_LIMITES                      set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update CGGRUPO_LEITURISTA_MES_UC           set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update COD_BAIRROS                         set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update CONSUMIDOR_RECAD                    set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update CONSUMIDOR_RECAD                    set IDBAIRRO_ant       = anBairroNovo where IDBAIRRO_ant      = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update IMPORTA_CONSUMIDOR                  set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update PLN_PONTOSC                         set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update PLN_PONTOSC_CEN                     set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update PLN_SUBESTACOES                     set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update PLN_SUBESTACOES_CEN                 set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update PRJ_PAR_PONTOSC                     set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update PRJ_PAR_PONTOSC_ORIG                set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update RECAD_REMESSA_CONSUMIDOR            set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update RECAD_REMESSA_UC                    set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update RECAD_RETORNO_CONSUMIDOR            set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update RECAD_RETORNO_UC_CONS               set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update SUBESTACOES                         set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update UC_RECAD                            set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update UC_RECAD                            set IDBAIRRO_ANT       = anBairroNovo where IDBAIRRO_ANT      = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update UC_TRCOD                            set IDBAIRRO           = anBairroNovo where IDBAIRRO          = anBairroAtual and IDREGIAO = anRegiaoAtual;            
            update UC_TRCOD                            set IDBAIRRO_ANT       = anBairroNovo where IDBAIRRO_ANT      = anBairroAtual and IDREGIAO = anRegiaoAtual;            

         COMMIT;

         EXECUTE IMMEDIATE 'alter table ANALISE_LEITURA enable all triggers';
         EXECUTE IMMEDIATE 'alter table BAIRROS_LOCALIDADES enable all triggers';     
         EXECUTE IMMEDIATE 'alter table BOLETIM_CADASTRO_AT enable all triggers';
         EXECUTE IMMEDIATE 'alter table BOLETIM_VISTORIA enable all triggers';
         EXECUTE IMMEDIATE 'alter table CALCULO_DADOS enable all triggers';
         EXECUTE IMMEDIATE 'alter table CARGASCOLETORROTAS enable all triggers';
         EXECUTE IMMEDIATE 'alter table CONFIG_ENDERECO enable all triggers';
         EXECUTE IMMEDIATE 'alter table CONSUMIDOR enable all triggers';
         EXECUTE IMMEDIATE 'alter table CRM_PEDIDO_LIGACAO enable all triggers';
         EXECUTE IMMEDIATE 'alter table CRM_SOLICITACOES enable all triggers';
         EXECUTE IMMEDIATE 'alter table DECFEC_SOMA_UC enable all triggers';
         EXECUTE IMMEDIATE 'alter table EXPFAT_LOTE enable all triggers';
         EXECUTE IMMEDIATE 'alter table GRUPO_IMPRESSAO enable all triggers';
         EXECUTE IMMEDIATE 'alter table LIGACAO_PROVISORIA enable all triggers';
         EXECUTE IMMEDIATE 'alter table NOTAS_SERVICO enable all triggers';
         EXECUTE IMMEDIATE 'alter table PONTOSC enable all triggers';
         EXECUTE IMMEDIATE 'alter table PRJ_PONTOSC enable all triggers';
         EXECUTE IMMEDIATE 'alter table PROJETOS_PC enable all triggers';     
         EXECUTE IMMEDIATE 'alter table RUAS enable all triggers';
         EXECUTE IMMEDIATE 'alter table SETORES_CONFIG enable all triggers';
         EXECUTE IMMEDIATE 'alter table SOLICITACOES enable all triggers';
         EXECUTE IMMEDIATE 'alter table SOL_RETIF_SOLICITACOES enable all triggers';
         EXECUTE IMMEDIATE 'alter table UC enable all triggers';             
         EXECUTE IMMEDIATE 'alter table AGRUPA_CONS enable all triggers';
         EXECUTE IMMEDIATE 'alter table BOLETIM_CADASTRO enable all triggers';
         EXECUTE IMMEDIATE 'alter table CALC_INDICE_DECFEC_EQUIPTO enable all triggers';     
         EXECUTE IMMEDIATE 'alter table CALENDARIO_LEITURA_RGBART enable all triggers';
         EXECUTE IMMEDIATE 'alter table CAMADA_LIMITES enable all triggers';
         EXECUTE IMMEDIATE 'alter table CGGRUPO_LEITURISTA_MES_UC enable all triggers';
         EXECUTE IMMEDIATE 'alter table COD_BAIRROS enable all triggers';
         EXECUTE IMMEDIATE 'alter table CONSUMIDOR_RECAD enable all triggers';
         EXECUTE IMMEDIATE 'alter table IMPORTA_CONSUMIDOR enable all triggers';
         EXECUTE IMMEDIATE 'alter table PLN_PONTOSC enable all triggers';
         EXECUTE IMMEDIATE 'alter table PLN_PONTOSC_CEN enable all triggers';
         EXECUTE IMMEDIATE 'alter table PLN_SUBESTACOES enable all triggers';
         EXECUTE IMMEDIATE 'alter table PLN_SUBESTACOES_CEN enable all triggers';
         EXECUTE IMMEDIATE 'alter table PRJ_PAR_PONTOSC enable all triggers';
         EXECUTE IMMEDIATE 'alter table PRJ_PAR_PONTOSC_ORIG enable all triggers';
         EXECUTE IMMEDIATE 'alter table RECAD_REMESSA_CONSUMIDOR enable all triggers';            
         EXECUTE IMMEDIATE 'alter table RECAD_REMESSA_UC enable all triggers';            
         EXECUTE IMMEDIATE 'alter table RECAD_RETORNO_CONSUMIDOR enable all triggers';     
         EXECUTE IMMEDIATE 'alter table RECAD_RETORNO_UC_CONS enable all triggers';
         EXECUTE IMMEDIATE 'alter table SUBESTACOES enable all triggers';
         EXECUTE IMMEDIATE 'alter table UC_RECAD enable all triggers';
         EXECUTE IMMEDIATE 'alter table UC_TRCOD enable all triggers';       

         --raise_application_error(-20000,'SÓ FALTA DELETAR');
         begin
            delete 
              from bairros 
             where bairros.idbairro = anBairroAtual
               and bairros.idregiao = anRegiaoAtual;
         end;

         commit;

         return;
     end if;      

END;  
  • http://answall.com/questions/12396/como-passar-valores-para-os-parametros-de-procedure-pl-sql/12401#12401

  • @Motta , I understood the logic , but what is the syntax to insert the values in the parameters ?

  • When calling Procedure an error occurs Call Sp_troca_bairros2(2,380,5)

1 answer

1


Something like that

declare
  vn_bairro_atu  number;
  vn_bairro_novo number;
begin
  vn_bairro_atu  := 2;
  vn_bairro_novo := 3;-- aqui poderia ser o resultado de um select
  Sp_Troca_Bairros2(vn_bairro_atu,vn_bairro_novo,1);-- e regiao é fixa por exemplo
end;

Browser other questions tagged

You are not signed in. Login or sign up in order to post.