0% found this document useful (0 votes)
16 views

Chapter7 SQL

Uploaded by

Asim Azizov
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views

Chapter7 SQL

Uploaded by

Asim Azizov
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 30

Error Handling

T R A N S A C TI O N S A N D E R R O R H A N D L I N G I N S Q L S E R V E R

Etibar Vazirov
CS instructor at UFAZ
Slides’ credit: Mariam Antona
Topics will be covered
Error handling
Transactions

Concurrency in transactions

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Dataset: Electric bike store
Products

| product_id | product_name | stock | price |


| | | | |

| 1 | Trek Conduit+ - 2016 | 50 | 2999.99 |


| 2 | Sun Bicycles ElectroLite - 2017 | 47 | 1559.99 |
| 3 | Trek Powerfly 8 FS Plus - 2017 | 41 | 4999.99 |
| 4 | Trek Conduit+ - 2018 | 10 | 2799.99 |
| 5 | Trek CrossRip+ - 2018 | 12 | 4499.99 |

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Dataset: Electric bike store
B uy ers

| buyer_id | first_name | last_name | email | phone |


| | | | | |
| 1 | Dylan | Smith | [email protected] | 555888999 |
| 2 | John | Antona | [email protected] | 555111222 |
| 3 | Astrid | Harper | [email protected] | 555000999 |
| 4 | Angus | Brown | [email protected] | 555222012 |
| 5 | David | Elcano | [email protected] | 555602314 |

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Dataset: Electric bike store
Staff

| staff_id | first_name | last_name | email | phone |


| | | | | |
| 1 | Mohammed | Ferrec | [email protected] | 555888111 |
| 2 | Dimitri | Brown | [email protected] | 555012012 |
| 3 | Leila | Merheg | [email protected] | 555999133 |
| 4 | Mateo | Casanovas | [email protected] | 555110996 |
| 5 | Carl | York | [email protected] | 555010011 |

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Dataset: Electric bike store
Orders

| order_id | product_id | buyer_id | staff_id | price | order_date |


| | | | | | |
| 1 | 2 | 1 | 5 | 100 | 1559.99 |
| 2 | 2 | 5 | 5 | 100 | 1559.99 |
| 3 | 5 | 10 | 1 | 100 | 4499.99 |
| 4 | 10 | 3 | 3 | 100 | 2799.99 |
| 5 | 15 | 2 | 7 | 100 | 2299.99 |

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Getting an error
| product_id | product_name | stock | price |
| | | | |
| 19 | Trek Powerfly 5 - 2018 | 15 | 3499.99 |

CONSTRAINT unique_product_name UNIQUE (product_name);

INSERT INTO products (product_name, stock, price)


VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);

Violation of UNIQUE KEY constraint 'unique_product_name'.


Cannot insert duplicate key in object 'dbo.products'.
The duplicate key value is (Trek Powerfly 5 - 2018).

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


The TRY...CATCH syntax
BEGIN TRY
{ sql_statement | statement_block }
END TRY
BEGIN CATCH
[ { sql_statement | statement_block } ]
END CATCH
[ ; ]

Enclose y our statements within the TRY block

Place y our error handling code within the CATCH block

Error in the TRY block -> the CATCH block takes the control

No error in the TRY block -> the CATCH block is skipped

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Example with TRY...CATCH
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
SELECT 'Product inserted correctly!' AS message;
END TRY
BEGIN CATCH
SELECT 'An error occurred! You are in the CATCH block' AS message;
END CATCH

| message |
| |
| An error occurred! You are in the CATCH block |

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Example with TRY...CATCH
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Super new Trek Powerfly', 5, 1499.99);
SELECT 'Product inserted correctly!' AS message;
END TRY
BEGIN CATCH
SELECT 'An error occurred! You are in the CATCH block' AS message;
END CATCH

| message |
| |
| Product inserted correctly! |

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Nesting TRY...CATCH
BEGIN TRY | message |
INSERT INTO products (product_name, stock, price) |-------------------------------------------|
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99); | An error occurred inserting the product! |
SELECT 'Product inserted correctly!' AS message; | You are in the first CATCH block |
END TRY
BEGIN CATCH | message |
SELECT 'An error occurred inserting the product! |-------------------------------------------|
You are in the first CATCH block' AS message; | An error occurred inserting the error! |
BEGIN TRY | You are in the second CATCH block |
INSERT INTO myErrors
VALUES ('ERROR!');
SELECT 'Error inserted correctly!' AS message;
END TRY
BEGIN CATCH
SELECT 'An error occurred inserting the error!
You are in the second CATCH block' AS message;
END CATCH
END CATCH

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Let's practice!
T R A N S A C TI O N S A N D E R R O R H A N D L I N G I N S Q L S E R V E R
Error anatomy and
uncatchable errors
T R A N S A C TI O N S A N D E R R O R H A N D L I N G I N S Q L S E R V E R

Etibar
Miriam Vazirov
Antona
CS instructor at UFAZ
So ware Engineer
Slides’ credit: Mariam Antona
Error anatomy
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);

Msg 2627, Level 14, State 1, Line 1


Violation of UNIQUE KEY constraint 'unique_name'.
Cannot insert duplicate key in object 'dbo.products'.
The duplicate key value is (Trek Powerfly 5 - 2018).

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Error anatomy
Error number

SQL errors: 1 to 49999

Own errors: starting from 50001

select * from sys.messages

| message_id | language_id | severity | ... | text |


| | | | | |
| ... | ... | ... | ... | ... |
| 2627 | 1033 | 14 | ... | Violation of %ls constraint '%.*ls'. Cannot insert duplicate... |
| ... | ... | ... | ... | ... |

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Error anatomy
Severity level

0-10: informational messages


11-16: errors that can be corrected by the user (constraint violation, etc.)
17-24: other errors (so ware problems, fatal errors)

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Error anatomy
State

1: if SQL Server displa ys error


0-255: own errors

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Error anatomy
Line

Procedure

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Uncatchable errors
Severity lower than 11(11-19 are catchable)
Severity of 20 or higher that stop the connection

Compilation errors: objects and columns that don't exist

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Uncatchable errors - Compilation error example
BEGIN TRY
SELECT non_existent_column FROM products;
END TRY
BEGIN CATCH
SELECT 'You are in the CATCH block' AS message;
END CATCH

Msg 207, Level 16, State 1, Line 2


Invalid column name 'non_existent_column'.

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Let's practice!
T R A N S A C TI O N S A N D E R R O R H A N D L I N G I N S Q L S E R V E R
Giving information
about errors
T R A N S A C TI O N S A N D E R R O R H A N D L I N G I N S Q L S E R V E R

Etibar
Miriam Vazirov
Antona
CS instructor at UFAZ
So ware Engineer
Slides’ credit: Mariam Antona
Getting an error - review
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);

Msg 2627, Level 14, State 1, Line 1


Violation of UNIQUE KEY constraint 'unique_name'.
Cannot insert duplicate key in object 'dbo.products'.
The duplicate key value is (Trek Powerfly 5 - 2018).

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Getting an error - review
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
SELECT 'Product inserted correctly!' AS message;
END TRY
BEGIN CATCH
SELECT 'An error occurred! You are in the CATCH block' AS message;
END CATCH

| message |
| |
| An error occurred! You are in the CATCH block |

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Error functions
ERROR_NUMBER() returns the number of the error.

ERROR_SEVERITY() returns the error severity (11-19).

ERROR_STATE() returns the state of the error.

ERROR_LINE() returns the number of the line of the error.

ERROR_PROCEDURE() returns the name of stored procedure/trigger. NULL if there is not stored
procedure/trigger.

ERROR_MESSAGE() returns the text of the error message.

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Error functions - examples
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS Error_number,
ERROR_SEVERITY() AS Error_severity,
ERROR_STATE() AS Error_state,
ERROR_PROCEDURE() AS Error_procedure,
ERROR_LINE() AS Error_line,
ERROR_MESSAGE() AS Error_message;
END CATCH

| Error_number| Error_severity| Error_state| Error_procedure| Error_line| Error_message |


| | | | | | |
| 2627 | 14 | 1 | NULL | 2 | Violation of UNIQUE KEY constraint 'unique_name'... |

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Error functions - examples
Last output

| Error_number| Error_severity| Error_state| Error_procedure| Error_line| Error_message |


| | | | | | |
| 2627 | 14 | 1 | NULL | 2 | Violation of UNIQUE KEY constraint 'unique_name'... |

Original error information

Msg 2627, Level 14, State 1, Line 1


Violation of UNIQUE KEY constraint 'unique_name'. Cannot insert duplicate key in object 'dbo.products'. The duplicate
key value is (Trek Powerfly 5 - 2018).

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Error functions - examples
SELECT ERROR_NUMBER() AS Error_number,
ERROR_SEVERITY() AS Error_severity,
ERROR_STATE() AS Error_state,
ERROR_PROCEDURE() AS Error_procedure,
ERROR_LINE() AS Error_line,
ERROR_MESSAGE() AS Error_message;

| Error_number | Error_severity | Error_state | Error_procedure | Error_line | Error_message |


| | | | | | |
| NULL | NULL | NULL | NULL | NULL | NULL |

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Error functions in nested TRY...CATCH constructs
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
END TRY
BEGIN CATCH
BEGIN TRY
INSERT INTO myErrors
VALUES ('ERROR!')
END TRY
BEGIN CATCH
SELECT 'Outer CATCH block' AS 'Error_from',
ERROR_NUMBER() AS Error_number,
ERROR_MESSAGE() AS Error_message;
END CATCH
END CATCH

| Error_from | Error_number | Error_message |


| | | |
| Outer CATCH block | 8152 | String or binary data would be truncated. |

TRANSACTIONS AND ERROR HANDLING IN SQL SERVER


Let's practice!
T R A N S A C TI O N S A N D E R R O R H A N D L I N G I N S Q L S E R V E R

You might also like