2010-11-18 7 views
1

Je dois appeler la procédure stockée oracle à partir du ressort (via Hibernate). Je ne suis pas familier avec PL/SQL donc je voudrais savoir comment procéder avec cela.procédure stockée de printemps et de plsql - gestion des exceptions et transactions

1) Puis-je utiliser spring/hibernate (par exemple des annotations) pour commencer/fermer une transaction. Je suppose que ce n'est pas un problème et je n'ai pas besoin de commencer/fermer à l'intérieur de la procédure stockée.

2) Dans la procédure mentionnée je l'ouverture et la fermeture du curseur, mais en cas d'exception, je voudrais fermer et réémettre une exception à la partie Java, alors voici ce que je l'ai fait:

EXCEPTION 
    WHEN OTHERS THEN 
    CLOSE my_cursor; 
    RAISE e_cannot_do_sth; 

Je souhaite lever une exception pour que l'utilisateur sache que quelque chose s'est mal passé ...

Quelle est la meilleure façon de le faire?

Répondre

1
  1. Oui, vous pouvez utiliser Spring pour gérer les transactions. Je ne pense pas que Hibernate vous donnera beaucoup d'avantage ici.

  2. Pour lancer une exception, utilisez les touches suivantes:

    raise_application_error(errno, 'Error Message of your choice');

errno est un nombre compris entre -20000 et -20999. Ensuite, dans votre code Java, attraper le org.springframework.jdbc.UncategorizedSQLException, retirez le SQLExcection racine comme suit:

private SQLException digOutSqlException(UncategorizedSQLException t) { 
    Throwable root = t; 
    while (root.getCause() instanceof SQLException) { 
    return (SQLException)root.getCause(); 
    } 
    return null; 
} 

Et appelez getErrorCode() sur SQLException pour obtenir votre erreur personnalisée numéro d'erreur PL/SQL.

Questions connexes