Advertisement
Guest User

Untitled

a guest
Apr 17th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 5.61 KB | None | 0 0
  1.  
  2.  
  3. CREATE OR REPLACE TRIGGER CLIENTS_NOM_MAJ
  4. BEFORE INSERT OR UPDATE ON CLIENTS
  5. FOR EACH ROW  
  6. BEGIN
  7.    :NEW.nom := UPPER(:NEW.nom);
  8. END;
  9. /
  10.  
  11. CREATE OR REPLACE TRIGGER CLIENTS_PRENOM_UCF
  12. BEFORE INSERT OR UPDATE ON CLIENTS
  13. FOR EACH ROW  
  14. BEGIN
  15.    :NEW.prenom := INITCAP(:NEW.prenom);
  16. END;
  17. /
  18.  
  19. CREATE OR REPLACE TRIGGER LOCATION_INIT
  20. BEFORE INSERT OR UPDATE ON LOCATION
  21. FOR EACH ROW
  22. BEGIN
  23. IF INSERTING THEN
  24.    :NEW.DATEDEB := TO_CHAR(SYSDATE, 'DD/MM/YYYY');
  25.    :NEW.DATEFIN := NULL;
  26. ELSE
  27.    IF :OLD.DATEFIN IS NULL THEN
  28.        :NEW.DATEFIN := TO_CHAR(SYSDATE, 'DD/MM/YYYY');
  29.    ELSE
  30.     RAISE_APPLICATION_ERROR(-20000, 'La date est déjà renseignée');
  31.    END IF;
  32. END IF;
  33. END;
  34. /
  35.  
  36. CREATE OR REPLACE TRIGGER LOCATION_UPD_FACTURE
  37. BEFORE INSERT OR DELETE ON LOCATION
  38. FOR EACH ROW  
  39. DECLARE
  40.    nbLocDay NUMBER;
  41.    prixLoca NUMBER;
  42.    totalP NUMBER;
  43.    nbrecap NUMBER;
  44. BEGIN
  45.    IF INSERTING THEN
  46.     SELECT prix INTO prixLoca FROM PRIXLOC WHERE PRIXLOC.TypeV = :NEW.TypeV;
  47.     SELECT COUNT(*) INTO nbLocDay FROM FACTURE_LOC WHERE FACTURE_LOC.Numcli = :NEW.Numcli AND TO_CHAR(FACTURE_LOC.datedeb, 'DD/MM/YYYY') = TO_CHAR(:NEW.datedeb,'DD/MM/YYYY');
  48.     IF nbLocDay = 1 THEN
  49.         UPDATE FACTURE_LOC SET PRIXF = PRIXF + prixLoca WHERE FACTURE_LOC.Numcli = :NEW.Numcli AND TO_CHAR(FACTURE_LOC.datedeb, 'DD/MM/YYYY') = TO_CHAR(:NEW.datedeb,'DD/MM/YYYY');
  50.     ELSE
  51.         INSERT INTO FACTURE_LOC VALUES(:NEW.Numcli, :NEW.datedeb, prixLoca);
  52.     END IF;
  53.    
  54.     SELECT COUNT(*) INTO nbrecap FROM RECAP WHERE ANNEE = TO_CHAR(:NEW.datedeb, 'YYYY') AND MOIS = TO_CHAR(:NEW.datedeb, 'MM') AND TypeV = :NEW.typev;
  55.     IF nbrecap > 0 THEN
  56.         UPDATE RECAP SET NBLOC = NBLOC + 1 WHERE ANNEE = TO_CHAR(:NEW.datedeb, 'YYYY') AND MOIS = TO_CHAR(:NEW.datedeb, 'MM') AND TypeV = :NEW.typev;
  57.     ELSE
  58.         INSERT INTO RECAP(annee,mois,typev,nbloc) VALUES(TO_CHAR(:NEW.datedeb, 'YYYY'), TO_CHAR(:NEW.datedeb, 'MM'), :NEW.typeV, 1);
  59.     END IF;
  60.    
  61.    END IF;
  62.    
  63.    
  64.    IF DELETING THEN
  65.     SELECT prix INTO prixLoca FROM PRIXLOC WHERE PRIXLOC.TypeV = :OLD.TypeV;
  66.     SELECT prixf INTO totalP FROM FACTURE_LOC WHERE FACTURE_LOC.Numcli = :OLD.Numcli AND TO_CHAR(FACTURE_LOC.datedeb, 'DD/MM/YYYY') = TO_CHAR(:OLD.datedeb,'DD/MM/YYYY');
  67.     IF totalP - prixLoca > 0 THEN
  68.         UPDATE FACTURE_LOC SET PRIXF = PRIXF - prixLoca WHERE FACTURE_LOC.Numcli = :OLD.Numcli AND TO_CHAR(FACTURE_LOC.datedeb, 'DD/MM/YYYY') = TO_CHAR(:OLD.datedeb,'DD/MM/YYYY');
  69.     ELSE
  70.         DELETE FROM FACTURE_LOC WHERE Numcli = :OLD.Numcli AND TO_CHAR(datedeb, 'DD/MM/YYYY') = TO_CHAR(:OLD.datedeb,'DD/MM/YYYY');
  71.     END IF;
  72.    
  73.     SELECT nbloc INTO nbrecap FROM RECAP WHERE ANNEE = TO_CHAR(:OLD.datedeb, 'YYYY') AND MOIS = TO_CHAR(:OLD.datedeb, 'MM') AND TypeV = :OLD.typev;
  74.     IF nbrecap > 1 THEN
  75.         UPDATE RECAP SET NBLOC = NBLOC - 1 WHERE ANNEE = TO_CHAR(:OLD.datedeb, 'YYYY') AND MOIS = TO_CHAR(:OLD.datedeb, 'MM') AND TypeV = :OLD.typev;
  76.     ELSE
  77.         DELETE FROM RECAP WHERE ANNEE = TO_CHAR(:OLD.datedeb, 'YYYY') AND MOIS = TO_CHAR(:OLD.datedeb, 'MM') AND TypeV = :OLD.typev;
  78.     END IF;
  79.    
  80.    END IF;
  81.  
  82. END;
  83. /
  84.  
  85.  
  86. CREATE OR REPLACE TRIGGER LOCATION_NB_CLIENTS_NBLOC
  87. BEFORE INSERT OR UPDATE OR DELETE ON LOCATION
  88. FOR EACH ROW
  89. BEGIN
  90. IF INSERTING THEN
  91.  UPDATE CLIENTS SET Nblocation = Nblocation + 1
  92.  WHERE Numcli = :NEW.Numcli;
  93.  END IF;
  94. IF DELETING THEN
  95.  IF :OLD.DATEFIN IS NULL THEN
  96.     UPDATE CLIENTS SET NBLOCATION = NBLOCATION-1
  97.     WHERE NUMCLI=:OLD.NUMCLI;
  98.  END IF;
  99. END IF;
  100. IF UPDATING THEN
  101.   IF :OLD.DATEFIN IS NULL AND :NEW.DATEFIN IS NOT NULL THEN
  102.     UPDATE CLIENTS SET NBLOCATION = NBLOCATION-1
  103.     WHERE NUMCLI=:OLD.NUMCLI;
  104.   END IF;
  105. END IF;
  106. END;
  107. /
  108.  
  109. /*CREATE OR REPLACE PROCEDURE INSERTION_CLIENT
  110. (NOM VARCHAR, PRENOM VARCHAR)
  111. IS
  112. NUMERO CLIENTS.NUMCLI%TYPE;
  113. NB NUMBER;
  114. VAL NUMBER;
  115. LONGUEUR NUMBER;
  116. BEGIN
  117.     SELECT COUNT(*) INTO NB FROM CLIENTS;
  118.     IF NB = 0 THEN
  119.         NUMERO :='C0001';
  120.     ELSE
  121.         SELECT MAX(TO_NUMBER(SUBSTR(NUMCLI,2,4))) INTO VAL
  122.         FROM CLIENTS;
  123.         VAL := VAL+1;
  124.         LONGUEUR:=LENGTH(VAL);
  125.         CASE LONGUEUR
  126.         WHEN 1 THEN NUMERO:='C000' || VAL;
  127.         WHEN 2 THEN NUMERO:='C00' || VAL;
  128.         WHEN 3 THEN NUMERO:='C0' || VAL;
  129.         WHEN 4 THEN NUMERO:='C' || VAL;
  130.         END CASE;
  131.     END IF;
  132.     INSERT INTO CLIENTS VALUES(NUMERO, NOM, PRENOM,0);
  133. END INSERTION_CLIENT;
  134. /
  135. */
  136.  
  137. CREATE OR REPLACE PROCEDURE INSERTION_CLIENT
  138. (NOM VARCHAR, PRENOM VARCHAR)
  139. IS
  140. LASTID CLIENTS.NUMCLI%TYPE;
  141. BEGIN
  142.   SELECT NVL(MAX(NUMCLI), 0) INTO LASTID FROM CLIENTS;
  143.   LASTID := LASTID + 1;
  144.   INSERT INTO CLIENTS VALUES(LASTID, NOM, PRENOM, 0);
  145. END;
  146. /
  147.  
  148. CREATE OR REPLACE PROCEDURE INSERTION_LOCATION
  149. (NUMEROCLI NUMBER, TYPEVIDEO VARCHAR, NUMEROVIDEO NUMBER)
  150. IS
  151. NB NUMBER;
  152. BEGIN
  153. SELECT COUNT(*) INTO NB FROM LOCATION
  154. WHERE TYPEV = TYPEVIDEO AND NUMERO = NUMEROVIDEO
  155. AND DATEFIN IS NULL;
  156. IF NB = 0 THEN
  157.     INSERT INTO LOCATION (NUMCLI, TYPEV, NUMERO)
  158.     VALUES (NUMEROCLI,TYPEVIDEO,NUMEROVIDEO);
  159. ELSE
  160.     DBMS_OUTPUT.PUT_LINE('ERROR : VIDEO DEJA LOUEE');
  161. END IF;
  162. END;
  163. /
  164.  
  165. CREATE OR REPLACE FUNCTION GET_MONTH_LETTER
  166. (date_input DATE) RETURN VARCHAR
  167. IS
  168. BEGIN
  169.     RETURN(TO_CHAR(date_input, 'Month'));
  170. END;
  171. /
  172.  
  173. SELECT GET_MONTH_LETTER('26/11/2017') FROM dual;
  174.  
  175. CREATE OR REPLACE FUNCTION JOURLETTRE
  176. (DATECHOIX DATE) RETURN VARCHAR
  177. IS
  178.  
  179. BEGIN
  180. RETURN(TO_CHAR(DATECHOIX,'Day'));
  181. END;
  182. /
  183.  
  184. SELECT JOURLETTRE('26/11/2017') FROM dual;
  185.  
  186. /*
  187. CREATE OR REPLACE FUNCTION CALCUL(DATEF DATE)
  188. RETURN NUMBER
  189. IS
  190. NB NUMBER;
  191. BEGIN
  192.     SELECT COUNT(*) INTO NB FROM FACTURE
  193.     WHERE DATEFACT=DATEF;
  194.     RETURN NB;
  195. END CALCUL;
  196. /*/
  197.  SELECT * FROM DUAL;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement