Advertisement
fenix15100

Triggers Facturas

Apr 6th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 6.01 KB | None | 0 0
  1. --1
  2.  
  3. CREATE OR REPLACE FUNCTION stock() RETURNS TRIGGER AS'
  4.  
  5.    
  6. BEGIN
  7.  
  8. UPDATE articulos set stock=stock-new.cant where codart=new.codart;
  9.  
  10.  
  11.  
  12. RETURN NEW;
  13. END;
  14. 'LANGUAGE 'plpgsql';
  15.  
  16. DROP TRIGGER tgrstock ON lineas_fac;
  17. CREATE TRIGGER tgrstock
  18.     AFTER INSERT ON lineas_fac
  19.     FOR EACH ROW
  20.     EXECUTE PROCEDURE stock();
  21.    
  22.    
  23.  
  24. --2
  25.  
  26. CREATE OR REPLACE FUNCTION stock_min() RETURNS TRIGGER AS'
  27. DECLARE
  28.     ext INTEGER;
  29.     st_min INTEGER;
  30. BEGIN
  31.  
  32. SELECT stock,stock_min into ext,st_min from articulos where codart=new.codart;
  33.  
  34. IF(ext<=st_min) THEN
  35.     RAISE NOTICE ''El producto % esta al limite o por debajo del stock permitido (%) '',new.codart,ext;
  36. END IF;
  37.  
  38.  
  39.  
  40.  
  41. RETURN NEW;
  42. END;
  43. 'LANGUAGE 'plpgsql';
  44.  
  45. DROP TRIGGER tgrstock_min ON articulos;
  46. CREATE TRIGGER tgrstock_min
  47.     AFTER UPDATE ON articulos
  48.     FOR EACH ROW
  49.     EXECUTE PROCEDURE stock_min();
  50.    
  51. --3
  52.  
  53. CREATE OR REPLACE FUNCTION venta() RETURNS TRIGGER AS'
  54. DECLARE
  55.     ext INTEGER;
  56.    
  57. BEGIN
  58.  
  59. SELECT stock into ext from articulos where codart=new.codart;
  60.  
  61. IF(new.cant>ext) THEN
  62.     RAISE EXCEPTION ''El pedido supera el Stock disponible para el producto % venta rechazada'',new.codart;
  63. END IF;
  64.  
  65.  
  66.  
  67.  
  68. RETURN NEW;
  69. END;
  70. 'LANGUAGE 'plpgsql';
  71.  
  72. DROP TRIGGER tgrventa ON lineas_fac;
  73. CREATE TRIGGER tgrventa
  74.     BEFORE INSERT ON lineas_fac
  75.     FOR EACH ROW
  76.     EXECUTE PROCEDURE venta();
  77.  
  78.  
  79. --4
  80.  
  81. CREATE OR REPLACE FUNCTION dto() RETURNS TRIGGER AS'
  82. DECLARE
  83.    
  84.    
  85. BEGIN
  86.  
  87.  
  88. IF(new.dto>=0 and new.dto<=50) THEN
  89.     RETURN NEW;
  90.    
  91. ELSE
  92.     RAISE EXCEPTION ''El DTO que se quiere aplicar a la venta no es valido para el sistema (%)'',new.dto;
  93.    
  94. END IF;
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101. END;
  102. 'LANGUAGE 'plpgsql';
  103.  
  104. DROP TRIGGER tgrdto ON lineas_fac;
  105. CREATE TRIGGER tgrdto
  106.     BEFORE INSERT ON lineas_fac
  107.     FOR EACH ROW
  108.     EXECUTE PROCEDURE dto();
  109.  
  110.  
  111. --5
  112. CREATE OR REPLACE FUNCTION iva() RETURNS TRIGGER AS'
  113. DECLARE
  114.    
  115.    
  116. BEGIN
  117.  
  118.  
  119. IF(new.iva>=0) THEN
  120.     RETURN NEW;
  121.    
  122. ELSE
  123.     RAISE EXCEPTION ''El IVA de una factura no puede ser negativo (%)'',new.codfac;
  124.    
  125. END IF;
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132. END;
  133. 'LANGUAGE 'plpgsql';
  134.  
  135. DROP TRIGGER tgriva ON facturas;
  136. CREATE TRIGGER tgriva
  137.     BEFORE INSERT ON facturas
  138.     FOR EACH ROW
  139.     EXECUTE PROCEDURE iva();
  140.  
  141. --6
  142.  
  143.  
  144. CREATE OR REPLACE FUNCTION fecha() RETURNS TRIGGER AS'
  145.    
  146.  
  147. BEGIN
  148.  
  149.  
  150. IF(new.fecha>current_date) THEN
  151.     RAISE EXCEPTION''La fecha introducida % es superior a la actual'',new.fecha;
  152. END IF;
  153.  
  154. RETURN NEW;
  155.  
  156.  
  157.  
  158.    
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165. END;
  166. 'LANGUAGE 'plpgsql';
  167.  
  168. DROP TRIGGER tgrfecha ON facturas;
  169. CREATE TRIGGER tgrfecha
  170.     BEFORE INSERT ON facturas
  171.     FOR EACH ROW
  172.     EXECUTE PROCEDURE fecha();
  173.  
  174.  
  175. --7. La quantitat d'articles demanats en una factura no pot ser 0 ni inferior
  176.  
  177. CREATE OR REPLACE FUNCTION arti() RETURNS TRIGGER AS'
  178.    
  179.  
  180. BEGIN
  181.  
  182.  
  183. IF(new.cant<=0) THEN
  184.     RAISE EXCEPTION''El pedido de la linea % de la factura % tiene una cantidad de 0 o inferior, venta rechazada'',new.linea,new.codfac;
  185. END IF;
  186.  
  187. RETURN NEW;
  188.  
  189.  
  190.  
  191.    
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198. END;
  199. 'LANGUAGE 'plpgsql';
  200.  
  201. DROP TRIGGER tgrarti ON lineas_fac;
  202. CREATE TRIGGER tgrarti
  203.     BEFORE INSERT ON lineas_fac
  204.     FOR EACH ROW
  205.     EXECUTE PROCEDURE arti();
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212. --8
  213.  
  214.  
  215. CREATE OR REPLACE FUNCTION preu() RETURNS TRIGGER AS'
  216.    
  217.  
  218. BEGIN
  219.  
  220.  
  221. IF(new.precio<=0) THEN
  222.     RAISE EXCEPTION''El pedido de la linea % de la factura % tiene precio 0 o inferior, venta rechazada'',new.linea,new.codfac;
  223. END IF;
  224.  
  225. RETURN NEW;
  226.  
  227.  
  228.  
  229.    
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236. END;
  237. 'LANGUAGE 'plpgsql';
  238.  
  239. DROP TRIGGER tgrpreu ON lineas_fac;
  240. CREATE TRIGGER tgrpreu
  241.     BEFORE INSERT ON lineas_fac
  242.     FOR EACH ROW
  243.     EXECUTE PROCEDURE preu();
  244.  
  245.  
  246.  
  247. --9
  248.  
  249.  
  250. CREATE OR REPLACE FUNCTION porcen() RETURNS TRIGGER AS'
  251. BEGIN
  252. IF (new.cant>=10 and new.cant<20) THEN
  253.    UPDATE lineas_fac set dto=5 where new.codfac=codfac and linea=new.linea;
  254.    RETURN NEW;
  255. ELSIF (new.cant>=20 and new.cant<30) THEN
  256.    UPDATE lineas_fac set dto=10 where new.codfac=codfac and linea=new.linea;
  257.    RETURN NEW;
  258. ELSIF (new.cant>=30 and new.cant<40) THEN
  259.    UPDATE lineas_fac set dto=15 where new.codfac=codfac and linea=new.linea;
  260.    RETURN NEW;
  261. ELSIF (new.cant>=40 and new.cant<50) THEN
  262.    UPDATE lineas_fac set dto=20 where new.codfac=codfac and linea=new.linea;
  263.    RETURN NEW;
  264. ELSIF (new.cant>=50 and new.cant<60) THEN
  265.    UPDATE lineas_fac set dto=25 where new.codfac=codfac and linea=new.linea;
  266.    RETURN NEW;
  267. ELSIF (new.cant>=60 and new.cant<70) THEN
  268.    UPDATE lineas_fac set dto=30 where new.codfac=codfac and linea=new.linea;
  269.    RETURN NEW;
  270. ELSIF (new.cant>=70 and new.cant<80) THEN
  271.    UPDATE lineas_fac set dto=35 where new.codfac=codfac and linea=new.linea;
  272.    RETURN NEW;
  273. ELSIF (new.cant>=80 and new.cant<90) THEN
  274.    UPDATE lineas_fac set dto=40 where new.codfac=codfac and linea=new.linea;
  275.    RETURN NEW;
  276. ELSIF (new.cant>=90 and new.cant<100) THEN
  277.    UPDATE lineas_fac set dto=45 where new.codfac=codfac and linea=new.linea;
  278.    RETURN NEW;
  279. ELSIF (new.cant>=100) THEN
  280.    UPDATE lineas_fac set dto=50 where new.codfac=codfac and linea=new.linea;
  281.    RETURN NEW;
  282. END IF;
  283.  
  284. RETURN NEW;
  285. END;
  286. ' LANGUAGE 'plpgsql';
  287.  
  288. DROP TRIGGER tgrporcen ON lineas_fac;
  289. CREATE TRIGGER tgrporcen
  290.     AFTER INSERT ON lineas_fac
  291.     FOR EACH ROW
  292.     EXECUTE PROCEDURE porcen();
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304. --10
  305.  
  306.  
  307. CREATE OR REPLACE FUNCTION media() RETURNS TRIGGER AS'
  308. DECLARE
  309. num_linea INTEGER;
  310. sum_dto INTEGER;
  311. DTO_MEDIA REAL;
  312.  
  313. BEGIN
  314.  
  315.  
  316. select sum(dto),count(linea) INTO sum_dto,num_linea from lineas_fac where codfac=new.codfac;
  317.  
  318. DTO_MEDIA=sum_dto/num_linea;
  319.  
  320.  
  321.  
  322. UPDATE facturas set dto=DTO_MEDIA where codfac=new.codfac;
  323. RETURN NEW;
  324.  
  325.  
  326.  
  327.    
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. END;
  335. 'LANGUAGE 'plpgsql';
  336.  
  337. DROP TRIGGER tgrmedia ON lineas_fac;
  338. CREATE TRIGGER tgrmedia
  339.     AFTER INSERT ON lineas_fac
  340.     FOR EACH ROW
  341.     EXECUTE PROCEDURE media();
  342.  
  343.  
  344.  
  345. --11
  346.  
  347.  
  348. CREATE OR REPLACE FUNCTION minsto() RETURNS TRIGGER AS'
  349. BEGIN
  350. IF (new.stock_min<1) THEN
  351.    RAISE EXCEPTION ''El stock minimo no puede ser inferior 1'';
  352. END IF;
  353. RETURN NEW;
  354. END;
  355. ' LANGUAGE 'plpgsql';
  356.  
  357. DROP TRIGGER tgrminsto ON articulos;
  358. CREATE TRIGGER tgrminsto
  359.     BEFORE INSERT ON articulos
  360.     FOR EACH ROW
  361.     EXECUTE PROCEDURE minsto()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement