La gestion des erreurs dans Sybase
Est-il un moyen de gérer les erreurs dans SYBASE
, comme le TRY-CATCH
bloc que vous pouvez utiliser dans MS SQL Server
, Oracle
, etc?
J'ai cherché sur le web et la seule option que j'ai trouvé était la variable globale @@error
, mais il ne savait travailler comme je m'y attendais, par exemple, le code suivant:
begin tran
update table1
set name = 'new name'
where name = 'old name'
update table2
set id = 1
where id = 30
-- suppose id has a unique constraint and there's already a row with id = 1
IF @@error = 0
begin
print 'commited'
commit
end
else
begin
print 'rolled back'
rollback
end
La volonté, en effet, la restauration d'une certaine manière, parce que le nom que j'ai changé sur la table table1 conserve l'ancienne valeur que je l'ai testé ici, mais il n'a pas d'imprimer les messages, ou d'exécuter toutes les instructions que j'ai mis après les instructions qui provoque l'erreur
Quelqu'un peut m'aider dans ce domaine? Savez-vous comment Sybase erreur de manipulation fonctionne réellement?
Merci pour votre réponse, mais j'ai besoin de faire quelque chose comme ça dans un script qui s'execute a beaucoup d'insertions, mises à jour et beaucoup de contraintes pourrait être violé, de sorte que les validations faudrait une énorme quantité de code. Aussi, sans ces validations le script ont déjà plus de 1 200 lignes de code, donc un bloc try-catch ou quelque chose comme ça serait plus juste, mais il semble qu'il n'est pas possible, donc je suis en train de réfléchir, juste de laisser sybase annuler la transaction en cas d'erreur par lui-même.
Essayez de prendre un coup d'oeil à la 'sp_addmessage' commande qui vous permet de définir vos propres messages d'erreur, et la 'raiserror' commande qui vous permet d'appeler ces erreurs, et de définir la valeur de @@error.
Dans ma documentation sur sybase iq, j'ai lu il y a un
exception
déclaration.avec la fonction d'un catch
bloc.
OriginalL'auteur drigoangelo | 2012-10-09
Vous devez vous connecter pour publier un commentaire.
1ère solution.
Vous ne pouvez pas attraper une exception de cette façon, sur Sybase. Avant de mettre à jour vous avez à vérifier des données:
2ème solution.
Vous pouvez également mettre une commande de mise à jour de la procédure, alors vous pouvez l'attraper une exception.
Création de la procédure:
et de l'exécuter en tant que ci-dessous:
OriginalL'auteur Parado