NextVal com into em uma variável

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
pnet1
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 73
Registrado em: Qui, 23 Jan 2020 9:12 pm

O script abaixo vai funcionar com um NextVal de uma SEQUENCE atribuindo a uma variável? Esse pedaço de script vem de uma PROC, funcionando, mas com select max() + 1 e isso em muitas transações dá pau, como tem dado. Criei uma sequence, mas como não consigo testar ainda, pois precisamos ajeitar o servidor de DEV, escrevi isso e estou pedindo um favor a quem tem conhecimento, se pode me afirmar que vai rolar sem problemas. Desde já, agradeço.

Selecionar tudo

if VID_FILTRO_REGIONAL is null then
      select trade.TRADE_FILTRO_SEQ.Nextval --NVL(max(ID_FILTRO), 0) + 1
        into VID_FILTRO_REGIONAL
        from TRADE_FILTRO T
       where T.TIPO_FILTRO = 'REGIONAL';
      loop
        begin

          insert into TRADE_FILTRO
            (ID_FILTRO
            ,TIPO_FILTRO
            ,NOME_TIPO
            ,ATIVO
            ,DT_UPDATE
            ,APP_USER
            ,TIPO_FILTRO_SUPERIOR
            ,ID_FILTRO_SUPERIOR)
          values
            (VID_FILTRO_REGIONAL
            ,'REGIONAL'
            ,P_REGIONAL
            ,'S'
            ,TRUNC(sysdate)
            ,'SAP'
            ,null
            ,null);
          exit;
pnet1
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 73
Registrado em: Qui, 23 Jan 2020 9:12 pm

Código da PROC, acho que fica melhor o entendimento.

Selecionar tudo

create or replace procedure PRC_USUARIO(P_MATRICULA               TRADE_USUARIO.MATRICULA%type
                                       ,P_NOME                    TRADE_USUARIO.NOME%type
                                       ,P_ID_CARGO                TRADE_CARGO.ID_CARGO%type
                                       ,P_NOME_CARGO              TRADE_CARGO.NOME%type
                                       ,P_ID_CARGO_SUPERIOR       TRADE_CARGO.ID_CARGO%type
                                       ,P_NOME_CARGO_SUPERIOR     TRADE_CARGO.NOME%type
                                       ,P_MATRICULA_SUPERIOR      TRADE_USUARIO.MATRICULA_SUPERIOR%type
                                       ,P_REGIONAL                TRADE_FILTRO.NOME_TIPO%type
                                       ,P_CODIGO_PARCEIRO_NEGOCIO TRADE_USUARIO.CODIGO_PARCEIRO_NEGOCIO%type
                                       ,P_CEP                     TRADE_USUARIO.CEP%type
                                       ,P_ENDERECO                TRADE_USUARIO.ENDERECO%type
                                       ,P_NUMERO                  TRADE_USUARIO.NUMERO%type
                                       ,P_COMPLEMENTO             TRADE_USUARIO.COMPLEMENTO%type
                                       ,P_BAIRRO                  TRADE_USUARIO.BAIRRO%type
                                       ,P_CIDADE                  TRADE_USUARIO.CIDADE%type
                                       ,P_UF                      TRADE_USUARIO.UF%type
                                       ,P_ATIVO                   TRADE_USUARIO.ATIVO%type
                                       ,P_SAP_USER                varchar2
                                       ,P_SAP_DT_UPDATE           date
                                       ,P_EMAIL                   TRADE_USUARIO.EMAIL%type
                                       ,P_HEIWAY                  TRADE_USUARIO.HEIWAY%type) as
  VCOUNT number;
  VID_FILTRO_REGIONAL TRADE_FILTRO.ID_FILTRO%type;

