Pessoal, boa tarde.
Preciso de um help.
Tenho uma constraint num campo da tabela (campo varchar2(1)) e, nele existe uma constraint:
FLG IN ('D','A','C', NULL);
Esta constraint não trava quando digito "F" por exemplo para o campo.
Alguém poderia me identificar o erro???
Muito obrigado,
Trevisolli.
Constraint não travando...
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
- 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á
Primeiro, não é necessário colocar NULL na constraint.
Outra coisa:
Verifique como estão as propriedades da constraint! Rode esse select:
Verifique se o status dela está ENABLED.
Verifique se está DEFERRED ( ou seja, só vai fazer a validação no COMMIT).
Deve ser alguma coisa dessas.
Primeiro, não é necessário colocar NULL na constraint.
Outra coisa:
Verifique como estão as propriedades da constraint! Rode esse select:
select deferrable, deferred, status
from user_constraints
where constraint_name='SUA_CONSTRAINT'
Verifique se está DEFERRED ( ou seja, só vai fazer a validação no COMMIT).
Deve ser alguma coisa dessas.
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Dr. Gori, seguem parâmetros:
DEFERRABLE => NOT DEFERRABLE
DEFERRED => IMMEDIATE
STATUS => ENABLED
Sobre o NULL, o porque de não se colocar na constraint? E caso necessite dos valores ou NULL ?
Grato,
Trevisolli.
DEFERRABLE => NOT DEFERRABLE
DEFERRED => IMMEDIATE
STATUS => ENABLED
Sobre o NULL, o porque de não se colocar na constraint? E caso necessite dos valores ou NULL ?
Grato,
Trevisolli.
- 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 problema está justamente no NULL.
Todo campo permite NULL a não ser que você crie uma constraint NOT NULL para o campo!
Veja o exemplo abaixo:
Até aqui, tudo bem, pois eu não violei a constraint. Repare que ele permite que seja incluído o C2 como NULL, mesmo eu não tendo colocado na constraint.
Agora, vamos tentar incluir um valor não permitido: X
PROVADO que todo campo é NULL, a não ser que exista a constraint de NOT NULL.
Agora vamos simular o seu exemplo:
Veja, que ele permitiu colocar o X no C2, mesmo tendo a constraint. MOTIVO: Gostaria de saber Está aí um bom tópico para pesquisa!
Mas faça isso, retire o NULL que tudo ocorrerá bem!
Todo campo permite NULL a não ser que você crie uma constraint NOT NULL para o campo!
Veja o exemplo abaixo:
SQL> create table SUA_TABELA( c1 varchar2(1), c2 varchar2(1));
Table created.
SQL> alter table SUA_TABELA add check (c2 in ('A', 'B', 'C', NULL));
Table altered.
SQL> insert into SUA_TABELA (c1) values ('X');
1 row created.
SQL> select * from SUA_TABELA;
C C
- -
X
Agora, vamos tentar incluir um valor não permitido: X
SQL> insert into SUA_TABELA (c2) values ('X');
insert into SUA_TABELA (c2) values ('X')
*
ERROR at line 1:
ORA-02290: check constraint (SGA.SYS_C0022120) violated
Agora vamos simular o seu exemplo:
SQL> drop table SUA_TABELA
Table dropped.
SQL> create table SUA_TABELA( c1 varchar2(1), c2 varchar2(1));
Table created.
SQL> alter table SUA_TABELA add check (c2 in ('A', 'B', 'C', NULL));
Table altered.
SQL> insert into SUA_TABELA (c2) values ('X');
1 row created.
SQL>
Mas faça isso, retire o NULL que tudo ocorrerá bem!
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 24 visitantes