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 / sol7.txt < prev    next >
Text File  |  2003-05-05  |  9KB  |  342 lines

  1. ESERCIZIO 1
  2. ===========
  3.  
  4.  
  5.  
  6. IF (SELECT AVG(Stipendio) FROM Professori 
  7.     WHERE id IN (SELECT Professore FROM Corsi WHERE Attivato = 1)) < 15000
  8.  
  9.     UPDATE Professori
  10.     SET Stipendio = Stipendio *1.1
  11.     WHERE Id IN (SELECT Professore FROM Corsi WHERE Attivato = 1)
  12.  
  13. ELSE
  14.  
  15.     UPDATE Professori
  16.     SET Stipendio = Stipendio *1.05
  17.     WHERE Id IN (SELECT Professore FROM Corsi WHERE Attivato = 1)
  18.     
  19. SELECT Cognome, Nome, Stipendio FROM Professori 
  20. WHERE id IN (SELECT Professore FROM Corsi WHERE Attivato = 1)
  21. ORDER BY Stipendio
  22.  
  23.  
  24.  
  25. ESERCIZIO 2
  26. ===========
  27.  
  28. DECLARE @Cognome VARCHAR(20)
  29. DECLARE @nome VARCHAR(20)
  30. DECLARE @Stipendio NUMERIC
  31.  
  32. IF (SELECT AVG(Stipendio) FROM Professori 
  33.     WHERE id IN (SELECT Professore FROM Corsi WHERE Attivato = 1)) < 15000
  34.  
  35.     UPDATE Professori
  36.     SET Stipendio = Stipendio *1.1
  37.     WHERE Id IN (SELECT Professore FROM Corsi WHERE Attivato = 1)
  38.  
  39. ELSE
  40.  
  41.     UPDATE Professori
  42.     SET Stipendio = Stipendio *1.05
  43.     WHERE Id IN (SELECT Professore FROM Corsi WHERE Attivato = 1)
  44.     
  45. DECLARE c CURSOR FOR     SELECT Cognome, Nome, Stipendio FROM Professori 
  46.             WHERE id IN (SELECT Professore 
  47.                          FROM Corsi 
  48.                      WHERE Attivato = 1)
  49.             ORDER BY Stipendio
  50.  
  51. OPEN c
  52. FETCH NEXT FROM c INTO @Cognome, @Nome, @Stipendio
  53. WHILE (@@FETCH_STATUS = 0)
  54.     BEGIN
  55.         PRINT 'Cognome: ' + @Cognome + ' Nome: ' + @Nome + 
  56.               ' Stipendio: ' + CAST(@Stipendio AS VARCHAR(20))
  57.         FETCH NEXT FROM c INTO @Cognome, @Nome, @Stipendio
  58.     END
  59. CLOSE c
  60. DEALLOCATE c
  61.  
  62.  
  63. ESERCIZIO 3
  64. ===========
  65.  
  66.  
  67. DECLARE @Max NUMERIC
  68. DECLARE @Nome VARCHAR(20)
  69. DECLARE @Cognome VARCHAR(20)
  70. DECLARE @Stipendio NUMERIC
  71. DECLARE @Scarto NUMERIC
  72.  
  73. SET @Max = (SELECT MAX(Stipendio) FROM Professori 
  74.             WHERE id IN (SELECT Professore 
  75.                      FROM Corsi 
  76.              GROUP BY Professore 
  77.              HAVING COUNT(*) = 1) OR
  78.         id NOT IN (SELECT Professore FROM Corsi))
  79.  
  80. IF @Max > 15000
  81.     UPDATE Professori
  82.     SET Stipendio = Stipendio * 0.85
  83.     WHERE Stipendio = @Max
  84. ELSE
  85.     UPDATE Professori
  86.     SET Stipendio = Stipendio * 0.95
  87.     WHERE Stipendio = @Max
  88.  
  89. DECLARE c CURSOR FOR     SELECT Cognome, Nome, Stipendio, @Max - Stipendio 
  90.             FROM Professori ORDER BY Stipendio DESC
  91.  
  92. OPEN c
  93. FETCH NEXT FROM c INTO @Cognome, @Nome, @Stipendio, @Scarto
  94. WHILE (@@FETCH_STATUS = 0)
  95.     BEGIN
  96.         PRINT 'Cognome: ' + @Cognome + ' Nome: ' + @Nome + 
  97.               ' Stipendio: ' + CAST(@Stipendio AS VARCHAR(10)) + 
  98.               ' Scarto: ' + CAST(@Scarto AS VARCHAR(10))
  99.         FETCH NEXT FROM c INTO @Cognome, @Nome, @Stipendio, @Scarto
  100.     END
  101. CLOSE c
  102. DEALLOCATE c
  103.  
  104.  
  105. ESERCIZIO 4
  106. ===========
  107.  
  108. CREATE PROCEDURE AggiornaStip1
  109. AS
  110. DECLARE @Max NUMERIC
  111. DECLARE @Nome VARCHAR(20)
  112. DECLARE @Cognome VARCHAR(20)
  113. DECLARE @Stipendio NUMERIC
  114. DECLARE @Scarto NUMERIC
  115.  
  116. SET @Max = (SELECT MAX(Stipendio) FROM Professori 
  117.             WHERE id IN (SELECT Professore 
  118.                      FROM Corsi 
  119.              GROUP BY Professore 
  120.              HAVING COUNT(*) = 1) OR
  121.            id NOT IN (SELECT Professore FROM Corsi))
  122.  
  123. IF @Max > 15000
  124.     UPDATE Professori
  125.     SET Stipendio = Stipendio * 0.85
  126.     WHERE Stipendio = @Max
  127. ELSE
  128.     UPDATE Professori
  129.     SET Stipendio = Stipendio * 0.95
  130.     WHERE Stipendio = @Max
  131.  
  132. DECLARE c CURSOR FOR     SELECT Cognome, Nome, Stipendio, @Max - Stipendio 
  133.             FROM Professori ORDER BY Stipendio DESC
  134.  
  135. OPEN c
  136. FETCH NEXT FROM c INTO @Cognome, @Nome, @Stipendio, @Scarto
  137. WHILE (@@FETCH_STATUS = 0)
  138.     BEGIN
  139.         PRINT 'Cognome: ' + @Cognome + ' Nome: ' + @Nome + 
  140.               ' Stipendio: ' + CAST(@Stipendio AS VARCHAR(10)) + 
  141.               ' Scarto: ' + CAST(@Scarto AS VARCHAR(10))
  142.         FETCH NEXT FROM c INTO @Cognome, @Nome, @Stipendio, @Scarto
  143.     END
  144. CLOSE c
  145. DEALLOCATE c
  146.  
  147.  
  148. Esecuzione
  149. ----------
  150.  
  151. EXEC AggiornaStip1
  152.  
  153. ESERCIZIO 5 a)
  154. ==============
  155.  
  156. CREATE PROCEDURE AggiornaStip2 @Perc1 NUMERIC, @Perc2 NUMERIC
  157. AS
  158. DECLARE @Max NUMERIC
  159. DECLARE @Nome VARCHAR(20)
  160. DECLARE @Cognome VARCHAR(20)
  161. DECLARE @Stipendio NUMERIC
  162. DECLARE @Scarto NUMERIC
  163.  
  164. IF @Perc1 >= 0 AND @Perc1 <= 100 AND  @Perc2 >= 0 AND @Perc2 <= 100
  165.     BEGIN
  166.        PRINT 'Parametri corretti'
  167.        SET @Max = (SELECT MAX(Stipendio) FROM Professori 
  168.                     WHERE id IN (SELECT Professore 
  169.                      FROM Corsi 
  170.                  GROUP BY Professore 
  171.                  HAVING COUNT(*) = 1) OR
  172.               id NOT IN (SELECT Professore FROM Corsi))
  173.  
  174.         IF @Max > 15000
  175.         UPDATE Professori
  176.         SET Stipendio = Stipendio * (1 - @Perc1/100)
  177.         WHERE Stipendio = @Max
  178.         ELSE
  179.         UPDATE Professori
  180.         SET Stipendio = Stipendio * (1 - @Perc2/100)
  181.         WHERE Stipendio = @Max
  182.  
  183.         DECLARE c CURSOR FOR SELECT Cognome, Nome, Stipendio, @Max - Stipendio 
  184.                  FROM Professori ORDER BY Stipendio DESC
  185.  
  186.         OPEN c
  187.         FETCH NEXT FROM c INTO @Cognome, @Nome, @Stipendio, @Scarto
  188.         WHILE (@@FETCH_STATUS = 0)
  189.         BEGIN
  190.            PRINT 'Cognome: ' + @Cognome + ' Nome: ' + @Nome + 
  191.                  ' Stipendio: ' +  CAST(@Stipendio AS VARCHAR(10)) + 
  192.              ' Scarto: ' + CAST(@Scarto AS VARCHAR(10))
  193.            FETCH NEXT FROM c INTO @Cognome, @Nome, @Stipendio, @Scarto
  194.         END
  195.         CLOSE c
  196.         DEALLOCATE c
  197.     END
  198. ELSE
  199.     PRINT 'Parametri non corretti'
  200.  
  201. Esecuzione
  202. ----------
  203.  
  204. EXEC AggiornaStip2 20,40
  205.  
  206.  
  207.  
  208. ESERCIZIO 5 b)
  209. ==============
  210.  
  211. CREATE PROCEDURE CambiaDenCorso @Den_old VARCHAR(20), @Den_new VARCHAR(20)
  212. AS
  213. IF NOT EXISTS (SELECT * FROM Corsi WHERE Denominazione = @Den_old) AND 
  214.                @Den_old NOT IN (SELECT * FROM ErroriCorsi)
  215.     INSERT INTO ErroriCorsi
  216.     VALUES (@Den_old)
  217. ELSE
  218.     UPDATE Corsi
  219.     SET Denominazione = @Den_new
  220.     WHERE Denominazione = @Den_old
  221.  
  222. Esecuzione
  223. ----------
  224.  
  225. EXEC CambiaDenCorso 'Fisica 1', 'Fisica'
  226.  
  227.  
  228.  
  229. ESERCIZIO 6 a)
  230. ==============
  231.  
  232.  
  233. CREATE PROCEDURE AggiornaStip3 @Perc1 NUMERIC, @Perc2 NUMERIC, @Result NUMERIC OUTPUT
  234. AS
  235.  
  236. DECLARE @Nome VARCHAR(20)
  237. DECLARE @Cognome VARCHAR(20)
  238. DECLARE @Stipendio NUMERIC
  239. DECLARE @Scarto NUMERIC
  240.  
  241. IF @Perc1 >= 0 AND @Perc1 <= 100 AND  @Perc2 >= 0 AND @Perc2 <= 100
  242.     BEGIN
  243.         PRINT 'Parametri corretti'
  244.         SET @Result = (SELECT MAX(Stipendio) FROM Professori 
  245.                         WHERE id IN (SELECT Professore FROM Corsi 
  246.                              GROUP BY Professore 
  247.                      HAVING COUNT(*) = 1) OR
  248.                 id NOT IN (SELECT Professore FROM Corsi))
  249.  
  250.  
  251.         IF @Result > 15000
  252.             UPDATE Professori
  253.             SET Stipendio = Stipendio * (1 - @Perc1/100)
  254.             WHERE Stipendio = @Result
  255.         ELSE
  256.             UPDATE Professori
  257.             SET Stipendio = Stipendio * (1 - @Perc2/100)
  258.             WHERE Stipendio = @Result
  259.  
  260.         DECLARE c CURSOR FOR     SELECT Cognome, Nome, Stipendio, @Result - Stipendio 
  261.                     FROM Professori ORDER BY Stipendio DESC
  262.  
  263.         OPEN c
  264.         FETCH NEXT FROM c INTO @Cognome, @Nome, @Stipendio, @Scarto
  265.         WHILE (@@FETCH_STATUS = 0)
  266.           BEGIN
  267.             PRINT 'Cognome: ' + @Cognome + ' Nome: ' + @Nome + 
  268.                   ' Stipendio: ' +  CAST(@Stipendio AS VARCHAR(10)) + 
  269.                   ' Scarto: ' + CAST(@Scarto AS VARCHAR(10))
  270.             FETCH NEXT FROM c INTO @Cognome, @Nome, @Stipendio, @Scarto
  271.           END
  272.         CLOSE c
  273.         DEALLOCATE c
  274.     END
  275. ELSE
  276.     PRINT 'Parametri non corretti'
  277.  
  278. Esecuzione
  279. ----------
  280.  
  281. DECLARE @My_Res NUMERIC
  282. EXEC AggiornaStip3 20,40, @Result = @My_Res OUTPUT
  283. PRINT 'Stipendio Massimo: ' + CAST(@My_Res AS VARCHAR(10))
  284.  
  285.  
  286.  
  287. ESERCIZIO 6 b)
  288. ==============
  289.  
  290. CREATE PROCEDURE ListaLaureati @Data Datetime, @Num INTEGER OUTPUT
  291. AS
  292.  
  293. DECLARE @Nome VARCHAR(20)
  294. DECLARE @Cognome VARCHAR(20)
  295. DECLARE @DataLaurea Datetime
  296.  
  297. DECLARE c CURSOR FOR     SELECT Nome, Cognome, DataLaurea
  298.             FROM Studenti, Laureati
  299.             WHERE Matricola = MatricolaS AND DataLaurea > @Data
  300.             ORDER BY DataLaurea
  301. OPEN c
  302. FETCH NEXT FROM c INTO @Nome, @Cognome, @DataLaurea
  303. WHILE (@@FETCH_STATUS = 0)
  304.     BEGIN
  305.         PRINT  'Nome: ' + @Nome + ' Cognome: ' + @Cognome + ' Data Laurea: '  + 
  306.                 CAST(@DataLaurea AS VARCHAR(10))
  307.         FETCH NEXT FROM c INTO @Nome, @Cognome, @DataLaurea
  308.     END
  309.  
  310. CLOSE C
  311. DEALLOCATE C
  312. SET @Num = (SELECT COUNT(*) 
  313.             FROM Studenti, Laureati
  314.             WHERE Matricola = MatricolaS AND DataLaurea > @Data)
  315.  
  316. Esecuzione
  317. -----------
  318. DECLARE @My_Num NUMERIC
  319. EXEC ListaLaureati '5/22/99', @Num = @My_Num OUTPUT
  320. PRINT 'Numero di laureati: ' + CAST(@My_Num AS VARCHAR(10))
  321.  
  322.  
  323. ESERCIZIO 7
  324. ===========
  325.  
  326. CREATE PROCEDURE InserisciEsame1 @Matr VARCHAR, @Corso VARCHAR, @Data datetime, @Voto INTEGER
  327. AS
  328. INSERT INTO Esami
  329. VALUES (@Matr, @Corso, @Data, @Voto)
  330. IF @@ERROR <> 0
  331.     PRINT 'Errore generato: ' + @@ERROR
  332.  
  333. ESERCIZIO 8
  334. ===========
  335. CREATE PROCEDURE InserisciEsame2 @Matr1 VARCHAR, @Corso1 VARCHAR, @Voto1 INTEGER
  336. AS
  337. declare @d datetime
  338. set @d = GETDATE()
  339. EXEC InserisciEsame1 @Matr1, @Corso1, @d, @Voto1
  340.  
  341.  
  342.