Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 5.50 KB | None | 0 0
  1. DROP TABLE APRODUCT;
  2. DROP TABLE AITEM;
  3.  
  4. /
  5. CREATE TABLE AITEM (
  6.   ID NUMBER(30) NOT NULL,
  7.   nameItem VARCHAR2(50) NOT NULL,
  8.   PRIMARY KEY(ID)
  9. );
  10. /
  11. CREATE TABLE APRODUCT (
  12.   ID NUMBER(30) NOT NULL,
  13.   nameProduct VARCHAR2(50) NOT NULL,
  14.   fieldID NUMBER(10) NOT NULL,
  15.   PRIMARY KEY(ID),
  16.   FOREIGN KEY (fieldID) REFERENCES AITEM(ID)
  17. );
  18. /
  19. DROP SEQUENCE seqProduct;
  20. DROP SEQUENCE seqItem;
  21. /
  22. CREATE SEQUENCE seqProduct START WITH 1001;
  23. CREATE SEQUENCE seqItem;
  24. /
  25. CREATE OR REPLACE PACKAGE tablePack IS
  26.   TYPE  nameItemTab IS TABLE OF AITEM.NAMEITEM%TYPE;
  27.   TYPE  nameProductTab IS TABLE OF APRODUCT.NAMEPRODUCT%TYPE;
  28.   PROCEDURE dataAdd;
  29.   PROCEDURE dataDel;
  30.   --PROCEDURE selectField (delName IN VARCHAR2 DEFAULT NULL);
  31. END;
  32. /
  33. CREATE OR REPLACE PACKAGE BODY tablePack IS
  34.   arrItem nameItemTab;
  35.   arrProduct nameProductTab;
  36.   PROCEDURE dataAdd IS
  37.   BEGIN
  38.     INSERT INTO AITEM(ID, nameItem) VALUES(seqItem.NEXTVAL, 'Булочка');
  39.     INSERT INTO AITEM(ID, nameItem) VALUES(seqItem.NEXTVAL, 'Торт');
  40.     INSERT INTO AITEM(ID, nameItem) VALUES(seqItem.NEXTVAL, 'Булка');
  41.     INSERT INTO AITEM(ID, nameItem) VALUES(seqItem.NEXTVAL, 'Хлебушек');
  42.     INSERT INTO AITEM(ID, nameItem) VALUES(seqItem.NEXTVAL, 'Пироженое');
  43.     INSERT INTO AITEM(ID, nameItem) VALUES(seqItem.NEXTVAL, 'Кекс');
  44.     INSERT INTO AITEM(ID, nameItem) VALUES(seqItem.NEXTVAL, 'Круассан');
  45. -- Paul 3/27/19:
  46. -- select * from aitem;    
  47. -- FK fieldID static crappy. replace it pls.
  48.     INSERT INTO APRODUCT(ID, nameProduct, fieldID) VALUES(seqProduct.NEXTVAL, 'Мука', 16); --> static crappy (fieldID)
  49.     INSERT INTO APRODUCT(ID, nameProduct, fieldID) VALUES(seqProduct.NEXTVAL, 'Вода', 17); --> so, static crappy
  50.     INSERT INTO APRODUCT(ID, nameProduct, fieldID) VALUES(seqProduct.NEXTVAL, 'Молоко', 18); --> so on...
  51.     INSERT INTO APRODUCT(ID, nameProduct, fieldID) VALUES(seqProduct.NEXTVAL, 'Сахар', 19);
  52.     INSERT INTO APRODUCT(ID, nameProduct, fieldID) VALUES(seqProduct.NEXTVAL, 'Масло', 20);
  53.     INSERT INTO APRODUCT(ID, nameProduct, fieldID) VALUES(seqProduct.NEXTVAL, 'Соль', 21);
  54.     INSERT INTO APRODUCT(ID, nameProduct, fieldID) VALUES(seqProduct.NEXTVAL, 'Сода', 22); --> crappy heap is end.
  55. END dataAdd;
  56.     PROCEDURE dataDel IS
  57.     BEGIN  
  58.         DELETE FROM APRODUCT;
  59.         DELETE FROM AITEM;
  60.         EXECUTE IMMEDIATE 'DROP SEQUENCE seqProduct';
  61.         EXECUTE IMMEDIATE 'DROP SEQUENCE seqItem';
  62.     END dataDel;
  63.     END;
  64. /  
  65. -- Paul 3/27/19: trigger
  66. CREATE OR REPLACE TRIGGER tr_del_in_work_time
  67. before DELETE ON aproduct
  68. DECLARE
  69.   no_work_time EXCEPTION;
  70. BEGIN
  71.   IF TO_CHAR(SYSDATE, 'HH24SS') > '2000' OR TO_CHAR(SYSDATE, 'HH24SS') < '1200' THEN
  72.     RAISE no_work_time;
  73.   END IF;
  74.   EXCEPTION
  75.     WHEN no_work_time THEN
  76.       RAISE;
  77. END;
  78. BEGIN
  79.     tablePack.dataAdd;
  80.    -- tablePack.dataDel;
  81. END;
  82. /
  83.  
  84. CREATE OR REPLACE VIEW myView AS
  85.   SELECT APRODUCT.ID, APRODUCT.nameProduct,
  86.   AITEM.ID AITEM_ID, AITEM.nameItem, APRODUCT.FIELDID
  87.   FROM AITEM, APRODUCT WHERE AITEM.ID = APRODUCT.FIELDID;
  88. /
  89. SELECT * FROM myview;
  90. /
  91.  
  92. CREATE OR REPLACE PACKAGE helpPack IS
  93.   err_code NUMBER(10,0);
  94.   err_msg VARCHAR2(500);
  95.   PROCEDURE delProduct (idProduct IN NUMBER DEFAULT NULL);
  96.   PROCEDURE ADD_DEL_TablePack (actTable IN VARCHAR2 DEFAULT NULL);
  97.   -- Paul 3/27/19:
  98.   PROCEDURE view_ingedients(c_product IN VARCHAR2);
  99. END helpPack;
  100. /
  101.  
  102. CREATE OR REPLACE PACKAGE BODY helpPack IS
  103.  
  104.   PROCEDURE DelProduct
  105.   (idProduct IN NUMBER DEFAULT NULL) IS
  106.   BEGIN
  107.   DELETE FROM APRODUCT WHERE ID=idProduct;
  108.     COMMIT;
  109.     EXCEPTION
  110.       WHEN OTHERS THEN
  111.       BEGIN
  112.         ROLLBACK;
  113.         err_code := SQLCODE;
  114.         err_msg := SUBSTR(SQLERRM, 1, 200);
  115.         RAISE_APPLICATION_ERROR(err_code, err_msg);
  116.         END;
  117.   END DelProduct;
  118.  
  119.  
  120.   PROCEDURE ADD_DEL_TablePack
  121.   (actTable IN VARCHAR2 DEFAULT NULL) IS
  122.   BEGIN
  123.     IF actTable = 'dataAdd' THEN
  124.       tablePack.dataAdd;
  125.     ELSIF actTable = 'dataDel' THEN
  126.       tablePack.dataDel;
  127.     ELSE
  128.       DBMS_OUTPUT.PUT_LINE('Не выбрано действий над таблицами');
  129.     END IF;
  130.     EXCEPTION
  131.     WHEN OTHERS THEN
  132.       DBMS_OUTPUT.PUT_LINE('ОШИБКА!');
  133.   END ADD_DEL_TablePack;
  134.  
  135.   -- Paul 3/27/19: new procedure
  136.   PROCEDURE view_ingedients(c_product IN VARCHAR2) IS
  137.       -- type table (how collection (unlimit size))
  138.       TYPE t_prod_name IS TABLE OF aproduct.nameproduct%TYPE;
  139.       -- t_prod_name type varriable (for fetching data)
  140.       p_prod_name t_prod_name;
  141.      
  142.       CURSOR get_ingred(c_some_prod IN VARCHAR2) IS
  143.         SELECT p.nameproduct FROM aproduct p
  144.         WHERE p.fieldid NOT IN (SELECT i.id FROM aitem i WHERE i.nameitem = c_some_prod);
  145.        
  146.     BEGIN
  147.       OPEN get_ingred(c_product);
  148.       FETCH get_ingred BULK COLLECT INTO p_prod_name;
  149.       CLOSE get_ingred;
  150.      
  151.       FOR it IN p_prod_name.FIRST..p_prod_name.LAST
  152.       LOOP
  153.         DBMS_OUTPUT.put_line('Product: ' || it);
  154.       END LOOP;
  155.      
  156.       EXCEPTION
  157.         WHEN OTHERS THEN
  158.           RAISE;
  159.     END;
  160.  
  161. END helpPack;
  162. /
  163. BEGIN
  164.   HELPPACK.DELPRODUCT(1008);
  165.   --HELPPACK.IN_DEL_TABLEPACK('dataIn');
  166. END;
  167.  
  168. -- Право на обращение к нашему представлению для всех пользователей
  169. GRANT SELECT ON myView TO PUBLIC;
  170. -- Право на обращение к пакету только для UP1
  171. GRANT EXECUTE ON helpPack TO up1;
  172.  
  173. -- Paul 3/27/19: self
  174.  
  175. SELECT * FROM aitem;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement