Changes between Version 64 and Version 65 of DatabaseProgramming
- Timestamp:
- 05/20/26 22:26:36 (6 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
DatabaseProgramming
v64 v65 568 568 === Функција 1 : free_seats_trip 569 569 570 [[Image("Screenshot 2026-05-20 165507.png", 300px)]] 571 570 {{{ 571 #!sql 572 CREATE OR REPLACE FUNCTION free_seats_trip( 573 p_trip_id INT 574 ) 575 RETURNS INT 576 AS $$ 577 DECLARE 578 v_capacity INT; 579 v_sold_tickets INT; 580 BEGIN 581 SELECT t.capacity 582 INTO v_capacity 583 FROM "Train Trip" tt 584 JOIN Train t 585 ON tt.Traintrain_id = t.train_id 586 WHERE tt.trip_id = p_trip_id; 587 588 SELECT COUNT(*) 589 INTO v_sold_tickets 590 FROM Ticket 591 WHERE "Train Triptrip_id" = p_trip_id; 592 593 RETURN v_capacity - v_sold_tickets; 594 END; 595 $$ LANGUAGE plpgsql; 596 597 SELECT free_seats_trip(155); 598 }}} 572 599 Оваа функција пресметува колку слободни седишта има на одредено патување. Таа ја зема капацитетот на возот и го одзема бројот на веќе продадени билети за тој trip. Во проектот се користи за проверка на достапност на места пред продажба или резервација на билети. 573 600 574 601 === Функција 2 : get_route_stations 575 602 576 [[Image("Screenshot 2026-05-20 170403.png", 300px)]] 577 603 {{{ 604 #!sql 605 CREATE FUNCTION get_route_stations( 606 p_route_id INT 607 ) 608 RETURNS TABLE ( 609 sequence_number INT, 610 station_name VARCHAR, 611 city VARCHAR 612 ) 613 AS $$ 614 BEGIN 615 616 RETURN QUERY 617 SELECT 618 rs.sequence_number, 619 st.station_name, 620 st.city 621 FROM Route_Segment rs 622 JOIN Station st 623 ON st.station_id = rs.Stationstation_id 624 WHERE rs.Routeroute_id = p_route_id 625 ORDER BY rs.sequence_number; 626 627 END; 628 $$ LANGUAGE plpgsql; 629 630 SELECT * FROM get_route_stations(1); 631 }}} 578 632 Оваа функција ги враќа сите станици за одредена рута, подредени по нивниот редослед на движење. Се користи за прикажување на патната линија на возот (од почетна до крајна станица) и за подобро планирање и преглед на патувањата. 579 633 … … 581 635 === Функција 3 : get_next_departing_trains 582 636 583 [[Image("Screenshot 2026-05-20 170830.png", 300px)]] 584 637 {{{ 638 #!sql 639 CREATE FUNCTION get_next_departing_trains() 640 RETURNS TABLE ( 641 trip_id INT, 642 train_id INT, 643 departure_time DATE, 644 arrival_time DATE, 645 trip_status VARCHAR 646 ) 647 AS $$ 648 BEGIN 649 650 RETURN QUERY 651 SELECT 652 tt.trip_id, 653 tt.Traintrain_id, 654 tt.departure_time, 655 tt.arrival_time, 656 tt.trip_status 657 FROM "Train Trip" tt 658 WHERE tt.departure_time >= CURRENT_DATE 659 ORDER BY tt.departure_time ASC; 660 661 END; 662 $$ LANGUAGE plpgsql; 663 664 SELECT * FROM get_next_departing_trains(); 665 }}} 585 666 Оваа функција ги враќа сите следни патувања со воз кои допрва треба да поаѓаат. Ги прикажува подредени по датум на поаѓање, заедно со нивниот статус. Cе користи за преглед на идни патувања и планирање на распоредот на возовите. 586 667 … … 588 669 === Функција 4 : get_passenger_total_spending 589 670 590 [[Image("Screenshot 2026-05-20 171159.png", 300px)]] 591 671 {{{ 672 CREATE FUNCTION get_passenger_total_spending( 673 p_embg CHAR(13) 674 ) 675 RETURNS NUMERIC AS $$ 676 DECLARE 677 total_spending NUMERIC; 678 BEGIN 679 680 SELECT COALESCE(SUM(pay.amount), 0) 681 INTO total_spending 682 FROM Payment pay 683 JOIN Passenger pas 684 ON pas.PersonEMBG = pay.PassengerPersonEMBG2 685 WHERE pas.PersonEMBG = p_embg; 686 687 RETURN total_spending; 688 689 END; 690 $$ LANGUAGE plpgsql; 691 692 SELECT get_passenger_total_spending('2509982211077'); 693 }}} 592 694 Оваа функција го пресметува вкупниот износ што еден патник го потрошил за билети. Ги собира сите износи од плаќањата поврзани со неговиот EMBG. Cе користи за анализа на потрошувачка и увид во финансиската активност на патниците. 593 695
