Qtde máxima de registros num cadastro...

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Deathão
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 57
Registrado em: Qui, 16 Jun 2005 11:31 am
Localização: Assis
Contato:
--
Júnior

Fala pessoal td bom???

então estou com uma dúvida aqui, será que alguém pode me ajudar?

o lance é o seguinte!!

como eu faço para restringir o número de gravações em uma tabela?

exemplo? o usuário tem uma tela de cadastro que só pode conter apenas 8 registros. quando passar desse número como eu faço pra barrar isso?


em que trigger eu coloco essa programação???


grato de sua atenção!!

--
Júnior Deathão
Rpizao
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qua, 06 Jul 2005 11:33 am
Localização: RJ

Po tu fez a pergunta e deu a resposta..... :D
Faz na trigger de INSERT cara...
Dentro dela você faz um count e vê quantas tem, se tiver alcançado o limite você da uma mensagem de erro e para a trigger.

Boa sorte ai cara...
Abraços...
Rafael.
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

Po cara...eu tava certo que ia dar MUTATING TABLE se ele fizesse count na própria tabela. Eu estava enganado!

Criei a seguinte trigger na tabela T:

Selecionar tudo

create or replace trigger T_BI
  before insert on t  
  for each row
declare
  I NUMBER;
begin
  --conta as linhas
  SELECT COUNT(1)
  INTO I
  FROM T;
  
  IF I>=5 THEN 
     raise_application_error(-20001, 'Não pode ter mais que 5 linhas nessa tabela');
  END IF;
  
end;

Testando!!!

Selecionar tudo

SQL> 
SQL> select count(*) from t;

  COUNT(*)
----------
         3

SQL> insert into t values ('a');

1 row created.

SQL>  insert into t values ('a');

1 row created.

SQL>  insert into t values ('a');
 insert into t values ('a')
             *
ERROR at line 1:
ORA-20001: Não pode ter mais que 5 linhas nessa tabela
ORA-06512: at "SCOTT.T_BI", line 10
ORA-04088: error during execution of trigger 'SCOTT.T_BI'


SQL> 
Rpizao
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qua, 06 Jul 2005 11:33 am
Localização: RJ

hehehe...
Eu ainda não tinha feito restrições assim cara!!!
Mas achou que daria esse erro ond? Ao usar a variável populada no count?

Abraços....e ainda bem que funcionou....rs
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

É que sempre que você faz SELECT na própria tabela DENTRO duma trigger, dá o famoso erro: "Table is mutating".

(acho que é mais quando é uma AFTER INSERT, sei lá... Por isso que eu achei que nesse caso tb ia dar.
Responder
  • Informação
  • Quem está online

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