首页 > 代码库 > 分析函数之初体验(二)——环境

分析函数之初体验(二)——环境

    参考一本书上的讲解,实验环境使用的是oracle 11g的SH用户下的数据,在创建数据库时勾选“sample schema”,默认会创建一系列的示例用户,包括scott/hr/sh/bi等,但这些用户中除了scott外,其它用户都没有数据,这需要用官方网站下载一个examples的压缩包,把这个包安装上之后,再进行数据导入才会有相应的数据。

    安装简单,直接执行安装程序即可,麻烦的是在导入数据上,颇费一番周折。

    安装完后,在/u01/oracle/app/oracle/product/11.2.0/demo/schema/sales_history目录中可以找到相关的创建用户和示例数据文件,数据需要用sqlldr来导入。

    具体步骤如下:

    1. 先以管理员用户身份登录,执行sh_main.sql,这个脚本主要是创建用户、表、视图、索引等。

SQL> @sh_main.sql

specify password for SH as parameter 1:
Enter value for 1: sh

specify default tablespace for SH as parameter 2:
Enter value for 2: users

specify temporary tablespace for SH as parameter 3:
Enter value for 3: temp

specify password for SYS as parameter 4:
Enter value for 4: memory

specify directory path for the data files as parameter 5:
Enter value for 5: /u01/oracle/app/oracle/product/11.2.0/demo/schema/sales_history

writeable directory path for the log files as parameter 6:
Enter value for 6: /u03/dmp

specify version as parameter 7:
Enter value for 7: v3

注意每5步和第7步,第5步的路径指的是存放sh用户脚本的路径,第7步的版本,可以在sh脚相的目录ls一下,很多文件后面都有一个数字,就是这个版本,不是数据库版本。

    2. 导入数据,顺序不能错,因为表中有外键约束,顺序错了导不进数据。

sqlldr userid=sh/sh control=prom_v3.ctl data=prom1v3.dat
sqlldr userid=sh/sh control=cust_v3.ctl data=cust1v3.dat
sqlldr userid=sh/sh control=cust2v3.ctl data=cust2v3.dat
sqlldr userid=sh/sh control=prod_v3.ctl data=prod1v3.dat
sqlldr userid=sh/sh control=prod2v3.ctl data=prod2v3.dat
sqlldr userid=sh/sh control=sale_v3.ctl data=sale1v3.dat
sqlldr userid=sh/sh control=sale2v3.ctl data=sale2v3.dat

    3. 创建实验用的数据表

 1 CREATE table sales_fact AS
 2 SELECT country_name country,
 3        country_subRegion region,
 4        prod_name product,
 5        calendar_year year,
 6        calendar_week_number week,
 7        SUM(amount_sold) sale,
 8        sum(amount_sold * (case
 9              when mod(rownum, 10) = 0 then
10               1.4
11              when mod(rownum, 5) = 0 then
12               0.6
13              when mod(rownum, 2) = 0 then
14               0.9
15              when mod(rownum, 2) = 1 then
16               1.2
17              else
18               1
19            end)) receipts
20   FROM sales, times, customers, countries, products
21  WHERE sales.time_id = times.time_id
22    AND sales.prod_id = products.prod_id
23    AND sales.cust_id = customers.cust_id
24    AND customers.country_id = countries.country_id
25  GROUP BY country_name,
26           country_subRegion,
27           prod_name,
28           calendar_year,
29           calendar_week_number;

实验环境完成。