-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy path11_ErrorHandling.sql
336 lines (173 loc) · 5.3 KB
/
11_ErrorHandling.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
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
-- Hata Mesajlarý
INSERT INTO Production.Product(Name, ProductNumber)
VALUES('Test Ürün','AR-5388');
SELECT * FROM sys.messages;
SELECT * FROM sys.messages WHERE message_id = 515;
SELECT * FROM sys.messages WHERE message_id = 515 AND language_id = 1033;
SELECT * FROM sys.messages WHERE message_id = 515 AND language_id = 1055;
-- Mesajlarý Görüntülemek
SELECT * FROM sys.messages;
SELECT * FROM SYS.Messages ORDER BY Message_ID DESC;
sp_addmessage @msgnum = 'mesaj_kod',
@severity = 'seviye',
@msgtext = 'mesaj',
@with_log = 'true'|'false',
@lang = 'dil_kod',
@replace = ''
sp_addmessage @msgnum = '50006',
@severity = 10,
@msgtext = 'Geçerli bir ürün numarasý giriniz',
@with_log = 'true';
SELECT * FROM SYS.Messages WHERE Message_ID = 50006;
-- Parametreli Hata Mesajý Tanýmlamak
sp_addmessage @msgnum = 50002,
@severity = 11,
@msgtext = '%d adet ürün %s kullanýcýsý tarafýndan silindi.',
@with_log = 'true'
-- Mesaj Silmek
sp_dropmessage 50001
-- Oluþan Son Hatanýn Kodunu Yakalamak : @@ERROR
DECLARE @deadline INT, @hataKod INT;
SET @deadline = 0
SELECT DaysToManufacture / @deadline
FROM Production.Product
WHERE ProductID = 921
SET @hataKod = @@ERROR
IF @@ERROR <> 8134
BEGIN
PRINT CAST(@hataKod AS VARCHAR) + ' No''lu sýfýra bölünme hatasý.';
END
ELSE IF @@ERROR <> 0
BEGIN
PRINT CAST(@hataKod AS VARCHAR) + ' No''lu bilinmeyen bir hata oluþtu.';
END;
CREATE PROC pr_HataGoster(
@hataKod INT,
@dilKod INT
)
AS
BEGIN
DECLARE @text VARCHAR(100);
SELECT @text = Text FROM sys.messages
WHERE message_id = @hataKod AND language_id = @dilKod;
PRINT @text;
END;
EXEC pr_HataGoster 8134, 1055;
DECLARE @deadline INT, @hataKod INT, @dilKod INT
SET @deadline = 0
SELECT DaysToManufacture / @deadline FROM Production.Product
WHERE ProductID = 921
SET @hataKod = @@ERROR;
SET @dilKod = 1055; -- Türkçe dil kodu
IF @@ERROR <> 8134
BEGIN
-- Sýfýra bölünme hatasýnýn Türkçe açýklamasýný getirir.
EXEC pr_HataGoster @hataKod, @dilKod
END
ELSE IF @@ERROR <> 0
BEGIN
-- Hangi hata gerçekleþirse o hatanýn Türkçe açýklamasýný getirir.
EXEC pr_HataGoster @hataKod, @dilKod
END;
-- Stored Procedure Ýçerisinde @@ERROR Kullanýmý
CREATE PROCEDURE HumanResources.pr_DeleteCandidate(
@CanID INT
)
AS
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = @CanID;
IF @@ERROR <> 0
BEGIN
-- Baþarýsýz olduðunu göstermek için 99 döndürür.
PRINT N'Aday silme iþleminde bir hata oluþtu.';
RETURN 99;
END
ELSE
BEGIN
-- Baþarýlý olduðunu göstermek için 0 döndürür.
PRINT N'Ýþ adayý silindi.';
RETURN 0;
END;
-- RAISERROR Ýfadesi
RAISERROR('Mevcut bir ürünü eklemeye çalýþýyorsunuz.', 10, 1);
RAISERROR('Mevcut bir ürünü eklemeye çalýþýyorsunuz.', 16, 1);
DECLARE @DBID INT;
DECLARE @DBNAME NVARCHAR(128);
SET @DBID = DB_ID();
SET @DBNAME = DB_NAME();
RAISERROR
(N'Þu anki veritabaný ID deðeri: %d ve veritabaný adý: %s.',
10, -- Þiddet.
1, -- Durum.
@DBID, -- Ýlk argüman.
@DBNAME); -- Ýkinci argüman.
DECLARE @DBID INT;
DECLARE @DBNAME NVARCHAR(128);
SET @DBID = DB_ID();
SET @DBNAME = DB_NAME();
RAISERROR
(N'Þu anki veritabaný ID deðeri: %d ve veritabaný adý: %s. Coder : %s',
10, -- Þiddet.
1, -- Durum.
@DBID, -- Ýlk argüman.
@DBNAME, -- Ýkinci argüman.
'Cihan Özhan'); -- Üçüncü argüman.
EXECUTE sp_addmessage
50007,
10,
N'Þu anki veritabaný ID deðeri: %d ve veritabaný adý: %s.';
DECLARE @DBID INT;
SET @DBID = DB_ID();
DECLARE @DBNAME NVARCHAR(128);
SET @DBNAME = DB_NAME();
RAISERROR (50007, 10, 1, @DBID, @DBNAME);
-- THROW Ýfadesi
THROW 50001, 'Ürün ekleme sýrasýnda bir hata meydana geldi.', 5;
USE tempdb;
GO
CREATE TABLE dbo.Deneme_Tablo
(
sutun_1 int NOT NULL PRIMARY KEY,
sutun_2 int NULL
);
BEGIN TRY
TRUNCATE TABLE dbo.Deneme_Tablo;
INSERT dbo.Deneme_Tablo VALUES(1, 1);
PRINT 'Ýlk Ekleme Sonrasý';
-- Msg 2627, Level 14, State 1 - PRIMARY KEY kýsýtlama ihlali
INSERT dbo.Deneme_Tablo VALUES(1, 1);
PRINT 'Ýkinci Ekleme Sonrasý';
END TRY
BEGIN CATCH
PRINT 'Gerekirse burada istisna iþlenebilir ve fýrlatýlabilir.';
THROW;
END CATCH;
SELECT * FROM Deneme_Tablo;
-- Hata Kontrolü ve TRY-CATCH
DECLARE @sayi1 INT = 5
DECLARE @sayi2 INT = 0
DECLARE @sonuc INT
BEGIN TRY
SET @sonuc = @sayi1 / @sayi2
END TRY
BEGIN CATCH
PRINT CAST(@@ERROR AS VARCHAR) + ' no lu hata oluþtu'
END CATCH;
SELECT * FROM sys.messages WHERE message_id = 8134 AND language_id = 1055;
CREATE PROCEDURE pr_HataBilgisiGetir
AS
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
DECLARE @sayi1 INT = 5
DECLARE @sayi2 INT = 0
DECLARE @sonuc INT
BEGIN TRY
SET @sonuc = @sayi1 / @sayi2
END TRY
BEGIN CATCH
EXECUTE pr_HataBilgisiGetir;
END CATCH;