-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPractical 9.sql
More file actions
147 lines (99 loc) · 2.95 KB
/
Practical 9.sql
File metadata and controls
147 lines (99 loc) · 2.95 KB
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
USE collgePr1;
CREATE TABLE IF NOT EXISTS STUDENT_24012011080 (
sr_no VARCHAR(20),
name VARCHAR(50),
address VARCHAR(100)
);
INSERT INTO STUDENT_24012011080 VALUES
('10IT48', 'Rakesh', 'Surat'),
('10IT49', 'Dev', 'Vadodara');
SELECT * FROM STUDENT_24012011080;
DELIMITER $$
CREATE PROCEDURE get_student_10IT48()
BEGIN
DECLARE v_sr VARCHAR(20);
DECLARE v_name VARCHAR(50);
DECLARE v_addr VARCHAR(100);
DECLARE no_data INT DEFAULT 0;
-- Exception Handler for "NOT FOUND"
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET no_data = 1;
-- Try retrieving record
SELECT sr_no, name, address
INTO v_sr, v_name, v_addr
FROM STUDENT_24012011080
WHERE sr_no = '10IT48';
-- If no row found
IF no_data = 1 THEN
SELECT 'data not found' AS Message;
ELSE
-- If row exists
SELECT v_sr AS SR_No, v_name AS Name, v_addr AS Address;
END IF;
END$$
DELIMITER ;
CALL get_student_10IT48();
DELIMITER $$
CREATE PROCEDURE demo_too_many_rows()
BEGIN
DECLARE v_name VARCHAR(50);
DECLARE msg TEXT;
-- Handler for “too many rows” (SQLSTATE 21000)
DECLARE CONTINUE HANDLER FOR SQLSTATE '21000'
BEGIN
SET msg = 'Error: TOO MANY ROWS returned. Please refine WHERE condition.';
SELECT msg AS Message;
END;
-- This query must return MULTIPLE rows to trigger the exception
SELECT name INTO v_name
FROM STUDENT_24012011080
WHERE address = 'Surat';
-- If no error
SELECT v_name AS Result;
END$$
DELIMITER ;
INSERT INTO STUDENT_24012011080 VALUES
('10IT50', 'Yash', 'Surat'),
('10IT51', 'Niraj', 'Surat');
CALL demo_too_many_rows();
DROP TABLE IF EXISTS emp_mas_24012011080;
CREATE TABLE emp_mas_24012011080(
emp_no INT PRIMARY KEY,
name VARCHAR(50)
);
INSERT INTO emp_mas_24012011080 VALUES(101, 'Rakesh');
DELIMITER $$
CREATE PROCEDURE demo_pk_violation1()
BEGIN
DECLARE msg TEXT DEFAULT '';
DECLARE EXIT HANDLER FOR SQLSTATE '23000'
BEGIN
SELECT 'Error: Primary key constraint violated (Duplicate emp_no).' AS Message;
END;
-- Try inserting duplicate primary key
INSERT INTO emp_mas_24012011080 VALUES(101, 'Duplicate');
-- This line will run ONLY if no error occurs
SELECT 'Record Inserted Successfully' AS Status;
END$$
DELIMITER ;
CALL demo_pk_violation1();
DELIMITER $$
CREATE PROCEDURE insert_student_with_check(
IN p_sr_no INT,
IN p_name VARCHAR(50),
IN p_address VARCHAR(100)
)
BEGIN
-- Check for invalid input
IF p_sr_no < 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'User-Defined Exception: sr_no cannot be negative';
END IF;
-- If no exception, insert record
INSERT INTO STUDENT_24012011080(sr_no, name, address)
VALUES(p_sr_no, p_name, p_address);
SELECT 'Record inserted successfully' AS Message;
END$$
DELIMITER ;
CALL insert_student_with_check(-5,'Ravi','Surat');
CALL insert_student_with_check(105,'Amit','Baroda');