Changes between Version 64 and Version 65 of DatabaseProgramming


Ignore:
Timestamp:
05/20/26 22:26:36 (6 days ago)
Author:
231109
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseProgramming

    v64 v65  
    568568=== Функција 1 : free_seats_trip
    569569
    570 [[Image("Screenshot 2026-05-20 165507.png", 300px)]]
    571 
     570{{{
     571#!sql
     572CREATE OR REPLACE FUNCTION free_seats_trip(
     573    p_trip_id INT
     574)
     575RETURNS INT
     576AS $$
     577DECLARE
     578    v_capacity INT;
     579    v_sold_tickets INT;
     580BEGIN
     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;
     594END;
     595$$ LANGUAGE plpgsql;
     596
     597SELECT free_seats_trip(155);
     598}}}
    572599Оваа функција пресметува колку слободни седишта има на одредено патување. Таа ја зема капацитетот на возот и го одзема бројот на веќе продадени билети за тој trip. Во проектот се користи за проверка на достапност на места пред продажба или резервација на билети.
    573600
    574601=== Функција 2 : get_route_stations
    575602
    576 [[Image("Screenshot 2026-05-20 170403.png", 300px)]]
    577 
     603{{{
     604#!sql
     605CREATE FUNCTION get_route_stations(
     606    p_route_id INT
     607)
     608RETURNS TABLE (
     609    sequence_number INT,
     610    station_name VARCHAR,
     611    city VARCHAR
     612)
     613AS $$
     614BEGIN
     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
     627END;
     628$$ LANGUAGE plpgsql;
     629
     630SELECT * FROM get_route_stations(1);
     631}}}
    578632Оваа функција ги враќа сите станици за одредена рута, подредени по нивниот редослед на движење. Се користи за прикажување на патната линија на возот (од почетна до крајна станица) и за подобро планирање и преглед на патувањата.
    579633
     
    581635=== Функција 3 : get_next_departing_trains
    582636
    583 [[Image("Screenshot 2026-05-20 170830.png", 300px)]]
    584 
     637{{{
     638#!sql
     639CREATE FUNCTION get_next_departing_trains()
     640RETURNS TABLE (
     641    trip_id INT,
     642    train_id INT,
     643    departure_time DATE,
     644    arrival_time DATE,
     645    trip_status VARCHAR
     646)
     647AS $$
     648BEGIN
     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
     661END;
     662$$ LANGUAGE plpgsql;
     663
     664SELECT * FROM get_next_departing_trains();
     665}}}
    585666Оваа функција ги враќа сите следни патувања со воз кои допрва треба да поаѓаат. Ги прикажува подредени по датум на поаѓање, заедно со нивниот статус. Cе користи за преглед на идни патувања и планирање на распоредот на возовите.
    586667
     
    588669=== Функција 4 : get_passenger_total_spending
    589670
    590 [[Image("Screenshot 2026-05-20 171159.png", 300px)]]
    591 
     671{{{
     672CREATE FUNCTION get_passenger_total_spending(
     673    p_embg CHAR(13)
     674)
     675RETURNS NUMERIC AS $$
     676DECLARE
     677    total_spending NUMERIC;
     678BEGIN
     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
     689END;
     690$$ LANGUAGE plpgsql;
     691
     692SELECT get_passenger_total_spending('2509982211077');
     693}}}
    592694Оваа функција го пресметува вкупниот износ што еден патник го потрошил за билети. Ги собира сите износи од плаќањата поврзани со неговиот EMBG. Cе користи за анализа на потрошувачка и увид во финансиската активност на патниците.
    593695