| | 140 | |
| | 141 | === 3. Автоматско логирање и репортирање на промените на цените на производите === |
| | 142 | |
| | 143 | === 3.1 Лог табела === |
| | 144 | |
| | 145 | Табела за ревизија која ги чува информациите за промените на цените, кој, за кој производ, стара и нова цена и кога е извршена промената. |
| | 146 | |
| | 147 | {{{#!sql |
| | 148 | CREATE 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 |
| | 164 | CREATE OR REPLACE FUNCTION stock_management.log_price_change() |
| | 165 | RETURNS TRIGGER AS $$ |
| | 166 | BEGIN |
| | 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; |
| | 175 | END; |
| | 176 | $$ LANGUAGE plpgsql; |
| | 177 | }}} |
| | 178 | |
| | 179 | === 3.3 Тригер === |
| | 180 | |
| | 181 | Тригер која обезбедува функцијата да се активира автоматски пред секое UPDATE на табелата product. |
| | 182 | |
| | 183 | {{{#!sql |
| | 184 | CREATE OR REPLACE TRIGGER trg_price_change |
| | 185 | BEFORE UPDATE ON stock_management.product |
| | 186 | FOR EACH ROW EXECUTE FUNCTION stock_management.log_price_change(); |
| | 187 | }}} |