Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Q3.3
- SET SERVEROUTPUT ON
- CREATE OR REPLACE PROCEDURE insertionJoueur(pnj joueur.nj%TYPE,
- pne joueur.ne%TYPE,
- pnmaillot joueur.nmaillot%TYPE,
- pprenom joueur.prenom%TYPE,
- pnom joueur.nom%TYPE,
- pposte joueur.poste%TYPE,
- unAge joueur.age%TYPE) AS
- /*déclaration exceptions avec numéro d'erreur (PRAGMA)*/
- CheckException EXCEPTION;
- PRAGMA EXCEPTION_INIT (CheckException,-2290);
- /*déclaration exception applicative (avec déclenchement)*/
- CheckEntraineur EXCEPTION;
- /*déclaration des variables*/
- vequipe joueur.ne%TYPE;
- vnbEntraineur NUMBER;
- BEGIN
- /*requêtes*/
- SELECT E.ne INTO vequipe
- FROM EQUIPE E
- WHERE E.ne=pne;
- /*Condition déclenchement exception CheckEntraineur*/
- IF(pposte='ENTRAÎNEUR') THEN
- SELECT COUNT(J.NJ) INTO vnbEntraineur
- FROM JOUEUR J
- WHERE (J.POSTE='ENTRAÎNEUR' AND NE=pne);
- IF(vnbEntraineur>0) THEN
- RAISE CheckEntraineur;
- END IF;
- END IF;
- INSERT INTO JOUEUR VALUES(pnj, pnmaillot, pprenom, pnom, pposte, unAge, pne);
- EXCEPTION
- WHEN DUP_VAL_ON_INDEX THEN
- IF SQLERRM LIKE '%(BRN1208A.PK_JOUEUR)%' THEN
- DBMS_OUTPUT.PUT_LINE('erreur SQL prédéfinie : DUP_VAL_ON_INDEX - PK_JOUEUR');
- ELSIF SQLERRM LIKE '%(BRN1208A.UK_JOUEUR)%' THEN
- DBMS_OUTPUT.PUT_LINE('erreur SQL prédéfinie : DUP_VAL_ON_INDEX - UK_JOUEUR');
- END IF;
- WHEN CheckException THEN
- /* Conditions permettant de dissocier l'exception check en fonction de son nom */
- IF SQLERRM LIKE '%(BRN1208A.CK_JOUEUR_NMAILLOT)%' THEN
- DBMS_OUTPUT.PUT_LINE('erreur SQL non-prédéfinie correspondant à une contrainte check : Numéro de maillot non compris entre 1 et 23');
- ELSIF SQLERRM LIKE '%(BRN1208A.NN_NOMJOUEUR)%' THEN
- DBMS_OUTPUT.PUT_LINE('erreur SQL non-prédéfinie correspondant à une contrainte check : Le nom ne doit pas être NULL');
- ELSIF SQLERRM LIKE '%(BRN1208A.CK_JOUEUR_POSTE)%' THEN
- DBMS_OUTPUT.PUT_LINE('erreur SQL non-prédéfinie correspondant à une contrainte check : Le poste est incorrect');
- ELSIF SQLERRM LIKE '%(BRN1208A.CK_JOUEUR_AGE)%' THEN
- DBMS_OUTPUT.PUT_LINE('erreur SQL non-prédéfinie correspondant à une contrainte check : Âge non supérieur à 0');
- END IF;
- WHEN NO_DATA_FOUND THEN
- DBMS_OUTPUT.PUT_LINE('erreur SQL prédéfinie : NO_DATA_FOUND dans la table Equipe');
- WHEN CheckEntraineur THEN
- DBMS_OUTPUT.PUT_LINE('erreur applicative : Il y a déjà un entraîneur');
- WHEN OTHERS THEN
- DBMS_OUTPUT.PUT_LINE(TO_CHAR(SQLCODE) || '-' || SQLERRM);
- END;
- /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement