Advertisement
Kimossab

SIBD - Exame 2015

Jul 12th, 2015
565
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.89 KB | None | 0 0
  1. /*
  2.         NOTEPAD MASTER RACE
  3.  
  4.         Nao tenho a certeza de nada.
  5.  
  6.     Há varias formas de fazer o mesmo.
  7. */
  8. /*P1
  9. a)*/
  10. UPDATE b_Prescrições
  11.     SET Nmedicamento = (SELECT NM FROM b_Medicamentos WHERE principio_ativo LIKE 'xpto'), Dosagem = Dosagem*2
  12.     WHERE periodicidade > 6 AND
  13.         NP IN (SELECT NP FROM b_Internamentos I JOIN b_Precrições P ON I.NI = P.Ninternamento JOIN b_Medicamentos M ON P.Nmedicamento = M.NM WHERE adm_inicio < DATEADD(DAY,-7,getdate()) AND M.Designação LIKE 'xyz')
  14.  
  15. /*b)*/
  16. SELECT COUNT(*), AVG(DATEDIFF(DAY, adm_inicio,adm_fim)), Designação, Nenfermaria, DATEPART(YEAR,adm_inicio)
  17.     FROM b_Prescriçoes P JOIN b_Internamentos I
  18.         ON I.NI = P.Ninternamento JOIN b_Especialidade E
  19.             ON I.Nespecialidade = E.NE
  20.     WHERE DATEPART(YEAR,adm_inicio) > 2000 AND
  21.         DATEPART(YEAR,adm_inicio) < 2014 AND
  22.         I.NI IN (SELECT NI FROM b_Internamentos JOIN b_Prescrições P ON I.NI = P.Ninternamento GROUP BY NI HAVING COUNT(*) > 1)
  23.     GROUP BY Designação, Nenfermaria, DATEPART(YEAR,adm_inicio)
  24.  
  25. /*c)*/
  26. SELECT Nome, Designação
  27.     FROM b_Doentes D JOIN b_Internamentos I
  28.         ON D.ND = I.Ndoente JOIN b_Especialidades E
  29.             ON I.Nespecialiadde = E.NE
  30.     WHERE DATEDIFF(DAY, adm_inicio,getdate()) < 3 AND
  31.         D.ND IN (SELECT ND FROM b_Doentes JOIN b_Internamentos ON ND = Ndoente WHERE DATEDIFF(DAY, adm_inicio,adm_fim) > 7)
  32.  
  33. /*
  34. P2
  35. a)
  36. */
  37. CREATE TRIGGER ltrig
  38. ON b_Prescrições
  39. INSTEAD OF INSERT
  40. AS
  41. BEGIN
  42.         IF (SELECT COUNT(*) FROM INSERTED) == 1
  43.         BEGIN
  44.         DECLARE @NP INT,
  45.             @dias INT,
  46.             @dose INT,
  47.             @adm DATE,
  48.             @idk INT,
  49.             @amr DATE,
  50.             @estado CHAR(1),
  51.             @Nmed INT,
  52.             @Nint INT,
  53.             @NOmed INT,
  54.             @perid INT
  55.  
  56.         SELECT @NP = NP,
  57.             @dias = Dias_prescrição,
  58.             @dose = Dosagem,
  59.             @adm = Adm_inicio,
  60.             @idk = idk,
  61.             @amr = adm+recente,
  62.             @estado = estado,
  63.             @Nmed = Nmedicamento,
  64.             @Nint = Ninternamento,
  65.             @NOmed = NOMedico,
  66.             @perid = periodicidade
  67.         FROM INSERTED
  68.  
  69.         IF @Nmed IN (SELECT Nmedicamento FROM b_Prescrições WHERE Ninternamento = @Nint AND Estado = 'A') OR
  70.             (SELECT Data_saida FROM b_Internamentos WHERE NI = @Nint) NOT NULL
  71.             RAISERROR('Inserção Inválida.',11,1)
  72.         ELSE
  73.             INSERT INTO b_Prescrições VALUES(@NP,@dias,@dose,@adm,@idk,@amr,@estado,@Nmed,@Nint,@NOmed,@perid)
  74.     END
  75.     ELSE
  76.                 RAISERROR('Apenas um movimento por favor.',11,1)
  77. END
  78.  
  79. /*b*/
  80. CREATE PROCEDURE saida
  81.     @ND INT,
  82.     @nome VARCHAR(150)
  83. AS
  84. BEGIN
  85.     DECLARE @aux INT
  86.     SELECT @aux = NI FROM b_Internamentos I JOIN b_Doentes D ON I.Ndoente = D.ND WHERE ND = @ND AND Nomed LIKE @nome
  87.     IF @aux IS NOT NULL
  88.         PRINT 'Doente internado.'
  89.     ELSE
  90.                 RAISERROR('Doente não internado.',11,1)
  91.  
  92.     UPDATE b_Internamentos SET Data_saida = getdate() WHERE NI = @aux
  93.     UPDATE b_Prescrições SET estado = 'T' WHERE Ninternamento = @aux
  94.     DELETE FROM b_Macação_Exames WHERE ND = @ND AND Data_hora > getdate()
  95. END
  96.  
  97. EXEC saida 1, 'José'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement