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;
NextVal com into em uma variável
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.
Código da PROC, acho que fica melhor o entendimento.
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;
- dr_gori
- Moderador
- Mensagens: 5013
- 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
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:
Pode fazer direto:
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);
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes