Izjava TRY … CATCH u Transact-SQL otkriva i rješava uvjete pogreške u aplikacijama baze podataka. Ova izjava je kamen temeljac za rukovanje pogreškama u sustavu SQL Server i važan je dio razvijanja robustan aplikacija baze podataka. Pokušajte … CATCH se odnosi na SQL Server počevši od 2008., Azure SQL baze podataka, Azure SQL Data Warehouse i Parallel Data Warehouse.
Uvođenje TRY … CATCH
Pokušajte … CATCH djela dopuštajući vam da odredite dvije Transact-SQL izjave: one koje želite "probati", a drugi koristiti za "uhvatiti" bilo koje pogreške koje bi mogle nastati. Kada se SQL Server susreće s izjavom TRY … CATCH, odmah izvršava izjavu koja je uključena u klauzulu TRY. Ako se TRY izjava uspješno izvrši, SQL Server se pomiče. Međutim, ako izjava TRY generira pogrešku, SQL Server izvršava izjavu CATCH za obradu pogreške graciozno.
Osnovna sintaksa ima ovaj oblik:
BEGIN TRY blok izvoda END TRYBEGIN CATCHsql_statementZAVRŠAVANJE ; Primjer je lako razumjeti upotrebu ove izjave. Zamislite da ste administrator baze podataka o ljudskim resursima koji sadrži tablicu pod nazivom "Zaposlenici", koja sadrži informacije o svakom zaposleniku u vašoj organizaciji. Ta tablica koristi cijeli broj zaposlenika kao primarni ključ. Možete pokušati upotrijebiti izjavu u nastavku kako biste umetnuli novi zaposlenik u svoju bazu podataka: INSERT INTO zaposlenika (id, first_name, last_name, extension)VRIJEDNOSTI (12497, 'Mike', 'Chapple', 4201)
U normalnim okolnostima, ta će izjava dodati red na tablicu zaposlenika. Međutim, ako je zaposlenik s ID-om 12497 već u bazi podataka, umetanje retka krši ograničenje primarnog ključa i dovodi do sljedeće pogreške: Poruka 2627, razina 14, država 1, linija 1Kršenje PRIMARY KEY ograničenja 'PK_employee_id'. Nije moguće umetnuti duplikat ključa u objekt "dbo.employees".Izjava je ukinuta.
Iako ta pogreška pruža informacije potrebne za otklanjanje poteškoća, s njim postoje dva problema. Prvo, poruka je čuvena. To uključuje šifre pogrešaka, brojeve retka i ostale informacije koje je nerazumljiv prosječnom korisniku. Drugo, što je još važnije, uzrokuje da se izjava poništi i može uzrokovati pad aplikacije.Alternativa je zamotati izjavu u izjavi TRY … CATCH, kao što je prikazano ovdje: BEGIN TRYINSERT INTO zaposlenika (id, first_name, last_name, extension)VRIJEDNOSTI (12497, 'Mike', 'Chapple', 4201)END TRYBEGIN CATCHPRINT 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Employee Mail',@recipients = '[email protected]',@body = 'Došlo je do pogreške u stvaranju novog zapisa zaposlenika.',@subject = 'Pogreška dupliciranja zaposlenika ID';ZAVRŠAVANJE
U ovom primjeru sve pogreške koje se javljaju prijavljuju se i korisniku koji izvršava naredbu i e-mail adresu [email protected]. Pogreška prikazana korisniku je: Pogreška: Kršenje PRIMARY KEY ograničenja 'PK_employee_id'. Nije moguće umetnuti duplikat ključa u objekt "dbo.employees".Mail je u redu čekanja.
Aplikacija se nastavlja normalno, omogućujući programeru da obrađuje pogrešku. Korištenje TRY … CATCH izjava je elegantan način za proaktivno otkrivanje i rješavanje pogrešaka koje se javljaju u aplikacijama baza podataka SQL Server. Ako želite saznati više o Strukturiranom jeziku upita, pogledajte Uvod u SQL. Pokušajte … CATCH Primjer
Učenje više