Changes between Version 6 and Version 7 of AdvancedDatabaseDevelopment


Ignore:
Timestamp:
02/20/26 05:24:24 (4 days ago)
Author:
221181
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedDatabaseDevelopment

    v6 v7  
    138138ORDER BY total_revenue DESC;
    139139}}}
     140
     141=== 3. Автоматско логирање и репортирање на промените на цените на производите ===
     142
     143=== 3.1 Лог табела ===
     144
     145Табела за ревизија која ги чува информациите за промените на цените, кој, за кој производ, стара и нова цена и кога е извршена промената.
     146
     147{{{#!sql
     148CREATE TABLE stock_management.product_price_log (
     149    log_id       SERIAL PRIMARY KEY,
     150    product_id   INT NOT NULL,
     151    product_name VARCHAR(100),
     152    old_price    DECIMAL(12,2),
     153    new_price    DECIMAL(12,2),
     154    changed_by   VARCHAR(50),
     155    changed_at   TIMESTAMP DEFAULT NOW()
     156);
     157}}}
     158
     159=== 3.2 Функција на тригер ===
     160
     161Функција која проверува дали полето unit_price се променила при секое ажурирање во табелата product и ако има промена ги запишува релевантните информации во лог табелата.
     162
     163{{{#!sql
     164CREATE OR REPLACE FUNCTION stock_management.log_price_change()
     165RETURNS TRIGGER AS $$
     166BEGIN
     167    IF NEW.unit_price <> OLD.unit_price THEN
     168        INSERT INTO stock_management.product_price_log
     169            (product_id, product_name, old_price, new_price, changed_by)
     170        VALUES
     171            (OLD.product_id, OLD.name, OLD.unit_price, NEW.unit_price,
     172             current_setting('app.current_user', true));
     173    END IF;
     174    RETURN NEW;
     175END;
     176$$ LANGUAGE plpgsql;
     177}}}
     178
     179=== 3.3 Тригер ===
     180
     181Тригер која обезбедува функцијата да се активира автоматски пред секое UPDATE на табелата product.
     182
     183{{{#!sql
     184CREATE OR REPLACE TRIGGER trg_price_change
     185BEFORE UPDATE ON stock_management.product
     186FOR EACH ROW EXECUTE FUNCTION stock_management.log_price_change();
     187}}}