[firebase-br] Nao esta respeitando Uniquei

Cleber Moises Grings grings em grings.eti.br
Sex Jul 20 09:49:43 -03 2012


Hélio Oliveira <hpensador em ...> writes:

> 
> Bom dia Cleber!
> 
> Não entendi bem sua colocação quando diz... "outros todos são partes de uma 
> UK, os campos da UK são todos inteiros e não obrigatorios".
> 
> Se os demais campos compoem uma UK (Unique Key) eles passam a ser 
> obrigatórios, ou eu estou errado?
> 
> "Cleber Moises Grings"  escreveu na notícia da 
> mensagem:juadcq$vbs$1 <at> dough.gmane.org...
> 
> Temos uma tabela a onde são gravados dados atraves de uma SP
> 
> Esta tabela tem alguns poucos campos, um deles é a chave primaria e os
> outros todos são partes de uma UK, os campos da UK são todos inteiros e não
> obrigatorios
> em uma situação a onde são gravados atravez de uma SP ao preencher os os
> dois primeiros campos da UK aceita fazer a operação uma segunda vez sem
> mostrar erro algum, persistindo o dado no DB.
> 
> Queria ver se alguem já passou por isto, e o que esta sendo feito de errado,
> para permitir esta gravação?
> 
> Grato
> 
> Cléber Grings
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: 
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 
> 


Mais detalhes
a estrutura da tabela esta baixo

O que acontece que esta permitindo inserir registros duplicados

informando apenas o ID diferente
e ID_PROD_ESTQ e ID_ALMOX estes dois campos preenchidos os demais campos com 
null, aceita um segundo registro


CREATE GENERATOR GEN_CONFIG_ESTOQUE;

CREATE TABLE CONFIG_ESTOQUE (
    ID            D_ID NOT NULL /* D_ID = INTEGER NOT NULL */,
    ID_PROD_ESTQ  D_ID /* D_ID = INTEGER NOT NULL */,
    ID_ALMOX      D_ID /* D_ID = INTEGER NOT NULL */,
    ID_TAB_LOTE   D_ID_NO /* D_ID_NO = INTEGER */,
    ID_SUBPROD    D_ID_NO /* D_ID_NO = INTEGER */,
    ID_ENDEST     D_ID_NO /* D_ID_NO = INTEGER */,
    ID_MASCARA    D_ID_NO /* D_ID_NO = INTEGER */,
    ID_SERIE      D_ID_NO /* D_ID_NO = INTEGER */
);

ALTER TABLE CONFIG_ESTOQUE ADD CONSTRAINT UK_CONFIG_ESTOQUE_UNICO UNIQUE 
(ID_PROD_ESTQ, ID_ALMOX, ID_TAB_LOTE, ID_SERIE, ID_SUBPROD, ID_ENDEST, 
ID_MASCARA);

ALTER TABLE CONFIG_ESTOQUE ADD CONSTRAINT PK_CONFIG_ESTOQUE PRIMARY KEY (ID);

ALTER TABLE CONFIG_ESTOQUE ADD CONSTRAINT FK_CONFIG_ESTOQUE_ALMOX FOREIGN KEY 
(ID_ALMOX) REFERENCES ALMOXARIFADO (ID);
ALTER TABLE CONFIG_ESTOQUE ADD CONSTRAINT FK_CONFIG_ESTOQUE_PROD_ESTQ FOREIGN 
KEY (ID_PROD_ESTQ) REFERENCES PRODUTO_ESTOQUE (ID);
ALTER TABLE CONFIG_ESTOQUE ADD CONSTRAINT FK_CONFIG_ESTOQUE_SERIE FOREIGN KEY 
(ID_SERIE) REFERENCES TAB_SERIE (ID);
ALTER TABLE CONFIG_ESTOQUE ADD CONSTRAINT FK_CONFIG_ESTOQUE_TAB_LOTE FOREIGN 
KEY (ID_TAB_LOTE) REFERENCES TAB_LOTE (ID);


/* Trigger: TRG_CONFIG_ESTOQUE_BI0 */
CREATE OR ALTER TRIGGER TRG_CONFIG_ESTOQUE_BI0 FOR CONFIG_ESTOQUE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
   if ((new.ID is null) or (new.ID=0)) then
      new.ID = Gen_Id(GEN_CONFIG_ESTOQUE,1);
end
^


/* Trigger: TRG_CONFIG_ESTOQUE_BIU0 */
CREATE OR ALTER TRIGGER TRG_CONFIG_ESTOQUE_BIU0 FOR CONFIG_ESTOQUE
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
as
begin
  execute procedure SP_UES_VAL_CONFIG_ESTOQUE(new.ID_PROD_ESTQ,
                                              new.ID_TAB_LOTE,
                                              new.ID_SERIE,
                                              new.ID_SUBPROD);
end
^


SET TERM ; ^






Mais detalhes sobre a lista de discussão lista