Fórum Como retroceder em 1 um generator usando SP? #53264

10/10/2005

0

Amigos,
tenho uma SP para inserção de dados, mas quando acontece algum erro ele acrescenta +1 no meu generator, mesmo dando alguma exceção.

eu não sei como faço para retroceder em 1 o meu generator ´GEN_GENEROS_ID´

CREATE PROCEDURE PROC_INS_GENEROS (
GENERO VARCHAR(30))
AS
begin
insert into generos(genero) values (:GENERO);
when sqlcode -625 do
begin
/* retroceder em 1 */
exception erro_campos_obrigatorios;
end
when sqlcode -803 do
begin
/* retroceder em 1 */
exception erro_valor_duplicado;
end
when any do
begin
/* retroceder em 1 */
exception erro_ins_generos;
end
end


Orlando Frade

Orlando Frade

Responder

Posts

10/10/2005

Orlando Frade

na verdade quero dah um rollback se der erro, mas como faço isso?


Responder

Gostei + 0

10/10/2005

Afarias

para retroceder faca:

gen_id(nome_generator, -1)


mas esteja advertido q retroceder um generator em uma aplicação multi-usuário é um grande risco e pode te trazer problemas.

a natureza dos generators é realmente de serem *independentes* de transação e *nunca* retrocederem.


T+


Responder

Gostei + 0

10/10/2005

Orlando Frade

o problema eh q ao encontrar algum erro, ele nao insere os dados, mas msm assim incrementa o generator e aí perder a ordem.


Responder

Gostei + 0

10/10/2005

Afarias

|o problema eh q ao encontrar algum erro, ele nao insere os dados, mas
|msm assim incrementa o generator e aí perder a ordem.

Bom, acho q não fui claro na mensagem anterior, mas: É assim mesmo q deve ser, este é o comportamento normal.

Não fosse assim, sistemas multi-usuários não funcionariam. Imagine:

Usuário A Executa o Proc (generator -> 10)
Usuário B Executa o Proc (generator -> 11)
Usuário B dá um Commit
Usuário A dá um Rollback (generator -> ???)


T+


Responder

Gostei + 0

10/10/2005

Vinicius2k

Colega,

Na minha opinião, vc deve tratar os dados do cliente no lado do cliente. Ou seja: validar as informações na aplicação antes de enviar o Banco.
*Eu* considero uma prática ruim transferir a validação para o lado do servidor e, sendo honesto, também acho ruim transferir os processos de manipulação dos dados para o lado do servidor.

Concordo que o uso de SPs facilita, e muito, a migração de linguagem da aplicação, mas penso que deve considerar qual a maior probabilidade: migrar de SGBD ou migrar de linguagem de desenvolvimento? Se vc necessitar migrar o SGBD, terá que re-escrever o código da mesma forma, visto que a linguagem procedural varia bastante entre eles.

T+


Responder

Gostei + 0

11/10/2005

Orlando Frade

Gostei da explicação dos 2.
E eu vou proceder assim a partir de hoje, vou tratar os erros no cliente e depois envio os dados para o sgbd.

Valeu!!!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar