Fórum Como retroceder em 1 um generator usando SP? #53264
10/10/2005
0
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
Curtir tópico
+ 0Posts
10/10/2005
Orlando Frade
Gostei + 0
10/10/2005
Afarias
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+
Gostei + 0
10/10/2005
Orlando Frade
Gostei + 0
10/10/2005
Afarias
|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+
Gostei + 0
10/10/2005
Vinicius2k
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+
Gostei + 0
11/10/2005
Orlando Frade
E eu vou proceder assim a partir de hoje, vou tratar os erros no cliente e depois envio os dados para o sgbd.
Valeu!!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)