begin

  insert into trade_carga_usuario_tmp(ID, MATRICULA, NOME, ID_CARGO, NOME_CARGO, 
  ID_CARGO_SUPERIOR, NOME_CARGO_SUPERIOR, MATRICULA_SUPERIOR, REGIONAL, CODIGO_PARCEIRO_NEGOCIO, CEP, ENDERECO, NUMERO, 
  COMPLEMENTO, BAIRRO, CIDADE, UF, ATIVO, SAP_USER, SAP_DT_UPDATE, EMAIL, HEIWAY, DT_CARGA) 
  values (TRADE_SEQ_CARGA_USUARIO.NEXTVAL, P_MATRICULA, P_NOME, P_ID_CARGO, P_NOME_CARGO, P_ID_CARGO_SUPERIOR, P_NOME_CARGO_SUPERIOR, P_MATRICULA_SUPERIOR, 
    P_REGIONAL, P_CODIGO_PARCEIRO_NEGOCIO, P_CEP, P_ENDERECO, P_NUMERO, P_COMPLEMENTO, P_BAIRRO, P_CIDADE, P_UF, P_ATIVO, 
    P_SAP_USER, P_SAP_DT_UPDATE, P_EMAIL, P_HEIWAY, SYSDATE);

  if trim(P_MATRICULA_SUPERIOR) is not null then
    select count(1)
      into VCOUNT
      from TRADE_USUARIO U
     where U.MATRICULA = trim(P_MATRICULA_SUPERIOR);
    if VCOUNT = 0 then
      PRC_LOG_CARGA_SAP('Matrícula [' || trim(P_MATRICULA_SUPERIOR) || '] do supervisor não localizada.');
      RAISE_APPLICATION_ERROR(-20001, 'Matrícula [' || trim(P_MATRICULA_SUPERIOR) || '] do supervisor não localizada.');
    end if;
  end if;
  insert into TRADE_TMPUSUARIOSAP
    (SAP_USER
    ,SAP_DT_UPDATE)
  values
    (P_SAP_USER
    ,P_SAP_DT_UPDATE);

  if P_REGIONAL is not null then
    select max(F.ID_FILTRO)
      into VID_FILTRO_REGIONAL
      from TRADE_FILTRO F
     where F.NOME_TIPO = P_REGIONAL
       and F.TIPO_FILTRO = 'REGIONAL';
    if VID_FILTRO_REGIONAL is null then
      select trade.TRADE_FILTRO_SEQ.Nextval --NVL(max(ID_FILTRO), 0) + 1
        into VID_FILTRO_REGIONAL
        from TRADE_FILTRO T
       where T.TIPO_FILTRO = 'REGIONAL';
      loop
        begin

          insert into TRADE_FILTRO
            (ID_FILTRO
            ,TIPO_FILTRO
            ,NOME_TIPO
            ,ATIVO
            ,DT_UPDATE
            ,APP_USER
            ,TIPO_FILTRO_SUPERIOR
            ,ID_FILTRO_SUPERIOR)
          values
            (VID_FILTRO_REGIONAL
            ,'REGIONAL'
            ,P_REGIONAL
            ,'S'
            ,TRUNC(sysdate)
            ,'SAP'
            ,null
            ,null);
          exit;
        exception
          when DUP_VAL_ON_INDEX then
            VID_FILTRO_REGIONAL := VID_FILTRO_REGIONAL + 1;
        end;
      end loop;

    end if;
  end if;

  if P_ID_CARGO_SUPERIOR is not null then
    select count(1) into VCOUNT from trade_cargo c where c.id_cargo = P_ID_CARGO_SUPERIOR;
    if VCOUNT = 0 then
      PRC_LOG_CARGA_SAP('Cargo superior não encontado ['||P_ID_CARGO_SUPERIOR||'-'|| P_NOME_CARGO_SUPERIOR ||']');
      raise_application_error(-20001,'Cargo superior não encontado ['||P_ID_CARGO_SUPERIOR||'-'|| P_NOME_CARGO_SUPERIOR ||']');
    end if;

  end if;

  update trade_cargo
     set id_cargo          = P_ID_CARGO,
         nome              = P_NOME_CARGO,
         nome_exibicao     = P_NOME_CARGO,
         id_cargo_superior = P_ID_CARGO_SUPERIOR,
         ativo             = 'S',
         dt_update         = TRUNC(sysdate),
         app_user          = 'SAP'
   where id_cargo = P_ID_CARGO;

  if sql%rowcount = 0 then
    insert into TRADE_CARGO
      (ID_CARGO
      ,NOME
      ,NOME_EXIBICAO
      ,ID_CARGO_SUPERIOR
      ,ATIVO
      ,DT_UPDATE
      ,APP_USER)
    values
      (P_ID_CARGO
      ,P_NOME_CARGO
      ,P_NOME_CARGO
      ,P_ID_CARGO_SUPERIOR
      ,'S'
      ,TRUNC(sysdate)
      ,'SAP');
  end if;

  update TRADE_USUARIO U
     set U.NOME                    = trim(P_NOME)
        ,U.ID_CARGO                = trim(P_ID_CARGO)
        ,U.MATRICULA_SUPERIOR      = trim(P_MATRICULA_SUPERIOR)
        ,U.ID_FILTRO_REGIONAL      = VID_FILTRO_REGIONAL
        ,U.TIPO_FILTRO_REGIONAL    = 'REGIONAL'
        ,U.CODIGO_PARCEIRO_NEGOCIO = P_CODIGO_PARCEIRO_NEGOCIO
        ,U.CEP                     = nvl(U.CEP,P_CEP)
        ,U.ENDERECO                = nvl(U.ENDERECO,trim(P_ENDERECO))
        ,U.NUMERO                  = nvl(U.NUMERO,P_NUMERO)
        ,U.COMPLEMENTO             = nvl(U.COMPLEMENTO,trim(P_COMPLEMENTO))
        ,U.BAIRRO                  = nvl(U.BAIRRO,trim(P_BAIRRO))
        ,U.CIDADE                  = nvl(U.CIDADE,trim(P_CIDADE))
        ,U.UF                      = nvl(U.UF,trim(P_UF))
        ,U.DT_UPDATE               = TRUNC(SYSDATE)
        ,U.EMAIL                   = trim(P_EMAIL)
        ,U.HEIWAY                  = nvl(trim(P_HEIWAY),U.HEIWAY)
   where U.MATRICULA = trim(P_MATRICULA);

  if sql%rowcount = 0 then
    null;
    insert into TRADE_USUARIO
      (MATRICULA
      ,NOME
      ,ID_CARGO
      ,MATRICULA_SUPERIOR
      ,ID_FILTRO_REGIONAL
      ,TIPO_FILTRO_REGIONAL
      ,CODIGO_PARCEIRO_NEGOCIO
      ,CEP
      ,ENDERECO
      ,NUMERO
      ,COMPLEMENTO
      ,BAIRRO
      ,CIDADE
      ,UF
      ,ATIVO
      ,APP_USER
      ,DT_UPDATE
      ,EMAIL
      ,HEIWAY)
    values
      (trim(P_MATRICULA)
      ,trim(P_NOME)
      ,trim(P_ID_CARGO)
      ,trim(P_MATRICULA_SUPERIOR)
      ,VID_FILTRO_REGIONAL
      ,'REGIONAL'
      ,trim(P_CODIGO_PARCEIRO_NEGOCIO)
      ,trim(P_CEP)
      ,trim(P_ENDERECO)
      ,trim(P_NUMERO)
      ,trim(P_COMPLEMENTO)
      ,trim(P_BAIRRO)
      ,trim(P_CIDADE)
      ,trim(P_UF)
      ,'S'--P_ATIVO
      ,'SAP'
      ,TRUNC(sysdate)
      ,trim(P_EMAIL)
      ,trim(P_HEIWAY));

  end if;

end PRC_USUARIO;
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Nem precisa complicar tanto.
Pode fazer direto:

Selecionar tudo

          insert into TRADE_FILTRO
            (ID_FILTRO
            ,TIPO_FILTRO
            ,NOME_TIPO
            ,ATIVO
            ,DT_UPDATE
            ,APP_USER
            ,TIPO_FILTRO_SUPERIOR
            ,ID_FILTRO_SUPERIOR)
          values
            (  trade.TRADE_FILTRO_SEQ.Nextval   ---- SEQUENCE AQUI
            ,'REGIONAL'
            ,P_REGIONAL
            ,'S'
            ,TRUNC(sysdate)
            ,'SAP'
            ,null
            ,null);
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes