Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 3.77 KB | None | 0 0
  1. CREATE OR REPLACE TRIGGER checkitemsales
  2. BEFORE INSERT ON sales_items FOR EACH ROW
  3.     DECLARE
  4.     itval NUMBER;
  5.     noitems exception;
  6. BEGIN
  7.     SELECT items.QUANTITY_ITEMS INTO itval FROM items WHERE items.id_items = :NEW.ID_ITEMS;
  8.     IF (itval - :NEW.QUANTITY_SALES_ITEMS) < 0 THEN
  9.         raise noitems;
  10.     END IF;
  11. END;
  12. /
  13.  
  14. CREATE OR REPLACE TRIGGER updateQuantity
  15. AFTER INSERT ON sales_items FOR EACH ROW
  16. BEGIN
  17.     UPDATE items SET quantity_items = quantity_items - :NEW.QUANTITY_SALES_ITEMS WHERE items.id_items = :NEW.ID_ITEMS;
  18. END;
  19. /
  20.  
  21. CREATE OR REPLACE FUNCTION DOBUYFUNC(
  22.     iname IN clients.name_clients%TYPE,
  23.     isurname IN clients.surname_clients%TYPE,
  24.     iemail IN clients.email_clients%TYPE,
  25.     iaddress IN clients.address_clients%TYPE,
  26.     iphone IN clients.phone_number_clients%TYPE,
  27.     basketPrice IN sales.sales_price%TYPE,
  28.     itemsvalues IN VARCHAR
  29. ) RETURN NUMBER
  30.     IS
  31.     PRAGMA AUTONOMOUS_TRANSACTION;
  32.     rescntcl NUMBER(1);
  33.     resclid clients.id_clients%TYPE;
  34.     salesid sales.id_sales%TYPE;
  35.     itsid sales_items.id_items%TYPE;
  36.     itsval sales_items.quantity_sales_items%TYPE;
  37. BEGIN
  38.     IF iname IS NULL THEN
  39.         RAISE_APPLICATION_ERROR(-20001, 'Empty name');
  40.     RETURN 0;
  41.     END IF;
  42.     IF isurname IS NULL THEN
  43.         RAISE_APPLICATION_ERROR(-20001, 'Empty surname');
  44.     RETURN 0;
  45.     END IF;
  46.     IF iemail IS NULL THEN
  47.         RAISE_APPLICATION_ERROR(-20001, 'Empty email');
  48.     RETURN 0;
  49.     END IF;
  50.     IF iaddress IS NULL THEN
  51.         RAISE_APPLICATION_ERROR(-20001, 'Empty address');
  52.     RETURN 0;
  53.     END IF;
  54.     IF iphone IS NULL THEN
  55.         RAISE_APPLICATION_ERROR(-20001, 'Empty phone number');
  56.     RETURN 0;
  57.     END IF;
  58.  
  59.     SELECT COUNT(clients.id_clients) INTO rescntcl FROM clients WHERE clients.name_clients = iname AND clients.surname_clients = isurname AND clients.email_clients = iemail AND clients.address_clients = iaddress AND clients.phone_number_clients = iphone;
  60.     IF (rescntcl = 0) THEN
  61.         INSERT INTO clients VALUES(clients_seq.NEXTVAL, iname, isurname, iemail, iaddress, iphone);
  62.     END IF;
  63.     SELECT id_clients INTO resclid FROM clients WHERE clients.name_clients = iname AND clients.surname_clients = isurname AND clients.email_clients = iemail AND clients.address_clients = iaddress AND clients.phone_number_clients = iphone;
  64.     IF (resclid > 0) THEN
  65.     dbms_output.put_line('Company code no.'||resclid);
  66.         INSERT INTO sales VALUES(sales_seq.NEXTVAL, NULL, resclid, NULL, basketPrice, 0);
  67.         SELECT MAX(sales.id_sales) INTO salesid FROM sales WHERE sales.id_clients = resclid AND sales.sales_price = basketPrice;
  68.         IF (salesid > 0) THEN
  69.             FOR i IN
  70.                 (SELECT level,
  71.                 TRIM(regexp_substr(itemsvalues, '[^;]+', 1, LEVEL)) str
  72.                 FROM dual
  73.                 CONNECT BY regexp_substr(itemsvalues , '[^;]+', 1, LEVEL) IS NOT NULL
  74.                 )
  75.             LOOP
  76.               SELECT regexp_substr(i.str, '[^,]+', 1, 1), regexp_substr(i.str, '[^,]+', 1, 2) INTO itsid,itsval FROM dual;
  77.               INSERT INTO sales_items (id_sales, id_items, quantity_sales_items) VALUES(salesid, itsid, itsval);
  78.             END LOOP;
  79.             COMMIT;
  80.       RETURN 1;
  81.         END IF;
  82.     ROLLBACK;
  83.     RETURN 0;
  84.     END IF;
  85.   ROLLBACK;
  86.   RETURN 0;
  87. END;
  88. /
  89.  
  90. CREATE OR REPLACE FUNCTION DECLINEPROVIDEFUNC(id IN provides.id_provides%TYPE)
  91. RETURN NUMBER
  92. IS
  93. CURSOR declineprovidecursor IS
  94. SELECT PROVIDES_ITEMS.ID_ITEMS, PROVIDES_ITEMS.QUANTITY_PROVIDES_ITEMS FROM PROVIDES_ITEMS JOIN items ON items.id_items = provides_items.id_items WHERE PROVIDES_ITEMS.ID_PROVIDES = id;
  95. PRAGMA AUTONOMOUS_TRANSACTION;
  96. BEGIN
  97.     FOR i IN declineprovidecursor LOOP
  98.     EXIT WHEN declineprovidecursor%notfound;
  99.         UPDATE items SET QUANTITY_ITEMS = QUANTITY_ITEMS - i.QUANTITY_PROVIDES_ITEMS WHERE ID_ITEMS = i.ID_ITEMS;
  100.     END LOOP;
  101.     DELETE FROM PROVIDES_ITEMS WHERE ID_PROVIDES = id;
  102.     DELETE FROM provides WHERE id_provides = id;
  103.     COMMIT;
  104.     RETURN 1;
  105.     exception
  106.         WHEN OTHERS THEN
  107.             ROLLBACK;
  108.             RETURN 0;
  109. END;
  110. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement