Advertisement
Guest User

Untitled

a guest
Jan 15th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- CONCURENCY AND REFERENTIAL INTEGRITY
  2. -- SESSION #11
  3.  
  4. /* ************************************************** */
  5. /* This script creates (heaped versions of) tables    */
  6. /* mother and child for use in the exercises on       */
  7. /* application design                                 */
  8. /* distribution of data in the tables                 */
  9. /*                                                    */
  10. /*                      Bo Brunsgaard, October 2016   */
  11. /*                             Revised October 2017   */
  12. /* ************************************************** */
  13.  
  14.  
  15. /*DROP INDEX IXMOTHERIDCHILD;
  16. DROP INDEX IXHAIRCOLORMOTHER;
  17. DROP INDEX IXCHILDYEARBORN;
  18.  
  19. DROP INDEX idxChildMotherId;*/
  20.  
  21. ALTER SYSTEM FLUSH SHARED_POOL;
  22.  
  23. DROP TABLE child purge
  24. ;
  25. DROP TABLE mother purge
  26. ;
  27. CREATE TABLE mother
  28. (
  29.     id       NUMBER(10,0)
  30.              NOT NULL
  31.              CONSTRAINT coPKMother
  32.                PRIMARY KEY
  33.                USING INDEX
  34.                
  35.   , firstName VARCHAR(50)
  36.               NOT NULL
  37.              
  38.   , lastName  VARCHAR(50)
  39.               NOT NULL
  40.              
  41.   , gender    CHAR(01)
  42.               NOT NULL
  43.               CONSTRAINT coCHMotherGender
  44.                 CHECK (gender = 'F')
  45.                
  46.   , dateBorn  DATE
  47.               NOT NULL
  48.              
  49.  , hairColor   VARCHAR2(20)
  50.                NOT NULL
  51.                
  52.  , meaninglessData CHAR(100)
  53.                    NOT NULL
  54. )
  55. ;
  56.  
  57. CREATE TABLE child
  58.  (
  59.      id      NUMBER(10,0)
  60.              NOT NULL
  61.              CONSTRAINT coPKChild
  62.                PRIMARY KEY
  63.                USING INDEX
  64.                
  65.   , firstName VARCHAR(50)
  66.               NOT NULL
  67.              
  68.   , lastName  VARCHAR(50)
  69.               NOT NULL
  70.              
  71.   , gender    CHAR(01)
  72.               NOT NULL
  73.               CONSTRAINT coCHChildGender
  74.                 CHECK (gender IN ('F','M'))
  75.              
  76.   , yearBorn  NUMBER(4,0)
  77.              
  78.   , motherId  NUMBER(10,0)
  79.               NOT NULL
  80.              
  81.   , meaninglessData CHAR(100)
  82.                     NOT NULL
  83.    )
  84. ;
  85. COMMIT
  86. ;
  87. /
  88. DECLARE
  89.  
  90.   noOfMothers           CONSTANT int := 50000;
  91.  
  92. BEGIN
  93.  
  94.   FOR m IN 1..noOfMothers LOOP
  95.    
  96.     IF MOD(m, 100) > 0 THEN
  97.      INSERT
  98.        INTO mother (id, firstname, lastname, gender, dateBorn, hairColor, meaninglessData)
  99.        VALUES      (
  100.                     m
  101.                     , 'First name ' || TO_CHAR(m)
  102.                     , 'Last Name ' || TO_CHAR(m)
  103.                     , 'F'
  104.                     , TO_DATE('1980-01-01 00:00:00','YYYY-MM-DD hh24:mi:ss')
  105.                        + TO_YMINTERVAL(TO_CHAR(FLOOR(dbms_random.VALUE(1,30))) || '-' || TO_CHAR(FLOOR(dbms_random.VALUE(1,12))) )
  106.                     ,  CASE MOD(m, 101)
  107.                           WHEN 0 THEN 'blond'
  108.                           ELSE        'brown'
  109.                        END
  110.                     , 'x');
  111.     END IF;
  112.   END LOOP;
  113.  
  114.   COMMIT;
  115. END;
  116. /
  117. CREATE INDEX idxChildMotherId ON CHILD (motherID);
  118. /
  119. -- -------------------------------------------------------
  120. EXECUTE DBMS_STATS.GATHER_TABLE_STATS ('mircea','MOTHER');
  121. /
  122. EXECUTE DBMS_STATS.GATHER_TABLE_STATS ('mircea','CHILD');
  123. /
  124.  
  125. DELETE FROM child; -- delete children and commit
  126. COMMIT;
  127.  
  128. DELETE FROM MOTHER WHERE HAIRCOLOR = 'blond'; -- delete blond mothers
  129.  
  130. ALTER TABLE child -- add FK
  131. ADD CONSTRAINT fk_ChildMother
  132. FOREIGN KEY (motherID) REFERENCES mother(ID);
  133.  
  134. ALTER TABLE child -- drop FK
  135. DROP CONSTRAINT fk_ChildMother;
  136.  
  137. SELECT c.ID, c.FIRSTNAME, c.LASTNAME -- select motherless children
  138. FROM CHILD c WHERE c.MOTHERID IN
  139. (SELECT CHILD.MOTHERID FROM CHILD
  140. MINUS
  141. SELECT m.ID FROM MOTHER m)
  142. ORDER BY c.ID;
  143.  
  144. ROLLBACK; -- rollback deleting
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement