Como retroceder em 1 um generator usando SP?
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
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
Curtidas 0
Respostas
Orlando Frade
10/10/2005
na verdade quero dah um rollback se der erro, mas como faço isso?
GOSTEI 0
Afarias
10/10/2005
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+
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
Orlando Frade
10/10/2005
o problema eh q ao encontrar algum erro, ele nao insere os dados, mas msm assim incrementa o generator e aí perder a ordem.
GOSTEI 0
Afarias
10/10/2005
|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+
|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
Vinicius2k
10/10/2005
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+
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
Orlando Frade
10/10/2005
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!!!
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