| 183 | | [[Image("Screenshot 2026-05-20 161953.png", 300px)]] |
| 184 | | |
| | 182 | {{{ |
| | 183 | #!sql |
| | 184 | CREATE OR REPLACE PROCEDURE apply_seasonal_discount(p_route_id INT, p_discount_pct NUMERIC) |
| | 185 | AS $$ |
| | 186 | BEGIN |
| | 187 | UPDATE Ticket |
| | 188 | SET price = price * (1 - p_discount_pct / 100) |
| | 189 | WHERE "Train Triptrip_id" IN ( |
| | 190 | SELECT trip_id FROM "Train Trip" WHERE Routeroute_id = p_route_id |
| | 191 | ); |
| | 192 | |
| | 193 | RAISE NOTICE 'Fares for route % have been reduced by %%%.', p_route_id, p_discount_pct; |
| | 194 | END; |
| | 195 | $$ LANGUAGE plpgsql; |
| | 196 | |
| | 197 | |
| | 198 | CALL apply_seasonal_discount(355, 20); |
| | 199 | |
| | 200 | SELECT t.ticket_id, t.price, t.ticket_status, tt.trip_id, tt.Routeroute_id |
| | 201 | FROM Ticket t |
| | 202 | JOIN "Train Trip" tt ON t."Train Triptrip_id" = tt.trip_id |
| | 203 | WHERE tt.Routeroute_id = 355; |
| | 204 | |
| | 205 | select * from "Train Trip" where Routeroute_id=355; |
| | 206 | }}} |
| 189 | | [[Image("Screenshot 2026-05-20 161643.png", 300px)]] |
| 190 | | |
| | 211 | {{{ |
| | 212 | #!sql |
| | 213 | CREATE OR REPLACE PROCEDURE update_trip_delay(p_trip_id INT, p_delay_mins INT) |
| | 214 | AS $$ |
| | 215 | BEGIN |
| | 216 | UPDATE "Train Trip" |
| | 217 | SET delay_minutes = p_delay_mins, |
| | 218 | trip_status = CASE WHEN p_delay_mins > 0 THEN 'Delayed' ELSE 'On Time' END |
| | 219 | WHERE trip_id = p_trip_id; |
| | 220 | |
| | 221 | IF NOT FOUND THEN |
| | 222 | RAISE EXCEPTION 'Trip with ID % not found.', p_trip_id; |
| | 223 | END IF; |
| | 224 | END; |
| | 225 | $$ LANGUAGE plpgsql; |
| | 226 | |
| | 227 | CALL update_trip_delay(1220, 15); |
| | 228 | |
| | 229 | select * from "Train Trip" where trip_id=1220; |
| | 230 | }}} |
| 195 | | [[Image("Screenshot 2026-05-20 162556.png", 300px)]] |
| 196 | | |
| | 235 | {{{ |
| | 236 | #!sql |
| | 237 | CREATE OR REPLACE PROCEDURE reassign_passengers_to_new_trip(p_cancelled_trip_id INT, p_new_trip_id INT) |
| | 238 | AS $$ |
| | 239 | BEGIN |
| | 240 | UPDATE Ticket |
| | 241 | SET "Train Triptrip_id" = p_new_trip_id, |
| | 242 | ticket_status = 'Reassigned' |
| | 243 | WHERE "Train Triptrip_id" = p_cancelled_trip_id; |
| | 244 | |
| | 245 | UPDATE "Train Trip" |
| | 246 | SET trip_status = 'Cancelled' |
| | 247 | WHERE trip_id = p_cancelled_trip_id; |
| | 248 | |
| | 249 | RAISE NOTICE 'All passengers from % have been transferred to trip %.', p_cancelled_trip_id, p_new_trip_id; |
| | 250 | END; |
| | 251 | $$ LANGUAGE plpgsql; |
| | 252 | |
| | 253 | SELECT ticket_id, "Train Triptrip_id", ticket_status |
| | 254 | FROM Ticket |
| | 255 | WHERE "Train Triptrip_id" = 380477; |
| | 256 | |
| | 257 | SELECT ticket_id, "Train Triptrip_id", ticket_status |
| | 258 | FROM Ticket |
| | 259 | WHERE "Train Triptrip_id" = 200; |
| | 260 | |
| | 261 | CALL reassign_passengers_to_new_trip(380477, 200); |
| | 262 | }}} |
| 201 | | [[Image("Screenshot 2026-05-20 163229.png", 300px)]] |
| 202 | | |
| | 267 | {{{ |
| | 268 | #!sql |
| | 269 | CREATE OR REPLACE PROCEDURE transfer_employee( |
| | 270 | p_embg CHAR(13), |
| | 271 | p_new_company_id INT |
| | 272 | ) |
| | 273 | AS $$ |
| | 274 | BEGIN |
| | 275 | IF NOT EXISTS (SELECT 1 FROM Company WHERE company_id = p_new_company_id) THEN |
| | 276 | RAISE EXCEPTION 'Company ID % does not exist.', p_new_company_id; |
| | 277 | END IF; |
| | 278 | |
| | 279 | UPDATE Employee |
| | 280 | SET Companycompany_id = p_new_company_id |
| | 281 | WHERE PersonEMBG = p_embg; |
| | 282 | |
| | 283 | RAISE NOTICE 'Employee with EMBG % has been successfully transferred to company %.', p_embg, p_new_company_id; |
| | 284 | END; |
| | 285 | $$ LANGUAGE plpgsql; |
| | 286 | |
| | 287 | CALL transfer_employee('2005992333958', 4); |
| | 288 | |
| | 289 | select * from employee where PersonEMBG='2005992333958' |
| | 290 | }}} |
| 207 | | [[Image("Screenshot 2026-05-20 163515.png", 300px)]] |
| 208 | | |
| | 295 | {{{ |
| | 296 | #!sql |
| | 297 | CREATE OR REPLACE PROCEDURE assign_platform_to_trip( |
| | 298 | p_trip_id INT, |
| | 299 | p_platform_id INT, |
| | 300 | p_station_id INT |
| | 301 | ) |
| | 302 | AS $$ |
| | 303 | BEGIN |
| | 304 | UPDATE "Train Trip" |
| | 305 | SET Platformplatform_id = p_platform_id, |
| | 306 | PlatformStationstation_id = p_station_id |
| | 307 | WHERE trip_id = p_trip_id; |
| | 308 | |
| | 309 | IF NOT FOUND THEN |
| | 310 | RAISE EXCEPTION 'Trip with ID % not found.', p_trip_id; |
| | 311 | END IF; |
| | 312 | |
| | 313 | RAISE NOTICE 'Platform % assigned to trip %.', |
| | 314 | p_platform_id, p_trip_id; |
| | 315 | END; |
| | 316 | $$ LANGUAGE plpgsql; |
| | 317 | CALL assign_platform_to_trip(3300, 3, 1084); |
| | 318 | }}} |
| 213 | | [[Image("Screenshot 2026-05-20 164529.png", 300px)]] |
| 214 | | |
| | 323 | {{{ |
| | 324 | #!sql |
| | 325 | CREATE OR REPLACE PROCEDURE change_trip_platform( |
| | 326 | p_trip_id INT, |
| | 327 | p_new_platform_id INT |
| | 328 | ) |
| | 329 | AS $$ |
| | 330 | BEGIN |
| | 331 | UPDATE "Train Trip" |
| | 332 | SET Platformplatform_id = p_new_platform_id |
| | 333 | WHERE trip_id = p_trip_id; |
| | 334 | |
| | 335 | RAISE NOTICE 'Trip % has been transferred to platform %.', p_trip_id, p_new_platform_id; |
| | 336 | END; |
| | 337 | $$ LANGUAGE plpgsql; |
| | 338 | |
| | 339 | |
| | 340 | CALL change_trip_platform(3300, 2); |
| | 341 | |
| | 342 | select * from "Train Trip" where trip_id=3300 |
| | 343 | }}} |