Bom dia galera,
Estou iniciando meus estudos em pl/sql e forms, inclusive sou novato no fórum
Tenhos algumas tabelas de cadastro. Preciso que quando
o usuário clique em "NOVO" (por exemplo), seja verificado o último
código cadastrado, incremente 1 e já apresente no campo código
o novo código.
Grato,
Verificar último código, incremtar '1'
- dr_gori
- 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
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
O ideal é só fazer isso no momento da inserção. Senão 2 pessoas podem estar pegando o mesmo código.
Exemplo:
MAQ1 - pega o ultimo registro (25) e adiciona 1. (26). Enquanto isso, ele não salvou nada. Ainda está inserindo a linha
MAQ2 - 1 minuto após, um outro usuáriopega também o ultimo registro gravado (25, pois o cara da maq1 ainda não salvou) e soma 1.
Aí já deu problema! Duas pessoas tentando inserir o mesmo codigo. 26. O que gravar primeiro vai conseguir. O outro vai dar erro!
Se você colocar na PRE-INSERT esse comando de buscar o último, reduz muito o problema, pois ele vai buscar o código milésimos de segundo e já grava...
O ideal é usar mesmo uma sequence nesses casos. Daí não tem erro nunca! O problema é que se a pessoa não gravar, fique "buracos" nos código. Você tem que avaliar se isso é permitido...
Exemplo:
MAQ1 - pega o ultimo registro (25) e adiciona 1. (26). Enquanto isso, ele não salvou nada. Ainda está inserindo a linha
MAQ2 - 1 minuto após, um outro usuáriopega também o ultimo registro gravado (25, pois o cara da maq1 ainda não salvou) e soma 1.
Aí já deu problema! Duas pessoas tentando inserir o mesmo codigo. 26. O que gravar primeiro vai conseguir. O outro vai dar erro!
Se você colocar na PRE-INSERT esse comando de buscar o último, reduz muito o problema, pois ele vai buscar o código milésimos de segundo e já grava...
O ideal é usar mesmo uma sequence nesses casos. Daí não tem erro nunca! O problema é que se a pessoa não gravar, fique "buracos" nos código. Você tem que avaliar se isso é permitido...
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Sex, 24 Out 2008 10:01 am
- Localização: Blumenau - SC
Robson Cristovão
Como ficaria esta procedure, assim ?
Desde já agradeço.
PROCEDURE VERIF_COD (PAIS NUMBER) IS
INC_CD_PAIS NUMBER(4);
BEGIN
SELECT CD_PAIS INTO INC_CD_PAIS FROM PAIS
WHERE CD_PAIS > INC_CD_PAIS;
IF CD_PAIS < INC_CD_PAIS THEN
INC_CD_PAIS := CD_PAIS + 1;
END IF;
END;
Desde já agradeço.
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Sex, 24 Out 2008 10:01 am
- Localização: Blumenau - SC
Robson Cristovão
Reformulando..
Como irei rodar apenas na máq. local, fiz da seguinte maneira:
Como irei rodar apenas na máq. local, fiz da seguinte maneira:
DECLARE
INC_CD_PAIS NUMBER(4);
wrk_prox_pais NUMBER(1);
BEGIN
SELECT max(cd_pais)+1
into wrk_prox_pais
from pais;
--wrk_prox_pais
SELECT CD_PAIS
INTO INC_CD_PAIS
FROM PAIS
WHERE CD_PAIS < INC_CD_PAIS;
INSERT INTO PAIS (CD_PAIS)
values (WRK_PROX_PAIS);
END;
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Sex, 24 Out 2008 10:01 am
- Localização: Blumenau - SC
Robson Cristovão
DR_GORI,
Concluí minha trigger, fiz um pre-insert mesmo.
Valeu pelo help
[]´s
Concluí minha trigger, fiz um pre-insert mesmo.
declare
AUX_FLG_EXISTE varchar2(1);
begin
if :PAIS.CD_PAIS is null then
select NVL(max(CD_PAIS),0)+1
into :PAIS.CD_PAIS
from PAIS;
else
begin
select 'S'
into AUX_FLG_EXISTE
from PAIS
where CD_PAIS = :PAIS.CD_PAIS;
exception
WHEN no_data_found then
AUX_FLG_EXISTE := 'N';
end;
if AUX_FLG_EXISTE = 'S' then
select NVL(max(CD_PAIS),0)+1
into :PAIS.CD_PAIS
from PAIS;
end if;
end if;
end;
[]´s
- dr_gori
- 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
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Eu ia te dizer mesmo pra colocar o NVL no max, pois caso esteja VAZIA a tebela, ia retornar NULO e não 1!
select NVL(max(CD_PAIS),0)+1
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 22 visitantes