SlideShare a Scribd company logo
1 of 1
Download to read offline
Gestione magazzino                                                                                           Gestione magazzino
                                                                                                                                                                                                                  `       Statement SQL per le tabelle relative al database (schema)
                                                                                                     `       Lo schema che utilizzeremo è il seguente:
                                                                                                                                                                                                                          “ordini”:

                                                                                                             MAGAZZINO (COD_PROD, QTA_DISP, QTA_RIORD)                                                            CREATE TABLE MAGAZZINO
                                                                                                                                                                                                                     ( COD_PROD       NUMERIC(3) NOT NULL,
                                                                                                                                                                                                                        QTA_DISP      NUMERIC(5),
                                                                                                                                                                                                                        QTA_RIORD     NUMERIC(5),
                                                                                                             RIORDINO (COD_PROD, DATA, QTA_ORD)                                                                         PRIMARY KEY (COD_PROD)
                                                                                                                                                                                                                     );
                                                                                                                 FK: COD_PROD REFERENCES MAGAZZINO
                                                                  Basi di Dati                                                                                                                                    CREATE TABLE RIORDINO
                                                                                                                                                                                                                     ( COD_PROD       NUMERIC(3) NOT NULL,
                                                                                                                                                                                                                        DATA          DATE,
                                                                                                                                                                                                                        QTA_ORD       NUMERIC(5),
                           Esercizi di vincoli, procedure e regole attive in SQL                                                                                                                                        PRIMARY KEY (COD_PROD,DATA),
                                                                                                                                                                                                                        FOREIGN KEY (COD_PROD) REFERENCES MAGAZZINO (COD_PROD)
                                                                                                                                                                                                                     );

                                                                                                         2                                                                         Esercizi di vincoli, trigger       3                                                          Esercizi di vincoli, trigger




Gestione magazzino                                                                                   Gestione magazzino                                                                                           Gestione magazzino
                                                                                                     `       Statement SQL per le creazione della procedura prelievo() (versione
`                                                                                                                                                                                                                 `
        Creare una funzione prelievo() per la gestione dei prelievi                                                                                                                                                       Creare un trigger gestione_riordino per gestire
                                                                                                             PL/pgSQL per PostgreSQL):
        da magazzino e degli eventuali riordini di merce. Seguire                                                                                                                                                         automaticamente i seguenti aspetti:
                                                                                                     CREATE FUNCTION prelievo(PROD INTEGER, QUANT INTEGER) RETURNS INTEGER AS $$
        le seguenti specifiche:                                                                                                                                                                                           `   Se si tenta di modificare la quantità disponibile con un numero
                                                                                                        DECLARE
                                                                                                          Q1 INTEGER;
                                                                                                                                                                                                                              negativo (la quantità disponibile in magazzino non è sufficiente
        `   L’utente indica un prelievo dando il codice del prodotto e la                                 Q2 INTEGER;
                                                                                                                                                                                                                              per un prelievo) la procedura si arresta con una eccezione
                                                                                                        BEGIN
            quantità da prelevare                                                                         SELECT QTA_DISP INTO Q1
                                                                                                                                                                                                                          `   Se la nuova quantità disponibile in magazzino è inferiore alla
        `   Viene eseguito il prelievo, modificando la quantità disponibile                               FROM MAGAZZINO
                                                                                                          WHERE COD_PROD = PROD;
                                                                                                                                                                                                                              quantità di riordino si predispone un nuovo ordine d'acquisto.
            in magazzino
                                                                                                               Q2 := Q1 QUANT;
        `   La funzione restituisce la nuova quantità disponibile
                                                                                                               UPDATE MAGAZZINO
                                                                                                               SET QTA_DISP = Q2
                                                                                                               WHERE COD_PROD = PROD;

                                                                                                               RETURN Q2;
                                                                                                             END;
                                                                                                             $$ LANGUAGE 'plpgsql';



    4                                                                 Esercizi di vincoli, trigger       5                                                                         Esercizi di vincoli, trigger       6                                                          Esercizi di vincoli, trigger




Gestione magazzino                                                                                   Gestione magazzino
`       Statement SQL per le creazione del trigger (versione PL/pgSQL per
                                                                                                     `       Per provare la funzione (un esempio):
        PostgreSQL):

CREATE FUNCTION riordino() RETURNS trigger AS $$
     BEGIN
                                                                                                             INSERT INTO MAGAZZINO VALUES (1,150,100);
       IF NEW.QTA_DISP < NEW.QTA_RIORD THEN
                                                                                                             INSERT INTO MAGAZZINO VALUES (3,130,80);
          IF NEW.QTA_DISP < 0 THEN
             RAISE EXCEPTION 'Modifica impossibile';
                                                                                                             INSERT INTO MAGAZZINO VALUES (4,170,50);
          ELSE
             INSERT INTO RIORDINO
                                                                                                             INSERT INTO MAGAZZINO VALUES (5,500,150);
             VALUES(NEW.COD_PROD, CURRENT_DATE, NEW.QTA_RIORD);
          END IF;
       END IF;
                                                                                                             SELECT prelievo(1,70);
       RETURN NEW;
     END;
                                                                                                             SELECT prelievo(3,200);
   $$ LANGUAGE 'plpgsql';


CREATE TRIGGER GESTIONE_RIORDINO
   AFTER UPDATE ON MAGAZZINO
   FOR EACH ROW EXECUTE PROCEDURE riordino();


    7                                                                 Esercizi di vincoli, trigger       8                                                                         Esercizi di vincoli, trigger

More Related Content

Viewers also liked

評量空白表格
評量空白表格評量空白表格
評量空白表格Louisa Li
 
Edades Y Talla En Sindrome De Ovario Poliquistico
Edades Y Talla En Sindrome De Ovario PoliquisticoEdades Y Talla En Sindrome De Ovario Poliquistico
Edades Y Talla En Sindrome De Ovario Poliquisticoremipole
 
I kuma score saver version 1.16
I kuma score saver version 1.16I kuma score saver version 1.16
I kuma score saver version 1.16James Johnson
 
Kumyani: The World's First Ever Data Saving PowerPoint Operating System; Vers...
Kumyani: The World's First Ever Data Saving PowerPoint Operating System; Vers...Kumyani: The World's First Ever Data Saving PowerPoint Operating System; Vers...
Kumyani: The World's First Ever Data Saving PowerPoint Operating System; Vers...James Johnson
 
Souper Boulevard Brawler Demo Version 4.72
Souper Boulevard Brawler Demo Version 4.72Souper Boulevard Brawler Demo Version 4.72
Souper Boulevard Brawler Demo Version 4.72James Johnson
 
Daily vocaloid living season 01 episodes 01 and 02 (the adventures of miku v3...
Daily vocaloid living season 01 episodes 01 and 02 (the adventures of miku v3...Daily vocaloid living season 01 episodes 01 and 02 (the adventures of miku v3...
Daily vocaloid living season 01 episodes 01 and 02 (the adventures of miku v3...James Johnson
 
Ed Article 051109
Ed Article 051109Ed Article 051109
Ed Article 051109ksnow932
 

Viewers also liked (14)

評量空白表格
評量空白表格評量空白表格
評量空白表格
 
Edades Y Talla En Sindrome De Ovario Poliquistico
Edades Y Talla En Sindrome De Ovario PoliquisticoEdades Y Talla En Sindrome De Ovario Poliquistico
Edades Y Talla En Sindrome De Ovario Poliquistico
 
redmarco
redmarcoredmarco
redmarco
 
I kuma score saver version 1.16
I kuma score saver version 1.16I kuma score saver version 1.16
I kuma score saver version 1.16
 
Kumyani: The World's First Ever Data Saving PowerPoint Operating System; Vers...
Kumyani: The World's First Ever Data Saving PowerPoint Operating System; Vers...Kumyani: The World's First Ever Data Saving PowerPoint Operating System; Vers...
Kumyani: The World's First Ever Data Saving PowerPoint Operating System; Vers...
 
Souper Boulevard Brawler Demo Version 4.72
Souper Boulevard Brawler Demo Version 4.72Souper Boulevard Brawler Demo Version 4.72
Souper Boulevard Brawler Demo Version 4.72
 
redinferenciaplanta
redinferenciaplantaredinferenciaplanta
redinferenciaplanta
 
Daily vocaloid living season 01 episodes 01 and 02 (the adventures of miku v3...
Daily vocaloid living season 01 episodes 01 and 02 (the adventures of miku v3...Daily vocaloid living season 01 episodes 01 and 02 (the adventures of miku v3...
Daily vocaloid living season 01 episodes 01 and 02 (the adventures of miku v3...
 
Ed Article 051109
Ed Article 051109Ed Article 051109
Ed Article 051109
 
CAC Program Form
CAC Program FormCAC Program Form
CAC Program Form
 
Sam Versus Cat
Sam Versus CatSam Versus Cat
Sam Versus Cat
 
red_animal
red_animalred_animal
red_animal
 
Tarea 4.5
Tarea 4.5Tarea 4.5
Tarea 4.5
 
reddeinferencia
reddeinferenciareddeinferencia
reddeinferencia
 

More from Bombers Falcoman (20)

Calc Num Prato 04
Calc Num Prato 04Calc Num Prato 04
Calc Num Prato 04
 
Calc Num Prato 03
Calc Num Prato 03Calc Num Prato 03
Calc Num Prato 03
 
Calc Num Prato 02
Calc Num Prato 02Calc Num Prato 02
Calc Num Prato 02
 
Calc Num Prato 01(21.05.09)
Calc Num Prato 01(21.05.09)Calc Num Prato 01(21.05.09)
Calc Num Prato 01(21.05.09)
 
Calc Num Es 13.05.09
Calc Num Es 13.05.09Calc Num Es 13.05.09
Calc Num Es 13.05.09
 
Basi Dati F2
Basi Dati F2Basi Dati F2
Basi Dati F2
 
Basi Dati F1 Bis
Basi Dati F1 BisBasi Dati F1 Bis
Basi Dati F1 Bis
 
Basi Dati E6
Basi Dati E6Basi Dati E6
Basi Dati E6
 
Basi Dati E5
Basi Dati E5Basi Dati E5
Basi Dati E5
 
Basi Dati E3
Basi Dati E3Basi Dati E3
Basi Dati E3
 
Basi Dati E1
Basi Dati E1Basi Dati E1
Basi Dati E1
 
Basi Dati F1
Basi Dati F1Basi Dati F1
Basi Dati F1
 
Basi Dati E2
Basi Dati E2Basi Dati E2
Basi Dati E2
 
Basi Dati E4
Basi Dati E4Basi Dati E4
Basi Dati E4
 
Basi Dati C7
Basi Dati C7Basi Dati C7
Basi Dati C7
 
Basi Dati C Riepilogo
Basi Dati C RiepilogoBasi Dati C Riepilogo
Basi Dati C Riepilogo
 
Basi Dati C5 Es
Basi Dati C5 EsBasi Dati C5 Es
Basi Dati C5 Es
 
Basi Dati C6
Basi Dati C6Basi Dati C6
Basi Dati C6
 
Basi Dati C6 Es
Basi Dati C6 EsBasi Dati C6 Es
Basi Dati C6 Es
 
Basi Dati C5
Basi Dati C5Basi Dati C5
Basi Dati C5
 

Basi Dati F1 Es

  • 1. Gestione magazzino Gestione magazzino ` Statement SQL per le tabelle relative al database (schema) ` Lo schema che utilizzeremo è il seguente: “ordini”: MAGAZZINO (COD_PROD, QTA_DISP, QTA_RIORD) CREATE TABLE MAGAZZINO ( COD_PROD NUMERIC(3) NOT NULL, QTA_DISP NUMERIC(5), QTA_RIORD NUMERIC(5), RIORDINO (COD_PROD, DATA, QTA_ORD) PRIMARY KEY (COD_PROD) ); FK: COD_PROD REFERENCES MAGAZZINO Basi di Dati CREATE TABLE RIORDINO ( COD_PROD NUMERIC(3) NOT NULL, DATA DATE, QTA_ORD NUMERIC(5), Esercizi di vincoli, procedure e regole attive in SQL PRIMARY KEY (COD_PROD,DATA), FOREIGN KEY (COD_PROD) REFERENCES MAGAZZINO (COD_PROD) ); 2 Esercizi di vincoli, trigger 3 Esercizi di vincoli, trigger Gestione magazzino Gestione magazzino Gestione magazzino ` Statement SQL per le creazione della procedura prelievo() (versione ` ` Creare una funzione prelievo() per la gestione dei prelievi Creare un trigger gestione_riordino per gestire PL/pgSQL per PostgreSQL): da magazzino e degli eventuali riordini di merce. Seguire automaticamente i seguenti aspetti: CREATE FUNCTION prelievo(PROD INTEGER, QUANT INTEGER) RETURNS INTEGER AS $$ le seguenti specifiche: ` Se si tenta di modificare la quantità disponibile con un numero DECLARE Q1 INTEGER; negativo (la quantità disponibile in magazzino non è sufficiente ` L’utente indica un prelievo dando il codice del prodotto e la Q2 INTEGER; per un prelievo) la procedura si arresta con una eccezione BEGIN quantità da prelevare SELECT QTA_DISP INTO Q1 ` Se la nuova quantità disponibile in magazzino è inferiore alla ` Viene eseguito il prelievo, modificando la quantità disponibile FROM MAGAZZINO WHERE COD_PROD = PROD; quantità di riordino si predispone un nuovo ordine d'acquisto. in magazzino Q2 := Q1 QUANT; ` La funzione restituisce la nuova quantità disponibile UPDATE MAGAZZINO SET QTA_DISP = Q2 WHERE COD_PROD = PROD; RETURN Q2; END; $$ LANGUAGE 'plpgsql'; 4 Esercizi di vincoli, trigger 5 Esercizi di vincoli, trigger 6 Esercizi di vincoli, trigger Gestione magazzino Gestione magazzino ` Statement SQL per le creazione del trigger (versione PL/pgSQL per ` Per provare la funzione (un esempio): PostgreSQL): CREATE FUNCTION riordino() RETURNS trigger AS $$ BEGIN INSERT INTO MAGAZZINO VALUES (1,150,100); IF NEW.QTA_DISP < NEW.QTA_RIORD THEN INSERT INTO MAGAZZINO VALUES (3,130,80); IF NEW.QTA_DISP < 0 THEN RAISE EXCEPTION 'Modifica impossibile'; INSERT INTO MAGAZZINO VALUES (4,170,50); ELSE INSERT INTO RIORDINO INSERT INTO MAGAZZINO VALUES (5,500,150); VALUES(NEW.COD_PROD, CURRENT_DATE, NEW.QTA_RIORD); END IF; END IF; SELECT prelievo(1,70); RETURN NEW; END; SELECT prelievo(3,200); $$ LANGUAGE 'plpgsql'; CREATE TRIGGER GESTIONE_RIORDINO AFTER UPDATE ON MAGAZZINO FOR EACH ROW EXECUTE PROCEDURE riordino(); 7 Esercizi di vincoli, trigger 8 Esercizi di vincoli, trigger