Advertisement
Guest User

Untitled

a guest
Mar 26th, 2017
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.66 KB | None | 0 0
  1. /*
  2. FlyByNite Data Warehouse Script.
  3. */
  4.  
  5. DELETE FROM SALES_FACT_DOS;
  6.  
  7. DROP TABLE SALES_FACT_DOS;
  8.  
  9. DROP TABLE CUSTOMER_DOS;
  10.  
  11. DROP TABLE PRODUCT_DOS;
  12.  
  13. DROP TABLE COUNTRY_DOS;
  14.  
  15. DROP TABLE TIMEDIMENSION_DOS;
  16.  
  17. DROP DIMENSION CUSTOMERDIMENSION_DOS;
  18.  
  19. DROP MATERIALIZED VIEW MV_SALESSINCE2013_DOS;
  20.  
  21. CREATE TABLE COUNTRY_DOS(COUNTRYID NUMERIC(10) NOT NULL,
  22. COUNTRYNAME VARCHAR2(40) NOT NULL,
  23. REGION VARCHAR2(11) NOT NULL,
  24. CONSTRAINT COUNTRY_PK_DOS PRIMARY KEY(COUNTRYID));
  25.  
  26. CREATE TABLE CUSTOMER_DOS(MOBILEPHONENUMBER NUMERIC(10) NOT NULL,
  27. FIRSTNAME VARCHAR2(40) NOT NULL,
  28. LASTNAME VARCHAR2(40) NOT NULL,
  29. EMAILADDRESS VARCHAR(40) NOT NULL,
  30. HOUSEADDRESS VARCHAR2(40) NOT NULL,
  31. STREETADDRESS VARCHAR2(50) NOT NULL,
  32. CITY VARCHAR2(30) NOT NULL,
  33. COUNTY_STATE VARCHAR2(40) NOT NULL,
  34. ZIPCODE VARCHAR2(20),
  35. COUNTRYID NUMERIC(10) NOT NULL,
  36. PASSPORT VARCHAR2(10) NOT NULL,
  37. CONSTRAINT CUSTOMER_PK_DOS PRIMARY KEY(EMAILADDRESS),
  38. CONSTRAINT COUNTRY_FK1_DOS FOREIGN KEY(COUNTRYID)
  39. REFERENCES COUNTRY_DOS(COUNTRYID));
  40.  
  41. CREATE TABLE PRODUCT_DOS(PRODUCTID NUMERIC(10) NOT NULL,
  42. PRODUCTNAME VARCHAR2(255) NOT NULL,
  43. PRODUCTUNITCOST DECIMAL(10,2) NOT NULL,
  44. CONSTRAINT PRODUCT_PK_DOS PRIMARY KEY(PRODUCTID));
  45.  
  46. CREATE TABLE TIMEDIMENSION_DOS(TIMEID NUMERIC(10) NOT NULL,
  47. TIMEDAY VARCHAR2(10) NOT NULL,
  48. TIMEMONTH VARCHAR2(9) NOT NULL,
  49. TIMEQUARTER NUMERIC(1) NOT NULL,
  50. TIMEYEAR NUMERIC(4) NOT NULL,
  51. TIMEDAYOFWEEK VARCHAR2(9) NOT NULL,
  52. CONSTRAINT TIME_PK_DOS PRIMARY KEY(TIMEID));
  53.  
  54. CREATE TABLE SALES_FACT_DOS(SALESID NUMERIC(10) NOT NULL,
  55. SALESDATE DATE NOT NULL,
  56. SALESUNITS NUMERIC(10) NOT NULL,
  57. EUROSALESAMOUNT DECIMAL(10,2) NOT NULL,
  58. TIMEID NUMERIC(10) NOT NULL,
  59. PRODUCTID NUMERIC(10) NOT NULL,
  60. COUNTRYID NUMERIC(10) NOT NULL,
  61. CUSTOMERID VARCHAR2(40) NOT NULL,
  62. CONSTRAINT SALES_PK_DOS PRIMARY KEY(SALESID),
  63. CONSTRAINT TIME_FK_DOS FOREIGN KEY(TIMEID)
  64. REFERENCES TIMEDIMENSION_DOS(TIMEID),
  65. CONSTRAINT PRODUCT_FK_DOS FOREIGN KEY(PRODUCTID)
  66. REFERENCES PRODUCT_DOS(PRODUCTID),
  67. CONSTRAINT COUNTRY_FK2_DOS FOREIGN KEY(COUNTRYID)
  68. REFERENCES COUNTRY_DOS(COUNTRYID),
  69. CONSTRAINT CUSTOMER_FK_DOS FOREIGN KEY(CUSTOMERID)
  70. REFERENCES CUSTOMER_DOS(EMAILADDRESS));
  71.  
  72. CREATE DIMENSION CUSTOMERDIMENSION_DOS
  73. LEVEL CUSTOMERID IS CUSTOMER_DOS.MOBILEPHONENUMBER
  74. LEVEL HOUSEADDRESS IS CUSTOMER_DOS.HOUSEADDRESS
  75. LEVEL STREETADDRESS IS CUSTOMER_DOS.STREETADDRESS
  76. LEVEL CITY IS CUSTOMER_DOS.CITY
  77. LEVEL COUNTY_STATE IS CUSTOMER_DOS.COUNTY_STATE
  78. LEVEL COUNTRY IS COUNTRY_DOS.COUNTRYID
  79. LEVEL REGION IS COUNTRY_DOS.REGION
  80. HIERARCHY ADDRESSROLLUP (
  81. HOUSEADDRESS CHILD OF
  82. STREETADDRESS CHILD OF
  83. CITY CHILD OF
  84. COUNTY_STATE CHILD OF
  85. COUNTRY CHILD OF
  86. REGION
  87. JOIN KEY CUSTOMER_DOS.COUNTRYID REFERENCES COUNTRY)
  88. ATTRIBUTE CUSTOMERID DETERMINES
  89. (CUSTOMER_DOS.FIRSTNAME, CUSTOMER_DOS.LASTNAME)
  90. ATTRIBUTE COUNTRY DETERMINES (COUNTRY_DOS.COUNTRYNAME);
  91.  
  92.  
  93. INSERT INTO COUNTRY_DOS VALUES(1,'Ireland','EU');
  94. INSERT INTO COUNTRY_DOS VALUES(2,'England','EU');
  95. INSERT INTO COUNTRY_DOS VALUES(3,'France','EU');
  96. INSERT INTO COUNTRY_DOS VALUES(4,'Spain','EU');
  97. INSERT INTO COUNTRY_DOS VALUES(5,'Germany','EU');
  98. INSERT INTO COUNTRY_DOS VALUES(6,'UK','EU');
  99.  
  100.  
  101. INSERT INTO PRODUCT_DOS VALUES(1,'Flights within a country', 25.00);
  102. INSERT INTO PRODUCT_DOS VALUES(2,'Flights Throughout EU' ,70.00);
  103. INSERT INTO PRODUCT_DOS VALUES(3,'Late Booking EU' ,50.00);
  104. INSERT INTO PRODUCT_DOS VALUES(4,'Late Booking INT' ,150.00);
  105. INSERT INTO PRODUCT_DOS VALUES(5,'Budjet Hotel' ,45.00);
  106. INSERT INTO PRODUCT_DOS VALUES(6,'Mid Range Hotel', 60.00);
  107. INSERT INTO PRODUCT_DOS VALUES(7,'Premium Hotel' ,100.00);
  108. INSERT INTO PRODUCT_DOS VALUES(8,'Overweight KG' ,15.00);
  109. INSERT INTO PRODUCT_DOS VALUES(9,'Boarding Card Pen', 40.00);
  110.  
  111.  
  112. --CUSTOMER PURCHASING A DOMESTIC FLIGHT FROM IRELAND
  113. INSERT INTO CUSTOMER_DOS VALUES('0877785411', 'Diarmaid', 'O Sullivan', 'diarmaidosullivan@mycit.ie','Ambleside', 'SCR', 'Limerick', 'Limerick', '12554', '1', 'P225654');
  114. INSERT INTO TIMEDIMENSION_DOS VALUES(1,06,06,2,2016,'Monday');
  115. INSERT INTO SALES_FACT_DOS VALUES(1,TO_DATE('2016/06/06', 'yyyy/mm/dd'),1,25.00,1,1,1,'diarmaidosullivan@mycit.ie');
  116.  
  117. INSERT INTO CUSTOMER_DOS VALUES('0877556474', 'Laura', 'Butler', 'laurabutler@gmail.com','Downside', 'Ralla Road', 'Paris', 'Paris', '12555', '3', 'P256487');
  118. INSERT INTO TIMEDIMENSION_DOS VALUES(2,10,07,2,2016,'Sunday');
  119. INSERT INTO SALES_FACT_DOS VALUES(2,TO_DATE('2016/07/10', 'yyyy/mm/dd'),2,70.00,2,2,3,'laurabutler@gmail.com');
  120.  
  121. INSERT INTO CUSTOMER_DOS VALUES('0851256698', 'James', 'Green', 'jamesgreen@mycit.ie','Rockville', 'Chico Street', 'Valencia', 'Valencia', '34554', '4', 'P226474');
  122. INSERT INTO TIMEDIMENSION_DOS VALUES(3,01,12,4,2015,'Tuesday');
  123. INSERT INTO SALES_FACT_DOS VALUES(3,TO_DATE('2015/12/01', 'yyyy/mm/dd'),1,70.00,3,2,4,'jamesgreen@mycit.ie');
  124.  
  125.  
  126. INSERT INTO CUSTOMER_DOS VALUES('0836654214', 'Marcus', 'Finucan', 'marucsfinucan@mycit.ie','25', 'Amber Road', 'Berlin', 'Berlin', '67554', '5', 'P233644');
  127. INSERT INTO TIMEDIMENSION_DOS VALUES(4,25,06,2,2016,'Saturday');
  128. INSERT INTO SALES_FACT_DOS VALUES(4,TO_DATE('2016/06/25', 'yyyy/mm/dd'),1,70.00,4,2,5,'marucsfinucan@mycit.ie');
  129.  
  130. INSERT INTO CUSTOMER_DOS VALUES('0836652312', 'John', 'O Shea', 'johnoshea@mycit.ie','Nashville Terrace', 'NCR', 'Limerick', 'Limerick', '99554', '1', 'P015654');
  131. INSERT INTO TIMEDIMENSION_DOS VALUES(5,25,09,4,2016,'Sunday');
  132. INSERT INTO SALES_FACT_DOS VALUES(5,TO_DATE('2016/09/25', 'yyyy/mm/dd'),1,25.00,5,1,1,'johnoshea@mycit.ie');
  133. INSERT INTO SALES_FACT_DOS VALUES(9,TO_DATE('2016/09/25', 'yyyy/mm/dd'),1,50.00,5,3,1,'johnoshea@mycit.ie');
  134. INSERT INTO SALES_FACT_DOS VALUES(10,TO_DATE('2016/09/25', 'yyyy/mm/dd'),1,15.00,5,8,1,'johnoshea@mycit.ie');
  135.  
  136. INSERT INTO CUSTOMER_DOS VALUES('0862584213', 'David', 'O Leary', 'davidoleary@gmail.com','Broke Yard', 'N50', 'Barcelona', 'Barcelona', '13364', '4', 'P225111');
  137. INSERT INTO TIMEDIMENSION_DOS VALUES(6,12,03,1,2015,'Thursday');
  138. INSERT INTO SALES_FACT_DOS VALUES(6,TO_DATE('2016/03/12', 'yyyy/mm/dd'),1,70.00,6,2,4,'davidoleary@gmail.com');
  139.  
  140. INSERT INTO CUSTOMER_DOS VALUES('0869089523', 'JJ', 'O Neil', 'jjoneil@mycit.ie','44', 'Mount Terrace', 'Dortmund', 'Dortmund', '12666', '5', 'P227774');
  141. INSERT INTO TIMEDIMENSION_DOS VALUES(7,15,03,1,2016,'Sunday');
  142. INSERT INTO SALES_FACT_DOS VALUES(7,TO_DATE('2016/03/15', 'yyyy/mm/dd'),1,70.00,7,2,5,'jjoneil@mycit.ie');
  143.  
  144. INSERT INTO CUSTOMER_DOS VALUES('0877744569', 'Roisin', 'Murphy', 'roisinmurphy@gmail.com','122', 'Raheen', 'Dublin', 'Dublin', '33554', '1', 'P885654');
  145. INSERT INTO TIMEDIMENSION_DOS VALUES(8,29,10,4,2016,'Saturday');
  146. INSERT INTO SALES_FACT_DOS VALUES(8,TO_DATE('2016/10/29', 'yyyy/mm/dd'),1,70.00,8,2,1,'roisinmurphy@gmail.com');
  147.  
  148.  
  149. SET SERVEROUTPUT ON FORMAT WRAPPED;
  150. EXECUTE DBMS_DIMENSION.DESCRIBE_DIMENSION('CUSTOMERDIMENSION_DOS');
  151.  
  152. --DATACUBE
  153.  
  154. SELECT COUNTY_STATE, TIMEMONTH,
  155. SUM(SALESUNITS * EUROSALESAMOUNT) AS SUMSALES
  156. FROM SALES_FACT_DOS, CUSTOMER_DOS, TIMEDIMENSION_DOS, COUNTRY_DOS
  157. WHERE SALES_FACT_DOS.CUSTOMERID = CUSTOMER_DOS.EMAILADDRESS
  158. AND SALES_FACT_DOS.TIMEID = TIMEDIMENSION_DOS.TIMEID
  159. AND CUSTOMER_DOS.COUNTRYID = COUNTRY_DOS.COUNTRYID
  160. AND (COUNTRYNAME = 'Ireland')
  161. AND TIMEYEAR = 2016
  162. GROUP BY CUBE (COUNTY_STATE, TIMEMONTH);
  163.  
  164. --ROLLUP
  165.  
  166. SELECT TIMEMONTH, TIMEYEAR,
  167. SUM(SALESUNITS * EUROSALESAMOUNT) AS SUMSALES
  168. FROM SALES_FACT_DOS, CUSTOMER_DOS, TIMEDIMENSION_DOS, COUNTRY_DOS
  169. WHERE SALES_FACT_DOS.CUSTOMERID = CUSTOMER_DOS.EMAILADDRESS
  170. AND SALES_FACT_DOS.TIMEID = TIMEDIMENSION_DOS.TIMEID
  171. AND CUSTOMER_DOS.COUNTRYID = COUNTRY_DOS.COUNTRYID
  172. AND (COUNTRYNAME = 'France'
  173. OR COUNTRYNAME = 'Spain')
  174. AND TIMEYEAR BETWEEN 2015 AND 2016
  175. GROUP BY ROLLUP (TIMEMONTH, TIMEYEAR, COUNTRYNAME);
  176.  
  177.  
  178.  
  179. --STILL TO DO >>
  180.  
  181. --GROUPING SETS
  182.  
  183. SELECT ZIPCODE, TIMEMONTH,
  184. SUM(SALESUNITS * EUROSALESAMOUNT) AS SUMSALES
  185. FROM SALES_FACT_DOS, CUSTOMER_DOS, TIMEDIMENSION_DOS, COUNTRY_DOS
  186. WHERE SALES_FACT_DOS.CUSTOMERID = CUSTOMER_DOS.EMAILADDRESS
  187. AND SALES_FACT_DOS.TIMEID = TIMEDIMENSION_DOS.TIMEID
  188. AND CUSTOMER_DOS.COUNTRYID = COUNTRY_DOS.COUNTRYID
  189. AND (COUNTRYNAME = 'USA'
  190. OR COUNTRYNAME = 'Canada')
  191. AND TIMEYEAR = 2016
  192. GROUP BY GROUPING SETS((ZIPCODE, TIMEMONTH),
  193. ZIPCODE, TIMEMONTH, ());
  194.  
  195. --MATERIALSED VIEW
  196.  
  197. CREATE MATERIALIZED VIEW MV_SALESSINCE2013_DOS
  198. BUILD IMMEDIATE
  199. REFRESH COMPLETE ON DEMAND
  200. ENABLE QUERY REWRITE AS
  201. SELECT ZIPCODE, TIMEYEAR,
  202. SUM(SALESUNITS * EUROSALESAMOUNT) AS SUMREGION
  203. FROM SALES_FACT_DOS, CUSTOMER_DOS, TIMEDIMENSION_DOS, COUNTRY_DOS
  204. WHERE SALES_FACT_DOS.CUSTOMERID = CUSTOMER_DOS.EMAILADDRESS
  205. AND SALES_FACT_DOS.TIMEID = TIMEDIMENSION_DOS.TIMEID
  206. AND CUSTOMER_DOS.COUNTRYID = COUNTRY_DOS.COUNTRYID
  207. AND TIMEYEAR > 2013
  208. GROUP BY REGION, TIMEYEAR;
  209.  
  210. SELECT * FROM MV_SALESSINCE2013_DOS WHERE TIMEYEAR = 2016 AND COUNTRYNAME = 'Europe';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement