-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSQL CURSOR.sql
More file actions
216 lines (170 loc) · 6.07 KB
/
Copy pathSQL CURSOR.sql
File metadata and controls
216 lines (170 loc) · 6.07 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
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
/*
steps to use cursors in SQL:
Declare the Cursor: Declare a cursor and define the SELECT statement that retrieves the result set you want to work with.
Open the Cursor: Open the cursor to start processing the result set. This makes the rows in the result set available for fetching.
Fetch Rows: Use a loop to fetch rows from the cursor one by one. You can perform operations on each row as you fetch it.
Process the Row: Within the loop, access the data in the current row and perform the necessary operations.
Check for Completion: Continue fetching rows until there are no more rows to fetch.
Close the Cursor: Close the cursor after you're done processing the result set. This releases resources.
Deallocate the Cursor: In some cases, you may need to deallocate the cursor explicitly, depending on the SQL platform.
*/
BEGIN
-- STEP ONE : DECLARE THE VARIABLES
DECLARE @CUSTOMERID INT;
DECLARE @FNAME NVARCHAR(40);
DECLARE @CITY NVARCHAR(40);
-- STEP 2 : DECLARE THE CURSOR
DECLARE V_CUSTOMER_CURSOR CURSOR FOR
SELECT Id, FirstName, City
FROM Customer
WHERE Country = 'UK';
-- STEP 3 :OPEN THE CURSOR
OPEN V_CUSTOMER_CURSOR;
-- STEP 4: FETCH THE ROW FROM THE CURSOR
FETCH NEXT FROM V_CUSTOMER_CURSOR
INTO @CUSTOMERID, @FNAME, @CITY;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'CUSTOMER: ' + CAST(@CUSTOMERID AS VARCHAR) +
' => ' + @FNAME + ' FROM ' + @CITY;
FETCH NEXT FROM V_CUSTOMER_CURSOR
INTO @CUSTOMERID, @FNAME, @CITY;
END
-- STEP 5 : CLOSE THE CURSOR
CLOSE V_CUSTOMER_CURSOR;
-- STEP 6 : DEALLOCATE THE CURSOR
DEALLOCATE V_CUSTOMER_CURSOR;
END
----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
SELECT * FROM Product;
/*
BEGIN
-- STEP ONE : DECLARE THE VARIABLES
DECLARE @productid INT;
DECLARE @PRICE NUMERIC(12,2);
DECLARE @COMPANY_NAME NVARCHAR(40);
-- STEP 2 : DECLARE THE CURSOR
DECLARE PRODUCT_CURSOR CURSOR FOR
SELECT P.Id, UnitPrice, CompanyName
FROM Product P, Supplier S
WHERE P.SupplierId = S.Id AND IsDiscontinued = '1' ;
-- STEP 3 :OPEN THE CURSOR
OPEN PRODUCT_CURSOR;
-- STEP 4: FETCH THE ROW FROM THE CURSOR
FETCH NEXT FROM PRODUCT_CURSOR
INTO @productid, @PRICE, @COMPANY_NAME;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'THE PRODUCTS THAT IS DISCOUNTED: ' + CAST(@productid AS VARCHAR) +
'THE PRICE IS => ' + @PRICE + ' FROM THE COMPANY ' + @COMPANY_NAME;
FETCH NEXT FROM PRODUCT_CURSOR
INTO @productid, @PRICE, @COMPANY_NAME;
END
-- STEP 5 : CLOSE THE CURSOR
CLOSE PRODUCT_CURSOR;
-- STEP 6 : DEALLOCATE THE CURSOR
DEALLOCATE PRODUCT_CURSOR;
END
*/
----------------------------------------------------
/*
Q) DECLARE A CURSOR TO FETCH ALL PRODUCTS THAT HAVE DISCOUNTS, ALONG WITH THE PRICE AND THE NAME OF THE COMPANY
*/
------------------------------------------------------------
BEGIN
-- STEP ONE: DECLARE THE VARIABLES
DECLARE @productid INT;
DECLARE @PRICE NUMERIC(12, 2);
DECLARE @COMPANY_NAME NVARCHAR(40);
-- STEP 2: DECLARE THE CURSOR
DECLARE PRODUCT_CURSOR CURSOR FOR
SELECT P.Id, UnitPrice, CompanyName
FROM Product P, Supplier S
WHERE P.SupplierId = S.Id AND IsDiscontinued = '1';
-- STEP 3: OPEN THE CURSOR
OPEN PRODUCT_CURSOR;
-- STEP 4: FETCH THE ROW FROM THE CURSOR
FETCH NEXT FROM PRODUCT_CURSOR
INTO @productid, @PRICE, @COMPANY_NAME;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'THE PRODUCTS THAT ARE DISCOUNTED: ' + CAST(@productid AS VARCHAR) +
' THE PRICE IS => ' + CAST(@PRICE AS VARCHAR) + ' FROM THE COMPANY ' + @COMPANY_NAME;
-- Fetch the next row
FETCH NEXT FROM PRODUCT_CURSOR
INTO @productid, @PRICE, @COMPANY_NAME;
END;
-- STEP 5: CLOSE THE CURSOR
CLOSE PRODUCT_CURSOR;
-- STEP 6: DEALLOCATE THE CURSOR
DEALLOCATE PRODUCT_CURSOR;
END;
-----------------------------------------------------------
/*
q2)
update the fax value from suppliers who are from UK by changing the values from null to not found
*/
---------------------------------------
BEGIN
-- STEP ONE: DECLARE THE VARIABLES
DECLARE @companyname VARCHAR(255);
DECLARE @fax NVARCHAR(255);
-- STEP 2: DECLARE THE CURSOR
DECLARE fax_update_CURSOR CURSOR FOR
SELECT CompanyName, Fax
FROM Supplier
WHERE Country = 'UK' AND Fax IS NULL;
-- STEP 3: OPEN THE CURSOR
OPEN fax_update_CURSOR;
-- STEP 4: FETCH THE ROW FROM THE CURSOR
FETCH NEXT FROM fax_update_CURSOR
INTO @companyname, @fax;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Updating Company: ' + @companyname;
-- Perform the update
UPDATE Supplier
SET Fax = 'NOT FOUND'
WHERE Country = 'UK' AND Fax IS NULL;
-- Fetch the next row
FETCH NEXT FROM fax_update_CURSOR
INTO @companyname, @fax;
END;
-- STEP 5: CLOSE THE CURSOR
CLOSE fax_update_CURSOR;
-- STEP 6: DEALLOCATE THE CURSOR
DEALLOCATE fax_update_CURSOR;
END
select Fax from Supplier where Country = 'UK';
-----------------------------------------------------------------
-- cursor to get the customers that have 555 in their phone number
-------------------------
BEGIN
-- STEP ONE: DECLARE THE VARIABLES
DECLARE @coustomerid INT;
DECLARE @phone nvarchar(20);
DECLARE @name nvarchar(40);
-- STEP 2: DECLARE THE CURSOR
DECLARE ph_Customer_CURSOR CURSOR FOR
SELECT Id, FirstName, Phone
FROM Customer
WHERE Phone like '%555%';
-- STEP 3: OPEN THE CURSOR
OPEN ph_Customer_CURSOR;
-- STEP 4: FETCH THE ROW FROM THE CURSOR
FETCH NEXT FROM ph_Customer_CURSOR
INTO @coustomerid, @phone, @name;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'THE CUSTOMER NAME: ' + @name +
' ID => ' + CAST(@coustomerid AS VARCHAR) + ' THE PHONE NUMBER ' + CAST(@phone AS VARCHAR) ;
-- Fetch the next row
FETCH NEXT FROM ph_Customer_CURSOR
INTO @coustomerid, @phone, @name;
END;
-- STEP 5: CLOSE THE CURSOR
CLOSE ph_Customer_CURSOR;
-- STEP 6: DEALLOCATE THE CURSOR
DEALLOCATE ph_Customer_CURSOR;
END;