tratamento de constraint em importação de dados
Bom galera a minha dúvida é a seguinte:
tenho uma tabela onde a chave primaria é composta por mais de 1 campo.
se a inclusão nessa tabela fosse feita manualmente beleza, porque ou verificava se já existe o registro no banco antes de incluir ou deixava a própria constraint bloquear ai tratava a mensagem de erro.
Só que o problema é que a inclusão não é feita manualmente e sim através de uma importação de um arquivo texto onde sempre terá em média de 30.000 a 50.000 registros à serem importados.
Então imaginem a cada registro fazer um select pra verificar se ele já existe seria inviável.
seria possivel bloquear a dudlicidade através da constraint e continuar a importação dos demais registros ????
suponha que o arquivo texto tenha 30.000 registro, quando cheqar no registro 20.556 a constraint bloquear, como continuar importando os proximos regostros ??
espero receber sugestões.
tenho uma tabela onde a chave primaria é composta por mais de 1 campo.
se a inclusão nessa tabela fosse feita manualmente beleza, porque ou verificava se já existe o registro no banco antes de incluir ou deixava a própria constraint bloquear ai tratava a mensagem de erro.
Só que o problema é que a inclusão não é feita manualmente e sim através de uma importação de um arquivo texto onde sempre terá em média de 30.000 a 50.000 registros à serem importados.
Então imaginem a cada registro fazer um select pra verificar se ele já existe seria inviável.
seria possivel bloquear a dudlicidade através da constraint e continuar a importação dos demais registros ????
suponha que o arquivo texto tenha 30.000 registro, quando cheqar no registro 20.556 a constraint bloquear, como continuar importando os proximos regostros ??
espero receber sugestões.
Fabiano Góes
Curtidas 0
Respostas
Comodelphi
19/11/2007
um try .. except talvez, tratar o erro retornado se violação de chave, dependendo do componente de acesso que vc usa, ai deixa o processo continuar;
GOSTEI 0
Fabiano Góes
19/11/2007
um try .. except talvez, tratar o erro retornado se violação de chave, dependendo do componente de acesso que vc usa, ai deixa o processo continuar;
comodelphi,
obrigado pela atenção mais o except não resolveu.
eu uso Delphi7->firebird1.5
executo os insert através do método: ExecuteDirect(); do componente SQLConnection
GOSTEI 0
Comodelphi
19/11/2007
Mas o que acontece? o programa continua rodando? não gera exceção de nenhum tipo?.
GOSTEI 0
Joaoshi
19/11/2007
Colega, talvez colocar numa trigger BeforeInsert da tabela e verificar
IF(EXISTS(SELECT CHAVE1,CHAVE2 FROM TABELA WHERE ....)) THEN EXCEPTION
Acredito que o Try Except que o colega falou no outro post passe a funcionar.
Espero ter ajudado.
IF(EXISTS(SELECT CHAVE1,CHAVE2 FROM TABELA WHERE ....)) THEN EXCEPTION
Acredito que o Try Except que o colega falou no outro post passe a funcionar.
Espero ter ajudado.
GOSTEI 0
Fabiano Góes
19/11/2007
Mas o que acontece? o programa continua rodando? não gera exceção de nenhum tipo?.
gera o except e para o processo
Colega, talvez colocar numa trigger BeforeInsert da tabela e verificar
IF(EXISTS(SELECT CHAVE1,CHAVE2 FROM TABELA WHERE ....)) THEN EXCEPTION
Acredito que o Try Except que o colega falou no outro post passe a funcionar.
Espero ter ajudado.
vou criar a trigger pra fazer um teste
GOSTEI 0
Comodelphi
19/11/2007
voce botou o try..except dentro do loop?
GOSTEI 0