Advertisement
Guest User

Untitled

a guest
Mar 20th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.75 KB | None | 0 0
  1. --q1--
  2. CREATE TABLE RESULTAT(
  3.     NUM_ET NUMBER(6,0), NOM_ET VARCHAR2(20), PRENOM_ET VARCHAR2(15), CODE VARCHAR(7), NOTE_GLOB NUMBER(4,2),
  4.     CONSTRAINT DOM_NOTE_GLOB CHECK (NOTE_GLOB <= 20),
  5.     CONSTRAINT CON_PKEY PRIMARY KEY (NUM_ET, CODE)
  6. )
  7.  
  8. CREATE TABLE CLASSEMENT(
  9.     NUM_ET NUMBER(6,0), NOM_ET VARCHAR2(20), PRENOM_ET VARCHAR2(15),NOTE_GENE NUMBER(4,2), RANG NUMBER(3,0),
  10.     CONSTRAINT DOM_NOTE_GENE CHECK (NOTE_GENE <= 20),
  11.     CONSTRAINT CON_PKEY_CLASSEMENT PRIMARY KEY (NUM_ET)
  12. )
  13.  
  14. DECLARE
  15.     CURSOR NOTE_ETUDIANT IS
  16.         SELECT ETUDIANT.NUM_ET, NOM_ET, PRENOM_ET, MODULE.CODE,((NVL(MOY_CC,0)*COEFF_CC)+(NVL(MOY_TEST,0)*COEFF_TEST))/(COEFF_TEST + COEFF_CC) NOTE_GLOB
  17.         FROM ETUDIANT, NOTATION, MODULE
  18.         WHERE ETUDIANT.NUM_ET = NOTATION.NUM_ET AND NOTATION.CODE = MODULE.CODE AND ANNEE = 2;/*NOTE POUR UNE MATIERE*/
  19.    
  20.     CURSOR ETUDIANT_C IS
  21.         SELECT NUM_ET, NOM_ET, PRENOM_ET, AVG(NOTE_GLOB) NOTE_GENE
  22.         FROM RESULTAT
  23.         GROUP BY NUM_ET, NOM_ET, PRENOM_ET ORDER BY NOTE_GENE DESC;/*MOYENNE GENERALE POUR UN ETUDIANT*/
  24.  
  25.     CURSOR ETUDIANT_NON_NOTER IS
  26.         SELECT NUM_ET, NOM_ET, PRENOM_ET
  27.         FROM ETUDIANT
  28.         WHERE NUM_ET NOT IN (SELECT DISTINCT NUM_ET FROM NOTATION);/*ETUDIANT QUI ONT AUCUNE NOTE*/
  29.        
  30.     NOMBRE_ET NUMBER(3,0);
  31.     RANG_NOTE NUMBER(3,0);
  32.     MOYENNE_DE_TEST NUMBER(4,2);
  33.     AUCUN_ETUDIANT EXCEPTION;
  34.     UN_ETUDIANT ETUDIANT_C%ROWTYPE;
  35.    
  36. BEGIN
  37.     COMMIT; /*INITIALISE LE TRAITEMENT*/
  38.     SELECT COUNT(*) INTO NOMBRE_ET FROM ETUDIANT;
  39.     IF NOMBRE_ET = 0 THEN RAISE AUCUN_ETUDIANT; END IF; /*test si il y a des relations ou pas*/
  40.    
  41.     FOR LIGNE_ET IN NOTE_ETUDIANT LOOP
  42.         INSERT INTO RESULTAT VALUES (LIGNE_ET.NUM_ET, LIGNE_ET.NOM_ET, LIGNE_ET.PRENOM_ET, LIGNE_ET.CODE, LIGNE_ET.NOTE_GLOB);
  43.     END LOOP;/*INSERT DANS RESULTAT LES ETUDIANT NOTÉ*/
  44.    
  45.     FOR ET_SANS_NOTE IN ETUDIANT_NON_NOTER LOOP
  46.         INSERT INTO RESULTAT VALUES (ET_SANS_NOTE.NUM_ET, ET_SANS_NOTE.NOM_ET, ET_SANS_NOTE.PRENOM_ET,'INFO',0);
  47.     END LOOP;/*INSERT ETUDIANT NON NOTÉ DANS RÉSULTAT*/
  48.        
  49.     RANG_NOTE := 0;
  50.     MOYENNE_DE_TEST := 21;/*POUR LE PREMIER TOUR*/
  51.    
  52.     OPEN ETUDIANT_C;
  53.     FOR ET_C IN 1..NOMBRE_ET LOOP
  54.         FETCH ETUDIANT_C INTO UN_ETUDIANT;
  55.         EXIT WHEN ETUDIANT_C%NOTFOUND;
  56.         IF MOYENNE_DE_TEST > UN_ETUDIANT.NOTE_GENE THEN RANG_NOTE := ET_C; END IF;
  57.         INSERT INTO CLASSEMENT VALUES(UN_ETUDIANT.NUM_ET, UN_ETUDIANT.NOM_ET, UN_ETUDIANT.PRENOM_ET, UN_ETUDIANT.NOTE_GENE, RANG_NOTE);
  58.         MOYENNE_DE_TEST := UN_ETUDIANT.NOTE_GENE;
  59.     END LOOP;
  60.    
  61.     CLOSE ETUDIANT_C;
  62.    
  63.     COMMIT;
  64.    
  65.     EXCEPTION
  66.         WHEN AUCUN_ETUDIANT THEN
  67.             DBMS_OUTPUT.PUT_LINE('Il n''y a pas d''etudiant');
  68. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement