Advertisement
Guest User

Untitled

a guest
Jan 30th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.59 KB | None | 0 0
  1. -- Q3.3
  2.  
  3. SET SERVEROUTPUT ON
  4. CREATE OR REPLACE PROCEDURE insertionJoueur(pnj joueur.nj%TYPE,
  5. pne joueur.ne%TYPE,
  6. pnmaillot joueur.nmaillot%TYPE,
  7. pprenom joueur.prenom%TYPE,
  8. pnom joueur.nom%TYPE,
  9. pposte joueur.poste%TYPE,
  10. unAge joueur.age%TYPE) AS
  11.  
  12. /*déclaration exceptions avec numéro d'erreur (PRAGMA)*/
  13. CheckException EXCEPTION;
  14. PRAGMA EXCEPTION_INIT (CheckException,-2290);
  15.  
  16. /*déclaration exception applicative (avec déclenchement)*/
  17. CheckEntraineur EXCEPTION;
  18.  
  19. /*déclaration des variables*/
  20. vequipe joueur.ne%TYPE;
  21. vnbEntraineur NUMBER;
  22.  
  23. BEGIN
  24.  
  25. /*requêtes*/
  26. SELECT E.ne INTO vequipe
  27. FROM EQUIPE E
  28. WHERE E.ne=pne;
  29.  
  30. /*Condition déclenchement exception CheckEntraineur*/
  31.  
  32. IF(pposte='ENTRAÎNEUR') THEN
  33.     SELECT COUNT(J.NJ) INTO vnbEntraineur
  34.     FROM JOUEUR J
  35.     WHERE (J.POSTE='ENTRAÎNEUR' AND NE=pne);
  36.     IF(vnbEntraineur>0) THEN
  37.         RAISE CheckEntraineur;
  38.     END IF;
  39. END IF;
  40.  
  41.  
  42. INSERT INTO JOUEUR VALUES(pnj, pnmaillot, pprenom, pnom, pposte, unAge, pne);
  43.  
  44. EXCEPTION
  45.     WHEN DUP_VAL_ON_INDEX THEN
  46.         IF SQLERRM LIKE '%(BRN1208A.PK_JOUEUR)%' THEN
  47.             DBMS_OUTPUT.PUT_LINE('erreur SQL prédéfinie : DUP_VAL_ON_INDEX - PK_JOUEUR');
  48.         ELSIF SQLERRM LIKE '%(BRN1208A.UK_JOUEUR)%' THEN
  49.             DBMS_OUTPUT.PUT_LINE('erreur SQL prédéfinie : DUP_VAL_ON_INDEX - UK_JOUEUR');
  50.         END IF;
  51.  
  52.     WHEN CheckException THEN
  53.     /* Conditions permettant de dissocier l'exception check en fonction de son nom */
  54.         IF SQLERRM LIKE '%(BRN1208A.CK_JOUEUR_NMAILLOT)%' THEN
  55.             DBMS_OUTPUT.PUT_LINE('erreur SQL non-prédéfinie correspondant à une contrainte check : Numéro de maillot non compris entre 1 et 23');
  56.         ELSIF SQLERRM LIKE '%(BRN1208A.NN_NOMJOUEUR)%' THEN
  57.             DBMS_OUTPUT.PUT_LINE('erreur SQL non-prédéfinie correspondant à une contrainte check : Le nom ne doit pas être NULL');
  58.         ELSIF SQLERRM LIKE '%(BRN1208A.CK_JOUEUR_POSTE)%' THEN
  59.             DBMS_OUTPUT.PUT_LINE('erreur SQL non-prédéfinie correspondant à une contrainte check : Le poste est incorrect');
  60.         ELSIF SQLERRM LIKE '%(BRN1208A.CK_JOUEUR_AGE)%' THEN
  61.             DBMS_OUTPUT.PUT_LINE('erreur SQL non-prédéfinie correspondant à une contrainte check : Âge non supérieur à 0');
  62.         END IF;
  63.     WHEN NO_DATA_FOUND THEN
  64.         DBMS_OUTPUT.PUT_LINE('erreur SQL prédéfinie : NO_DATA_FOUND dans la table Equipe');
  65.     WHEN CheckEntraineur THEN
  66.         DBMS_OUTPUT.PUT_LINE('erreur applicative : Il y a déjà un entraîneur');
  67.     WHEN OTHERS THEN
  68.         DBMS_OUTPUT.PUT_LINE(TO_CHAR(SQLCODE) || '-' || SQLERRM);
  69. END;
  70. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement