Advertisement
Slightom

SBD_lista_5

Jan 16th, 2017
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 6.06 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------------------------------
  2. -- lista 5 --------------------------------------------------------------------------------------------------------------------------------
  3. ---------------------------------------------------------------------------------------------------------------------------------------
  4.  
  5. -- zad1 -----------------------------------------------------------------------------------------------------------------------
  6. -- stworzenie przestrzeni tabel
  7. CREATE TABLESPACE tablespace1
  8. DATAFILE 'Dane_11.dbf' SIZE 200M
  9. SEGMENT SPACE MANAGEMENT AUTO
  10. extent management LOCAL uniform SIZE 128k;
  11.  
  12. -- wypisanie wszystkich przestrzeni tabel
  13. SELECT * FROM user_tablespaces;
  14.  
  15. -- usuniecie przestrzeni tabel
  16. DROP TABLESPACE tablespace1 INCLUDING CONTENTS AND Datafiles cascade constraints ;
  17. DROP TABLE t1_user_copy;
  18. DROP TABLE t2_ticket_copy;
  19.  
  20.  
  21.  
  22. -- zad2 -----------------------------------------------------------------------------------------------------------------------
  23. CREATE TABLE t1_user
  24. (
  25.   id   INT PRIMARY KEY,
  26.   name VARCHAR(30)
  27. ) TABLESPACE tablespace1;
  28.  
  29. CREATE TABLE t2_ticket
  30. (
  31.   id      INT PRIMARY KEY,
  32.   id_user INT REFERENCES t1_user(id) ON DELETE cascade,
  33.   name    VARCHAR(30)
  34. ) TABLESPACE tablespace1;
  35.  
  36. DROP TABLE t2_ticket_copy;
  37. DROP TABLE t1_user_copy;
  38. DROP TABLE t1_user_copy_copy;
  39.  
  40.  
  41. DROP TABLE t1_user;
  42. SELECT COUNT(*) FROM t2_ticket;
  43. SELECT COUNT(*) FROM t1_user;
  44.  
  45.  
  46.  
  47.  
  48.  
  49. -- zad3 -----------------------------------------------------------------------------------------------------------------------
  50. CREATE TABLE t1_user_copy AS SELECT * FROM t1_user;
  51. CREATE TABLE t2_ticket_copy AS SELECT * FROM t2_ticket;
  52.  
  53. ALTER TABLE t1_user_copy ADD CONSTRAINT t1_user_copy_pk PRIMARY KEY (id);
  54. ALTER TABLE t2_ticket_copy ADD CONSTRAINT t2_ticket_copy_pk PRIMARY KEY (id);
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61. -- zad4 -----------------------------------------------------------------------------------------------------------------------
  62. BEGIN
  63.   FOR i IN 1..1000000 LOOP
  64.     INSERT INTO t1_user(id, name) VALUES (i, 'User nr ' || i);
  65.   END loop;
  66. END;
  67. /
  68.  
  69.  
  70. BEGIN
  71.   FOR i IN 1..1000000 LOOP
  72.     INSERT INTO t2_ticket(id, id_user, name) VALUES(i, TRUNC(sys.DBMS_RANDOM.VALUE(1, 1000000)), 'Ticket nr ' || i);
  73.   END loop;
  74. END;
  75. /
  76.  
  77.  
  78.  
  79.  
  80. -- zad5,6,7 -----------------------------------------------------------------------------------------------------------------------
  81. SET SERVEROUTPUT ON
  82.  
  83. -- czas kopiowania z LOGGING
  84. DECLARE
  85.   cz_poczatek NUMBER;
  86.   cz_koniec   NUMBER;
  87. BEGIN
  88.   cz_poczatek := DBMS_UTILITY.GET_TIME;
  89.   INSERT INTO t1_user_copy (SELECT * FROM t1_user);
  90.   cz_koniec := DBMS_UTILITY.GET_TIME;
  91.   DBMS_OUTPUT.PUT_LINE('czas trwania z logging:' || TO_CHAR(cz_koniec-cz_poczatek));
  92. END;
  93. /
  94.  
  95.  
  96. TRUNCATE TABLE t1_user_copy;
  97. ALTER TABLE t1_user_copy nologging;
  98.  
  99.  
  100. -- zwiekszenie wydajnosci: atrybut logging ustawiony na NO, przy insercie sziezka bezwzgledna: /*+ APPEND */
  101. DECLARE
  102.   cz_poczatek NUMBER;
  103.   cz_koniec   NUMBER;
  104. BEGIN
  105.   cz_poczatek := DBMS_UTILITY.GET_TIME;
  106.   INSERT /*+ APPEND */ INTO t1_user_copy (SELECT * FROM t1_user);
  107.   cz_koniec := DBMS_UTILITY.GET_TIME;
  108.   DBMS_OUTPUT.PUT_LINE('czas trwania z NOlogging:' || TO_CHAR(cz_koniec-cz_poczatek));
  109. END;
  110. /
  111.  
  112.  
  113.  
  114.  
  115. -- wypelnienie tabeli ticket
  116. DECLARE
  117.   cz_poczatek NUMBER;
  118.   cz_koniec   NUMBER;
  119. BEGIN
  120.   cz_poczatek := DBMS_UTILITY.GET_TIME;
  121.   INSERT INTO t2_ticket_copy (SELECT * FROM t2_ticket);
  122.   cz_koniec := DBMS_UTILITY.GET_TIME;
  123.   DBMS_OUTPUT.PUT_LINE('czas trwania z logging:' || TO_CHAR(cz_koniec-cz_poczatek));
  124. END;
  125. /
  126.  
  127.  
  128.  
  129.  
  130.  
  131. SELECT COUNT(1) FROM t1_user;
  132. SELECT COUNT(1) FROM t1_user_copy;
  133. SELECT COUNT(1) FROM t2_ticket;
  134. SELECT COUNT(1) FROM t2_ticket_copy;
  135.  
  136.  
  137. -- zad8 -----------------------------------------------------------------------------------------------------------------------
  138. DECLARE
  139.   cz_poczatek NUMBER;
  140.   cz_koniec   NUMBER;
  141.   ilosc       NUMBER;
  142. BEGIN
  143.   cz_poczatek := DBMS_UTILITY.GET_TIME;
  144.   SELECT COUNT(*) INTO ilosc
  145.   FROM t1_user_copy u, t2_ticket_copy t
  146.   WHERE t.id_user = u.id AND u.name LIKE '%5%';
  147.   cz_koniec := DBMS_UTILITY.GET_TIME;
  148.   DBMS_OUTPUT.PUT_LINE('czas trwania na kopiach:' || TO_CHAR(cz_koniec-cz_poczatek) || ' ilosc: ' || TO_CHAR(ilosc));
  149.  
  150.   cz_poczatek := DBMS_UTILITY.GET_TIME;
  151.   SELECT COUNT(*) INTO ilosc
  152.   FROM t1_user u, t2_ticket t
  153.   WHERE t.id_user = u.id AND u.name LIKE '%5%';
  154.   cz_koniec := DBMS_UTILITY.GET_TIME;
  155.   DBMS_OUTPUT.PUT_LINE('czas trwania na oryginalach:' || TO_CHAR(cz_koniec-cz_poczatek) || ' ilosc: ' || TO_CHAR(ilosc));
  156. END;
  157. /
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171. -- zad9 -----------------------------------------------------------------------------------------------------------------------
  172. CREATE OR REPLACE TRIGGER triggerZad9
  173. BEFORE UPDATE OF id ON t1_user_copy
  174. FOR EACH ROW
  175.   BEGIN
  176.   --modyfikacja dodatkowej tabeli t_copy
  177.   UPDATE t2_ticket_copy
  178.   SET id_user = :NEW.id
  179.   WHERE id_user = :OLD.id;
  180.   END;
  181. /
  182.  
  183.  
  184. UPDATE t1_user_copy
  185. SET id = 2000000
  186. WHERE id=47613;
  187.  
  188.  
  189.  
  190.  
  191. DROP TRIGGER triggerZad9;
  192.  
  193.  
  194. -- zad10 --------------------------------------------------------------------------------------------------------------------
  195.  
  196. -- zeby mozna bylo updatowac t1_user, musimy zrobic wyzwalacz
  197. CREATE OR REPLACE TRIGGER triggerZad92
  198. BEFORE UPDATE OF id ON t1_user
  199. FOR EACH ROW
  200.   BEGIN
  201.   --modyfikacja dodatkowej tabeli t2_ticket
  202.   UPDATE t2_ticket
  203.   SET id_user = :NEW.id
  204.   WHERE id_user = :OLD.id;
  205.   END;
  206. /
  207.  
  208. DROP TRIGGER triggerZad92;
  209.  
  210.  
  211. DECLARE
  212.   pocz NUMBER;
  213.   kon NUMBER;
  214.  
  215. BEGIN
  216.   pocz := DBMS_UTILITY.GET_Time;
  217.   UPDATE t1_user
  218.   SET id = 6000000
  219.   WHERE id=550000;
  220.   kon := DBMS_UTILITY.GET_TIME;
  221.   DBMS_OUTPUT.PUT_LINE('czas trwania update na oryginale:' || TO_CHAR(kon-pocz));
  222.  
  223.   pocz := DBMS_UTILITY.GET_Time;
  224.   UPDATE t1_user_copy
  225.   SET id = 6000000
  226.   WHERE id=550000;
  227.   kon := DBMS_UTILITY.GET_TIME;
  228.   DBMS_OUTPUT.PUT_LINE('czas trwania update na kopii:' || TO_CHAR(kon-pocz));
  229. END;
  230. /
  231. RAW Paste DATA
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement