home *** CD-ROM | disk | FTP | other *** search
/ ftp.disi.unige.it / 2015-02-11.ftp.disi.unige.it.tar / ftp.disi.unige.it / pub / .person / MesitiM / teach / sol9A.txt < prev    next >
Text File  |  2003-05-26  |  2KB  |  71 lines

  1. -- creazione tabella CONTOCORRENTE
  2.  
  3. CREATE TABLE ContoCorrente(
  4.        NumCC int CHECK (NumCC % 2 != 0),
  5.        titolare varchar(16) REFERENCES Persone(CodiceFiscale)
  6.                             ON DELETE CASCADE 
  7.                     ON UPDATE CASCADE,
  8.        saldo decimal(10,2) NOT NULL,
  9.        filiale  int         REFERENCES Filiali(Codice) 
  10.                     ON DELETE NO ACTION 
  11.                     ON UPDATE CASCADE,
  12.        PRIMARY KEY (filiale,NumCC) 
  13. )
  14.  
  15. -- esempi di tuple
  16.  
  17. insert into ContoCorrente values (1,'bdgcgdwer234hd89', 1000, 1);
  18. insert into ContoCorrente values (3,'bdgcgdwer234hd89', 3000, 1);
  19. insert into ContoCorrente values (1,'bdgcgdwer234hd89', 1000, 2);
  20. insert into ContoCorrente values (5,'mdld345er234hd89', 1000, 1);
  21. insert into ContoCorrente values (7,'ndjf0wweos9046hd', 1000, 1);
  22. insert into ContoCorrente values (3,'ndjfyrieos9046hd', 1000, 2);
  23.  
  24.  
  25. -- stored procedure
  26.  
  27. CREATE PROCEDURE Budjet @importo decimal(10,2), @citta varchar(30)
  28. AS 
  29. DECLARE @saldoMedio decimal(10,2)
  30.  
  31. SELECT @saldoMedio =AVG(saldo) 
  32. FROM ContoCorrente 
  33. WHERE filiale IN 
  34.       (SELECT codice 
  35.        FROM Filiali
  36.        WHERE citta = @citta) 
  37.  
  38. IF (@importo < @saldoMedio)
  39.  BEGIN 
  40.    DECLARE @cognome varchar(30)
  41.    DECLARE @nome varchar(30)
  42.    DECLARE @saldo decimal(10,2)
  43.  
  44.    DECLARE ImpCursor CURSOR FOR  
  45.            SELECT Cognome,Nome,saldo
  46.            FROM Persone, ContoCorrente
  47.            WHERE CodiceFiscale = titolare
  48.                   and saldo <= @importo and filiale IN 
  49.                        (SELECT codice 
  50.                         FROM Filiali
  51.                         WHERE citta = @citta)
  52.    OPEN ImpCursor
  53.    
  54.    FETCH NEXT FROM ImpCursor INTO @Cognome, @nome, @saldo
  55.    WHILE (@@FETCH_STATUS = 0)
  56.    BEGIN
  57.       PRINT 'Cognome: ' + @Cognome + ' Nome: ' + @nome + ' saldo: '
  58.            + CAST(@saldo,VARCHAR(20))
  59.       FETCH NEXT FROM ImpCursor INTO @Cognome, @nome, @saldo
  60.    END
  61.    CLOSE ImpCursor
  62.    DEALLOCATE ImpCursor
  63.  END 
  64. ELSE
  65.    UPDATE ContoCorrente
  66.    SET saldo = saldo + 50
  67.    WHERE filiale IN 
  68.          (SELECT codice 
  69.           FROM Filiali
  70.           WHERE citta = @citta)
  71.