-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProcs.sql.txt
138 lines (100 loc) · 3.53 KB
/
Procs.sql.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
-------------------------------------------------------------------------------
------------------------ CREATE SOME Stored Procedure -------------------------
-- and use them...
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- USE MEI_TRAB: Changes the database context to the MEI_TRAB database.
--
USE MEI_TRAB
--
-------------------------------------------------------------------------------
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'INSERIR_ENCOMENDA' AND type = 'P')
DROP PROCEDURE INSERIR_ENCOMENDA
GO
-- Insere uma nova encomenda
CREATE PROCEDURE INSERIR_ENCOMENDA
AS
DECLARE @EncId int
DECLARE @MAX_TRY int
DECLARE @NTry int
SET @MAX_TRY = 20; -- Max number of times to try
SET @NTry = 1;
-- try to insert the new Encomenda
WHILE (@NTry <= @MAX_TRY)
BEGIN
Set @NTry = @NTry +1;
-- get next EncId
Select @EncId = Max(EncId) From Encomenda;
IF (@EncId IS NULL)
SET @EncId = 1;
ELSE
SET @EncId = @EncId +1;
-- Inserir encomenda
INSERT INTO Encomenda Values (@EncId, 1000, 'Fernando Pessoa', 'Lisboa');
IF (@@ERROR = 0) -- Success!
BEGIN
-- Inserir linhas da encomenda
INSERT INTO EncLinha Values (@EncId, 111, 'Mensagem', 2500, 2);
INSERT INTO EncLinha Values (@EncId, 131, 'Livro do Desassossego', 3000, 1);
BREAK -- Sucesso, hora de sair!
END
END -- Fim de ciclo
IF ( @NTry > @MAX_TRY)
BEGIN
RAISERROR('Can''t insert the record',16,1 )
ROLLBACK TRANSACTION
END
GO
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'APAGAR_ENCOMENDA' AND type = 'P')
DROP PROCEDURE APAGAR_ENCOMENDA
GO
-- Apaga uma encomenda
CREATE PROCEDURE APAGAR_ENCOMENDA
AS
DECLARE @EncId int
DECLARE @N_Linhas int
-- Obter a quantidade de encomendas
Select @N_Linhas = Count (*) From Encomenda
DECLARE @Random INT, @Upper INT, @Lower INT
-- Limites para a geração de números aleatórios
Set @Lower = 1; -- Menor valor
Set @Upper = @N_Linhas; -- Maior valor
-- Escolher aleatóriamente a linha a apagar
Set @Random = ROUND(((@Upper - @Lower -1)* RAND() + @Lower), 0);
-- Obter o ID da encomenda na linha "Random"
Select @EncId = EncId
from ( SELECT Row_Number() Over (Order By EncId) as N_Linha, [EncID]
FROM Encomenda) AS X
Where N_LInha = @Random
Delete From EncLinha Where EncId = @EncId
Delete From Encomenda Where EncId = @EncId
GO
-- Actualiza uma encomenda
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'ACTUALIZAR_ENCOMENDA' AND type = 'P')
DROP PROCEDURE ACTUALIZAR_ENCOMENDA
GO
CREATE PROCEDURE ACTUALIZAR_ENCOMENDA
AS
DECLARE @EncId int
DECLARE @N_Linhas int
-- Obter a quantidade de encomendas
Select @N_Linhas = Count (*) From Encomenda
DECLARE @Random INT, @Upper INT, @Lower INT
-- Limites para a geração de números aleatórios
Set @Lower = 1; -- Menor valor
Set @Upper = @N_Linhas; -- Maior valor
-- Escolher aleatóriamente a linha a encomendar
Set @Random = ROUND(((@Upper - @Lower -1)* RAND() + @Lower), 0);
-- Obter o ID da encomenda na linha "Random"
Select @EncId = EncId
from ( SELECT Row_Number() Over (Order By EncId) as N_Linha, [EncID]
FROM Encomenda) AS X
Where N_LInha = @Random
-- Alterar o campo Morada para o instante corrente
Update Encomenda
Set Morada = CONVERT(varchar,GETDATE(),121)
Where EncId = @EncId
GO