Advertisement
Guest User

Untitled

a guest
Aug 28th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 5.24 KB | None | 0 0
  1. CREATE OR REPLACE PACKAGE BODY ALIMCC
  2. IS
  3.     --Paramètre : Id du film à envoyer
  4.     PROCEDURE MOVIE_COPY_GENERATOR(v_film_id IN NUMBER)
  5.     AS
  6.         nbrCopieDispo NUMBER;
  7.         nbrCopieTransfert NUMBER;
  8.         documentXML XMLTYPE;
  9.  
  10.         TYPE tabCopy IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
  11.         copy tabCopy;
  12.  
  13.         parc NUMBER;
  14.  
  15.     BEGIN
  16.         --Génération du nombre de copie à envoyer sur base du nombre de copies présentes sur CB
  17.         SELECT COUNT(*) INTO nbrCopieDispo FROM COPIES WHERE MOVIE = v_film_id;
  18.  
  19.         nbrCopieTransfert := FLOOR(dbms_random.VALUE(0, nbrCopieDispo));
  20.    
  21.         IF nbrCopieTransfert > 0 THEN
  22.             --Generation des infos du film en XML
  23.             SELECT XMLElement(  "film",
  24.                                 XMLForest(  MOVIES.idmovie AS "id_film",
  25.                                             MOVIES.title AS "titre",
  26.                                             MOVIES.original_title AS "titre_original",
  27.                                             TO_CHAR(MOVIES.release_date, 'YYYY/MM/DD') AS "date_sortie",
  28.                                             MOVIES.STATUS AS "status",
  29.                                             to_char(MOVIES.vote_average,'000.000') AS "note_moyenne",
  30.                                             MOVIES.vote_count AS "nbr_note",
  31.                                             MOVIES.runtime AS "runtime",
  32.                                             MOVIES.certification AS "certification",
  33.                                             --(SELECT IMAGE FROM MOVIES INNER JOIN PICTURES ON MOVIES.poster_path = PICTURES.id_picture where MOVIES.idmovie = v_film_id) AS "affiche",
  34.                                             MOVIES.budget AS "budget",
  35.                                             MOVIES.revenu AS "revenus",
  36.                                             MOVIES.homepage AS "homepage",
  37.                                             MOVIES.tagline AS "tagline",
  38.                                             MOVIES.overview AS "overview"),
  39.                                 -- <genres> <genre> <id_genre></......>
  40.                                 XMLElement  ("genres", (SELECT XMLAgg( XMLElement(  "genre",
  41.                                                                                     XMLForest(GENRES.id AS "id_genre", GENRES.name AS "nom")))
  42.                                                     FROM MOVIES
  43.                                                     INNER JOIN GENRE_MOVIES ON MOVIES.idmovie = GENRE_MOVIES.movie
  44.                                                     INNER JOIN GENRES ON GENRE_MOVIES.id = GENRES.id
  45.                                                     WHERE MOVIES.idmovie = v_film_id
  46.                                                 )
  47.                                             ),
  48.  
  49.                                 XMLElement  ("langues", (SELECT XMLAgg( XMLElement("langue",
  50.                                                                                     XMLForest(LANGUAGES.code AS "id_langue", LANGUAGES.name AS "nom")))
  51.                                                     FROM MOVIES
  52.                                                     INNER JOIN SPOKEN_LANGUAGES ON MOVIES.idmovie = SPOKEN_LANGUAGES.movie
  53.                                                     INNER JOIN LANGUAGES ON SPOKEN_LANGUAGES.code = LANGUAGES.code
  54.                                                     WHERE MOVIES.idmovie = v_film_id
  55.                                                 )
  56.                                             ),
  57.  
  58.                                 XMLElement  ("listPays", (SELECT XMLAgg( XMLElement("pays",
  59.                                                                                     XMLForest(COUNTRIES.code_country AS "id_pays", COUNTRIES.name_country AS "nom")))
  60.                                                     FROM MOVIES
  61.                                                     INNER JOIN PRODUCTION_COUNTRY_MOVIES ON MOVIES.idmovie = PRODUCTION_COUNTRY_MOVIES.movie
  62.                                                     INNER JOIN COUNTRIES ON PRODUCTION_COUNTRY_MOVIES.code_country = COUNTRIES.code_country
  63.                                                     WHERE MOVIES.idmovie = v_film_id
  64.                                                 )
  65.                                             ),
  66.  
  67.                                 XMLElement  ("acteurs", (SELECT XMLAgg( XMLElement("acteur",
  68.                                                                                 XMLForest(ARTISTES.id_artiste AS "id_acteur", ARTISTES.name_artiste AS "nom", ARTISTES.img_artiste AS "lien_photo", PERSONNAGES.name_personnage AS "nom_role")))
  69.                                                     FROM MOVIES
  70.                                                     INNER JOIN ACTORS_MOVIES ON MOVIES.idmovie = ACTORS_MOVIES.id_movie
  71.                                                     INNER JOIN ARTISTES ON ACTORS_MOVIES.id_acteur = ARTISTES.id_artiste
  72.                                                     INNER JOIN PERSONNAGES ON PERSONNAGES.id_personnage = ACTORS_MOVIES.id_acteur AND PERSONNAGES.movie = ACTORS_MOVIES.id_movie
  73.                                                     WHERE MOVIES.idmovie = v_film_id
  74.                                                 )
  75.                                             ),
  76.  
  77.                                 XMLElement  ("listAvis", (SELECT XMLAgg( XMLElement("avis",
  78.                                                                                 XMLForest(AVIS.cote AS "note", AVIS.commentaire AS "commentaire")))
  79.                                                     FROM MOVIES
  80.                                                     INNER JOIN AVIS ON MOVIES.idmovie = AVIS.id_movie
  81.                                                     WHERE MOVIES.idmovie = v_film_id
  82.                                                 )
  83.                                             )
  84.                             )
  85.             INTO documentXML
  86.             FROM MOVIES
  87.             WHERE idmovie = v_film_id;
  88.  
  89.             --Insertion du XML généré dans la table de communication avec CC
  90.             INSERT INTO TMPXMLMOVIE
  91.             VALUES(documentXML);
  92.  
  93.             --generation des copies de film à envoyer sur CC
  94.             PROCEDURE_LOG('ALIMCC - AJOUT DE ' || nbrCopieTransfert ||' COPIES DU FILM ' || v_film_id);
  95.  
  96.             SELECT ID_COPIE BULK COLLECT INTO copy
  97.             FROM (SELECT ID_COPIE, ROWNUM FROM COPIES WHERE MOVIE = v_film_id)
  98.             WHERE ROWNUM <= nbrCopieTransfert;
  99.  
  100.             FOR parc IN copy.FIRST..copy.LAST LOOP
  101.            
  102.                 SELECT XMLElement("copie", XMLForest(   v_film_id AS "idFilm",
  103.                                                         copy(parc) AS "numCopy"))
  104.                 INTO documentXML
  105.                 FROM DUAL;
  106.  
  107.                 INSERT INTO tmpXMLCopie VALUES(documentXML); --Insertion de la copie sélectionnée dans la table de communicaiton avec CC
  108.                 DELETE FROM COPIES WHERE MOVIE = v_film_id AND ID_COPIE = copy(parc);--Suppression sur CB de la copie envoyée
  109.  
  110.             END LOOP;
  111.  
  112.         END IF;
  113.  
  114.     EXCEPTION
  115.         WHEN OTHERS THEN PROCEDURE_LOG('procedure alimCC ERREUR : ' ||SQLERRM); ROLLBACK;
  116.     END;
  117.  
  118.  
  119.  
  120.     PROCEDURE JOB
  121.     AS
  122.         f MOVIES%ROWTYPE;
  123.     BEGIN
  124.         --Boucle sur tous les films présents dans CB
  125.         FOR f IN (SELECT * FROM MOVIES) LOOP
  126.  
  127.             ALIMCC.MOVIE_COPY_GENERATOR(f.idmovie);
  128.  
  129.         END LOOP;
  130.  
  131.         COMMIT;
  132.  
  133.         RECEPTION_FILM@CC2.DBL; --Demande à CC de lire la table remplie lors de MOVIE_COPY_GENERATOR
  134.  
  135.     EXCEPTION
  136.         WHEN OTHERS THEN PROCEDURE_LOG('procedure alimCC JOB ERREUR : ' ||SQLERRM);
  137.     ROLLBACK;
  138.     END;
  139.  
  140. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement