-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSQLQuery1.sql
282 lines (211 loc) · 5.26 KB
/
SQLQuery1.sql
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
/* TRIGGERES */
CREATE TABLE PRODUTOS(
IDPRODUTO INT IDENTITY PRIMARY KEY,
NOME VARCHAR(50) NOT NULL,
CATEGORIA VARCHAR(30) NOT NULL,
PRECO NUMERIC(10,2)NOT NULL,
)
GO
CREATE TABLE HISTORICO(
IDOPERACAO INT IDENTITY PRIMARY KEY,
PRODUTO VARCHAR(50) NOT NULL,
CATEGORIA VARCHAR(30) NOT NULL,
PRECOANTIGO NUMERIC(10,2) NOT NULL,
PRECONOVO NUMERIC(10,2) NOT NULL,
DATA DATETIME,
USUARIO VARCHAR(30),
MENSAGEM VARCHAR(100)
)
GO
INSERT INTO PRODUTOS VALUES('LIVRO SQL SERVER','LIVROS',98.00)
INSERT INTO PRODUTOS VALUES('LIVRO ORACLE','LIVROS',50.00)
INSERT INTO PRODUTOS VALUES('LICENÇA POWERCENTER','SOFTWARES',45000.00)
INSERT INTO PRODUTOS VALUES('NOTEBOOK I7','COMPUTADORES',3150.00)
INSERT INTO PRODUTOS VALUES('LIVRO BUSINESS INTELLIGENCE','LIVROS',90.00)
GO
SELECT * FROM PRODUTOS
SELECT * FROM HISTORICO
/* VERIFICANDO O USUARIO DO BANCO */
SELECT SUSER_NAME()
GO
/* TRIGGER DE DADOS - DATA MANIPULATION LANGUAGE */
CREATE TRIGGER TRG_ATUALIZA_PRECO
ON DBO.PRODUTOS
FOR UPDATE
AS
DECLARE @IDPRODUTO INT
DECLARE @PRODUTO VARCHAR(30)
DECLARE @CATEGORIA VARCHAR(10)
DECLARE @PRECO NUMERIC(10,2)
DECLARE @PRECONOVO NUMERIC(10,2)
DECLARE @DATA DATETIME
DECLARE @USUARIO VARCHAR(30)
DECLARE @ACAO VARCHAR(100)
--PRIMEIRO BLOCO
SELECT @IDPRODUTO = IDPRODUTO FROM inserted
SELECT @PRODUTO = NOME FROM inserted
SELECT @CATEGORIA = CATEGORIA FROM inserted
SELECT @PRECO = PRECO FROM deleted
SELECT @PRECONOVO = PRECO FROM inserted
--SEGUNDO BLOCO
SET @DATA = GETDATE()
SET @USUARIO = SUSER_NAME()
SET @ACAO = 'VALOR INSERIDO PELA TRIGGER TRG_ATUALIZA_PRECO'
INSERT INTO HISTORICO
(PRODUTO,CATEGORIA,PRECOANTIGO,PRECONOVO,DATA,USUARIO,MENSAGEM)
VALUES
(@PRODUTO,@CATEGORIA,@PRECO,@PRECONOVO,@DATA,@USUARIO,@ACAO)
PRINT 'TRIGGER EXECUTADA COM SUCESSO'
GO
/* EXECUTANDO UM UPDATE */
UPDATE PRODUTOS SET PRECO = 100.00
WHERE IDPRODUTO = 1
GO
SELECT * FROM PRODUTOS
SELECT * FROM HISTORICO
GO
UPDATE PRODUTOS SET NOME = 'LIVRO C#'
WHERE IDPRODUTO = 1
GO
/* PROGRAMANDO TRIGGER EM UMA COLUNA */
DROP TRIGGER TRG_ATUALIZA_PRECO
CREATE TRIGGER TRG_ATUALIZA_PRECO
ON DBO.PRODUTOS
FOR UPDATE AS
IF UPDATE(PRECO)
BEGIN
DECLARE @IDPRODUTO INT
DECLARE @PRODUTO VARCHAR(30)
DECLARE @CATEGORIA VARCHAR(10)
DECLARE @PRECO NUMERIC(10,2)
DECLARE @PRECONOVO NUMERIC(10,2)
DECLARE @DATA DATETIME
DECLARE @USUARIO VARCHAR(30)
DECLARE @ACAO VARCHAR(100)
--PRIMEIRO BLOCO
SELECT @IDPRODUTO = IDPRODUTO FROM inserted
SELECT @PRODUTO = NOME FROM inserted
SELECT @CATEGORIA = CATEGORIA FROM inserted
SELECT @PRECO = PRECO FROM deleted
SELECT @PRECONOVO = PRECO FROM inserted
--SEGUNDO BLOCO
SET @DATA = GETDATE()
SET @USUARIO = SUSER_NAME()
SET @ACAO = 'VALOR INSERIDO PELA TRIGGER TRG_ATUALIZA_PRECO'
INSERT INTO HISTORICO
(PRODUTO,CATEGORIA,PRECOANTIGO,PRECONOVO,DATA,USUARIO,MENSAGEM)
VALUES
(@PRODUTO,@CATEGORIA,@PRECO,@PRECONOVO,@DATA,@USUARIO,@ACAO)
PRINT 'TRIGGER EXECUTADA COM SUCESSO'
END
GO
UPDATE PRODUTOS SET PRECO = 300.00
WHERE IDPRODUTO = 2
GO
SELECT * FROM HISTORICO
UPDATE PRODUTOS SET NOME = 'LIVRO JAVA'
WHERE IDPRODUTO = 2
GO
/* VARIAVEIS COM SELECT */
SELECT 10 + 10
GO
CREATE TABLE RESULTADO(
IDRESULTADO INT PRIMARY KEY IDENTITY,
RESULTADO INT
)
GO
INSERT INTO RESULTADO VALUES((SELECT 10 + 10))
GO
SELECT * FROM RESULTADO
GO
/* ATRIBUINDO SELECTS A VARIAVEIS - ANONIMO */
DECLARE
@RESULTADO INT
SET @RESULTADO = (SELECT 50 + 50 )
INSERT INTO RESULTADO VALUES(@RESULTADO)
GO
DECLARE
@RESULTADO INT
SET @RESULTADO = (SELECT 50 + 50 )
INSERT INTO RESULTADO VALUES(@RESULTADO)
PRINT 'VALOR INSERIDO NA TABELA: ' + CAST(@RESULTADO AS VARCHAR)
GO
/* TRIGGER UPDATE */
CREATE TABLE EMPREGADO(
IDEMP INT PRIMARY KEY,
NOME VARCHAR(30),
SALARIO MONEY,
IDGERENTE INT
)
GO
ALTER TABLE EMPREGADO ADD CONSTRAINT FK_GERENTE
FOREIGN KEY(IDGERENTE) REFERENCES EMPREGADO(IDEMP)
GO
INSERT INTO EMPREGADO VALUES(1,'CLARA',5000.00,NULL)
INSERT INTO EMPREGADO VALUES(2,'CELIA',4000.00,1)
INSERT INTO EMPREGADO VALUES(3,'JOAO',4000.00,1)
GO
CREATE TABLE HIST_SALARIO(
IDEMPREGADO INT,
ANTIGOSAL MONEY,
NOVOSAL MONEY,
DATA DATETIME
)
GO
CREATE TRIGGER TG_SALARIO
ON DBO.EMPREGADO
FOR UPDATE AS
IF UPDATE(SALARIO)
BEGIN
INSERT INTO HIST_SALARIO
(IDEMPREGADO,ANTIGOSAL,NOVOSAL,DATA)
SELECT D.IDEMP, D.SALARIO,I.SALARIO, GETDATE()
FROM deleted D, inserted I
WHERE D.IDEMP = I.IDEMP
END
GO
UPDATE EMPREGADO SET SALARIO = SALARIO * 1.1
GO
SELECT * FROM EMPREGADO
GO
SELECT * FROM HIST_SALARIO
GO
/* SALARIO ANTIGO, NOVO, DATA E NOME DO EMPREGO */
CREATE TABLE SALARIO_RANGE(
MINSAL MONEY,
MAXSAL MONEY
)
GO
INSERT INTO SALARIO_RANGE VALUES(3000.00,6000.00)
GO
CREATE TRIGGER TG_RANGE
ON DBO.EMPREGADO
FOR INSERT,UPDATE
AS
DECLARE
@MINSAL MONEY,
@MAXSAL MONEY,
@ATUALSAL MONEY
SELECT @MINSAL = MINSAL, @MAXSAL = MAXSAL FROM SALARIO_RANGE
SELECT @ATUALSAL = I.SALARIO
FROM inserted I
IF(@ATUALSAL < @MINSAL)
BEGIN
RAISERROR('SALARIO MENOR QUE O PISO',16,1)
ROLLBACK TRANSACTION
END
IF(@ATUALSAL > @MAXSAL)
BEGIN
RAISERROR('SALARIO MAIOR QUE O TETO',16,1)
ROLLBACK TRANSACTION
END
GO
UPDATE EMPREGADO SET SALARIO = 9000.00
WHERE IDEMP = 1
GO
UPDATE EMPREGADO SET SALARIO = 1000.00
WHERE IDEMP = 1
GO
/* VERIFICANDO O TEXTO DE UMA TRIGGER */
SP_HELPTEXT TG_RANGE
GO