Como forçar obrigatoriedade de atributo no Oracle

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
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Pessoal tenho três atributos :
NR_VALOR
DE_VALOR
DT_VALOR

E preciso validar que quando for inserido um registro pelo menos um desses campos tem que estar preenchido - senão tiver apresenta um erro tratado
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Podes fazer uma trigger de banco que dispara sempre que um registro for inserido na tabela, e faz as validações que você nescessita.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

constraint outra solução viavel
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Check constraint com certeza. Triggers são somente usadas para validar restrições complexas envolvendo múltiplas linhas ou tabelas distintas, tanto por desempenho quanto por clareza.

Segue abaixo um exemplo simples:

Selecionar tudo

SQL> create table tab_teste as
  2  select 1 NR_VALOR, 20 DE_VALOR, trunc(sysdate) DT_VALOR
  3  from dual
  4  /

Table created

SQL> alter table tab_teste add constraint check_preenche_um
  2    check (nr_valor is not null or de_valor is not null or dt_valor is not null)
  3  /

Table altered

SQL> insert into tab_teste (nr_valor, de_valor, dt_valor)
  2  values (234, null, null)
  3  /

1 row inserted

SQL> insert into tab_teste (nr_valor, de_valor, dt_valor)
  2  values (null, null, null)
  3  /

insert into tab_teste (nr_valor, de_valor, dt_valor)
values (null, null, null)

ORA-02290: restrição de verificação (SYS.CHECK_PREENCHE_UM) violada
Responder
  • Informação
  • Quem está online

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