ORACLE9I分析函数

合集下载

Oracle分析函数用法详解

Oracle分析函数用法详解

Oracle分析函数Oracle分析函数实际上操作对象是查询出的数据集,也就是说不需二次查询数据库,实际上就是oracle实现了一些我们自身需要编码实现的统计功能,对于简化开发工作量有很大的帮助,特别在开发第三方报表软件时是非常有帮助的。

Oracle从8.1.6开始提供分析函数。

一、基本语法oracle分析函数的语法:function_name(arg1,arg2,...)over(<partition-clause> <order-by-clause ><windowing clause>)说明:1.partition-clause 数据记录集分组2.order-by-clause 数据记录集排序3.windowing clause 功能非常强大、比较复杂,定义分析函数在操作行的集合。

有三种开窗方式: range、row、specifying。

二、常用分析函数1. avg(distinct|all expression) 计算组内平均值,distinct 可去除组内重复数据select deptno,empno,sal,avg(sal) over (partition by deptno) avg_sal from t;DEPTNO EMPNO SAL AVG_SAL---------- ---------- ---------- ----------10 7782 2450 2916.666677839 5000 2916.666677934 1300 2916.6666720 7566 2975 21757902 3000 21757876 1100 21757369 800 21757788 3000 217530 7521 1250 1566.666677844 1500 1566.666677499 1600 1566.666677900 950 1566.666677698 2850 1566.666677654 1250 1566.666672.count(<distinct><*><expression>) 对组内数据进行计数3.rank() 和dense_rank()dense_rank()根据 order by 子句表达式的值,从查询返回的每一行,计算和其他行的相对位置,序号从 1 开始,有重复值时序号不跳号。

Oracle 分析函数的使用

Oracle 分析函数的使用

Oracle 分析函数的使用Oracle 分析函数使用介绍分析函数是oracle816引入的一个全新的概念,为我们分析数据提供了一种简单高效的处理方式.在分析函数出现以前,我们必须使用自联查询,子查询或者内联视图,甚至复杂的存储过程实现的语句,现在只要一条简单的sql语句就可以实现了,而且在执行效率方面也有相当大的提高.下面我将针对分析函数做一些具体的说明.今天我主要给大家介绍一下以下几个函数的使用方法1. 自动汇总函数rollup,cube,2. rank 函数, rank,dense_rank,row_number3. lag,lead函数4. sum,avg,的移动增加,移动平均数5. ratio_to_report报表处理函数6. first,last取基数的分析函数基础数据Code: [Copy to clipboard]06:34:23 SQL> select * from t;BILL_MONTH AREA_CODE NET_TYPE LOCAL_FARE--------------- ---------- ---------- --------------200405 5761 G 7393344.04200405 5761 J 5667089.85200405 5762 G 6315075.96200405 5762 J 6328716.15200405 5763 G 8861742.59200405 5763 J 7788036.32200405 5764 G 6028670.45200405 5764 J 6459121.49200405 5765 G 13156065.77200405 5765 J 11901671.70200406 5761 G 7614587.96200406 5761 J 5704343.05200406 5762 G 6556992.60200406 5762 J 6238068.05200406 5763 G 9130055.46200406 5763 J 7990460.25200406 5764 G 6387706.01200406 5764 J 6907481.66200406 5765 G 13562968.81200406 5765 J 12495492.50200407 5761 G 7987050.65200407 5761 J 5723215.28200407 5762 G 6833096.68200407 5762 J 6391201.44200407 5763 G 9410815.91200407 5763 J 8076677.41200407 5764 G 6456433.23200407 5764 J 6987660.53200407 5765 G 14000101.20200407 5765 J 12301780.20200408 5761 G 8085170.84200408 5761 J 6050611.37200408 5762 G 6854584.22200408 5762 J 6521884.50200408 5763 G 9468707.65200408 5763 J 8460049.43200408 5764 G 6587559.23BILL_MONTH AREA_CODE NET_TYPE LOCAL_FARE --------------- ---------- ---------- --------------200408 5764 J 7342135.86200408 5765 G 14450586.63200408 5765 J 12680052.3840 rows selected.Elapsed: 00:00:00.001. 使用rollup函数的介绍Quote:下面是直接使用普通sql语句求出各地区的汇总数据的例子06:41:36 SQL> set autot on06:43:36 SQL> select area_code,sum(local_fare) local_fare06:43:50 2 from t06:43:51 3 group by area_code06:43:57 4 union all06:44:00 5 select '合计' area_code,sum(local_fare) local_fare06:44:06 6 from t06:44:08 7 /AREA_CODE LOCAL_FARE---------- --------------5761 54225413.045762 52039619.605763 69186545.025764 53156768.465765 104548719.19合计 333157065.316 rows selected.Elapsed: 00:00:00.03Execution Plan----------------------------------------------------------0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=7 Card=1310 Bytes=24884)1 0 UNION-ALL2 1 SORT (GROUP BY) (Cost=5 Card=1309 Bytes=24871)3 2 TABLE ACCESS (FULL) OF 'T' (Cost=2 Card=1309Bytes=24871)4 1 SORT (AGGREGATE)5 4 TABLE ACCESS (FULL) OF 'T' (Cost=2 Card=1309Bytes=17017)Statistics----------------------------------------------------------0 recursive calls0 db block gets6 consistent gets0 physical reads0 redo size561 bytes sent via SQL*Net to client503 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client1 sorts (memory)0 sorts (disk)6 rows processed下面是使用分析函数rollup得出的汇总数据的例子06:44:09 SQL> select nvl(area_code,'合计') area_code,sum(local_fare) local_fare06:45:26 2 from t06:45:30 3 group by rollup(nvl(area_code,'合计'))06:45:50 4 /AREA_CODE LOCAL_FARE---------- --------------5761 54225413.045762 52039619.605763 69186545.025764 53156768.465765 104548719.19333157065.316 rows selected.Elapsed: 00:00:00.00Execution Plan----------------------------------------------------------0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=5 Card=1309Bytes=24871)1 0 SORT (GROUP BY ROLLUP) (Cost=5 Card=1309 Bytes=24871)2 1 TABLE ACCESS (FULL) OF 'T' (Cost=2 Card=1309Bytes=24871)Statistics----------------------------------------------------------0 recursive calls0 db block gets4 consistent gets0 physical reads0 redo size557 bytes sent via SQL*Net to client503 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client1 sorts (memory)0 sorts (disk)6 rows processed从上面的例子我们不难看出使用rollup函数,系统的sql语句更加简单,耗用的资源更少,从6个consistent gets降到4个consistent gets,如果基表很大的话,结果就可想而知了.1. 使用cube函数的介绍Quote:为了介绍cube函数我们再来看看另外一个使用rollup的例子06:53:00 SQL> select area_code,bill_month,sum(local_fare) local_fare06:53:37 2 from t06:53:38 3 group by rollup(area_code,bill_month)06:53:49 4 /---------- --------------- --------------5761 200405 13060433.895761 200406 13318931.015761 200407 13710265.935761 200408 14135782.215761 54225413.045762 200405 12643792.115762 200406 12795060.655762 200407 13224298.125762 200408 13376468.725762 52039619.605763 200405 16649778.915763 200406 17120515.715763 200407 17487493.325763 200408 17928757.085763 69186545.025764 200405 12487791.945764 200406 13295187.675764 200407 13444093.765764 200408 13929695.095764 53156768.465765 200405 25057737.475765 200406 26058461.315765 200407 26301881.405765 200408 27130639.015765 104548719.19333157065.3126 rows selected.Elapsed: 00:00:00.00系统只是根据rollup的第一个参数area_code对结果集的数据做了汇总处理,而没有对bill_month做汇总分析处理,cube函数就是为了这个而设计的.下面,让我们看看使用cube函数的结果06:58:02 SQL> select area_code,bill_month,sum(local_fare) local_fare 06:58:30 2 from t06:58:32 3 group by cube(area_code,bill_month)06:58:42 4 order by area_code,bill_month nulls last06:58:57 5 /---------- --------------- --------------5761 200405 13060.435761 200406 13318.935761 200407 13710.275761 200408 14135.785761 54225.415762 200405 12643.795762 200406 12795.065762 200407 13224.305762 200408 13376.475762 52039.625763 200405 16649.785763 200406 17120.525763 200407 17487.495763 200408 17928.765763 69186.545764 200405 12487.795764 200406 13295.195764 200407 13444.095764 200408 13929.695764 53156.775765 200405 25057.745765 200406 26058.465765 200407 26301.885765 200408 27130.645765 104548.72200405 79899.53200406 82588.15200407 84168.03200408 86501.34333157.0530 rows selected.Elapsed: 00:00:00.01可以看到,在cube函数的输出结果比使用rollup多出了几行统计数据.这就是cube函数根据bill_month做的汇总统计结果1 rollup 和cube函数的再深入Quote:从上面的结果中我们很容易发现,每个统计数据所对应的行都会出现null,我们如何来区分到底是根据那个字段做的汇总呢,这时候,oracle的grouping函数就粉墨登场了.如果当前的汇总记录是利用该字段得出的,grouping函数就会返回1,否则返回01 select decode(grouping(area_code),1,'all area',to_char(area_code)) area_code,2 decode(grouping(bill_month),1,'all month',bill_month) bill_month,3 sum(local_fare) local_fare4 from t5 group by cube(area_code,bill_month)6* order by area_code,bill_month nulls last07:07:29 SQL> /AREA_CODE BILL_MONTH LOCAL_FARE---------- --------------- --------------5761 200405 13060.435761 200406 13318.935761 200407 13710.275761 200408 14135.785761 all month 54225.415762 200405 12643.795762 200406 12795.065762 200407 13224.305762 200408 13376.475762 all month 52039.625763 200405 16649.785763 200406 17120.525763 200407 17487.495763 200408 17928.765763 all month 69186.545764 200405 12487.795764 200406 13295.195764 200407 13444.095764 200408 13929.695764 all month 53156.775765 200405 25057.745765 200406 26058.465765 200407 26301.885765 200408 27130.645765 all month 104548.72all area 200405 79899.53all area 200406 82588.15all area 200407 84168.03all area 200408 86501.34all area all month 333157.0530 rows selected.Elapsed: 00:00:00.0107:07:31 SQL>可以看到,所有的空值现在都根据grouping函数做出了很好的区分,这样利用rollup,cube和grouping函数,我们做数据统计的时候就可以轻松很多了.2. rank函数的介绍介绍完rollup和cube函数的使用,下面我们来看看rank系列函数的使用方法.问题2.我想查出这几个月份中各个地区的总话费的排名.Quote:为了将rank,dense_rank,row_number函数的差别显示出来,我们对已有的基础数据做一些修改,将5763的数据改成与5761的数据相同.1 update t t1 set local_fare = (2 select local_fare from t t23 where t1.bill_month = t2.bill_month4 and _type = _type5 and t2.area_code = '5761'6* ) where area_code = '5763'07:19:18 SQL> /8 rows updated.Elapsed: 00:00:00.01我们先使用rank函数来计算各个地区的话费排名.07:34:19 SQL> select area_code,sum(local_fare) local_fare,07:35:25 2 rank() over (order by sum(local_fare) desc) fare_rank07:35:44 3 from t07:35:45 4 group by area_codee07:35:50 507:35:52 SQL> select area_code,sum(local_fare) local_fare,07:36:02 2 rank() over (order by sum(local_fare) desc) fare_rank07:36:20 3 from t07:36:21 4 group by area_code07:36:25 5 /AREA_CODE LOCAL_FARE FARE_RANK---------- -------------- ----------5765 104548.72 15761 54225.41 25763 54225.41 25764 53156.77 45762 52039.62 5Elapsed: 00:00:00.01我们可以看到红色标注的地方出现了,跳位,排名3没有出现下面我们再看看dense_rank查询的结果.07:36:26 SQL> select area_code,sum(local_fare) local_fare,07:39:16 2 dense_rank() over (order by sum(local_fare) desc ) fare_rank 07:39:39 3 from t07:39:42 4 group by area_code07:39:46 5 /AREA_CODE LOCAL_FARE FARE_RANK---------- -------------- ----------5765 104548.72 15761 54225.41 25763 54225.41 25764 53156.77 3 这是这里出现了第三名5762 52039.62 4Elapsed: 00:00:00.00在这个例子中,出现了一个第三名,这就是rank和dense_rank的差别,rank如果出现两个相同的数据,那么后面的数据就会直接跳过这个排名,而dense_rank则不会,差别更大的是,row_number哪怕是两个数据完全相同,排名也会不一样,这个特性在我们想找出对应没个条件的唯一记录的时候又很大用处1 select area_code,sum(local_fare) local_fare,2 row_number() over (order by sum(local_fare) desc ) fare_rank3 from t4* group by area_code07:44:50 SQL> /AREA_CODE LOCAL_FARE FARE_RANK---------- -------------- ----------5765 104548.72 15761 54225.41 25763 54225.41 35764 53156.77 45762 52039.62 5在row_nubmer函数中,我们发现,哪怕sum(local_fare)完全相同,我们还是得到了不一样排名,我们可以利用这个特性剔除数据库中的重复记录.这个帖子中的几个例子是为了说明这三个函数的基本用法的. 下个帖子我们将详细介绍他们的一些用法.2. rank函数的介绍a. 取出数据库中最后入网的n个用户select user_id,tele_num,user_name,user_status,create_datefrom (select user_id,tele_num,user_name,user_status,create_date,rank() over (order by create_date desc) add_rankfrom user_info)where add_rank <= :n;b.根据object_name删除数据库中的重复记录create table t as select obj#,name from sys.obj$;再insert into t1 select * from t1 数次.delete from t1 where rowid in (select row_id from (select rowid row_id,row_number() over (partition by obj# order by rowid ) rn ) where rn <> 1);c. 取出各地区的话费收入在各个月份排名.SQL> select bill_month,area_code,sum(local_fare) local_fare,2 rank() over (partition by bill_month order by sum(local_fare) desc) area_rank3 from t4 group by bill_month,area_code5 /BILL_MONTH AREA_CODE LOCAL_FARE AREA_RANK--------------- --------------- -------------- ----------200405 5765 25057.74 1200405 5761 13060.43 2200405 5763 13060.43 2200405 5762 12643.79 4200405 5764 12487.79 5200406 5765 26058.46 1200406 5761 13318.93 2200406 5763 13318.93 2200406 5764 13295.19 4200406 5762 12795.06 5200407 5765 26301.88 1200407 5761 13710.27 2200407 5763 13710.27 2200407 5764 13444.09 4200407 5762 13224.30 5200408 5765 27130.64 1200408 5761 14135.78 2200408 5763 14135.78 2200408 5764 13929.69 4200408 5762 13376.47 520 rows selected.SQL>3. lag和lead函数介绍取出每个月的上个月和下个月的话费总额1 select area_code,bill_month, local_fare cur_local_fare,2 lag(local_fare,2,0) over (partition by area_code order by bill_month ) pre_local_fare,3 lag(local_fare,1,0) over (partition by area_code order by bill_month ) last_local_fare,4 lead(local_fare,1,0) over (partition by area_code order by bill_month )next_local_fare,5 lead(local_fare,2,0) over (partition by area_code order by bill_month )post_local_fare6 from (7 select area_code,bill_month,sum(local_fare) local_fare8 from t9 group by area_code,bill_month10* )SQL> /AREA_CODE BILL_MONTH CUR_LOCAL_FARE PRE_LOCAL_FARELAST_LOCAL_FARE NEXT_LOCAL_FARE POST_LOCAL_FARE--------- ---------- -------------- -------------- --------------- --------------- ---------------5761 200405 13060.433 0 0 13318.93 13710 .2655761 200406 13318.93 0 13060.433 13710.265 14 135.7815761 200407 13710.265 13060.433 13318.93 14135.7815761 200408 14135.781 13318.93 13710.265 05762 200405 12643.791 0 0 12795.06 13224 .2975762 200406 12795.06 0 12643.791 13224.297 13 376.4685762 200407 13224.297 12643.791 12795.06 13376.4685762 200408 13376.468 12795.06 13224.297 05763 200405 13060.433 0 0 13318.93 13710 .2655763 200406 13318.93 0 13060.433 13710.265 14 135.7815763 200407 13710.265 13060.433 13318.93 14135.7815763 200408 14135.781 13318.93 13710.265 05764 200405 12487.791 0 0 13295.187 1344 4.0935764 200406 13295.187 0 12487.791 13444.093 1 3929.6945764 200407 13444.093 12487.791 13295.187 13929.6945764 200408 13929.694 13295.187 13444.093 05765 200405 25057.736 0 0 26058.46 26301 .8815765 200406 26058.46 0 25057.736 26301.881 27 130.6385765 200407 26301.881 25057.736 26058.46 27130.6385765 200408 27130.638 26058.46 26301.881 020 rows selected.利用lag和lead函数,我们可以在同一行中显示前n行的数据,也可以显示后n行的数据.4. sum,avg,max,min移动计算数据介绍计算出各个连续3个月的通话费用的平均数1 select area_code,bill_month, local_fare,2 sum(local_fare)3 over ( partition by area_code4 order by to_number(bill_month)5 range between 1 preceding and 1 following ) "3month_sum",6 avg(local_fare)7 over ( partition by area_code8 order by to_number(bill_month)9 range between 1 preceding and 1 following ) "3month_avg",10 max(local_fare)11 over ( partition by area_code12 order by to_number(bill_month)13 range between 1 preceding and 1 following ) "3month_max",14 min(local_fare)15 over ( partition by area_code16 order by to_number(bill_month)17 range between 1 preceding and 1 following ) "3month_min"18 from (19 select area_code,bill_month,sum(local_fare) local_fare20 from t21 group by area_code,bill_month22* )SQL> /AREA_CODE BILL_MONTH LOCAL_FARE 3month_sum 3month_avg3month_max 3month_min--------- ---------- ---------------- ---------- ---------- ---------- ----------5761 200405 13060.433 26379.363 13189.6815 13318.93 13060.433 5761 200406 13318.930 40089.628 13363.2093 13710.265 13060.433 5761 200407 13710.265 41164.976 13721.6587 14135.781 13318.93 40089.628 = 13060.433 + 13318.930 + 13710.26513363.2093 = (13060.433 + 13318.930 + 13710.265) / 313710.265 = max(13060.433 + 13318.930 + 13710.265)13060.433 = min(13060.433 + 13318.930 + 13710.265)5761 200408 14135.781 27846.046 13923.023 14135.781 13710.265 5762 200405 12643.791 25438.851 12719.4255 12795.06 12643.791 5762 200406 12795.060 38663.148 12887.716 13224.297 12643.791 5762 200407 13224.297 39395.825 13131.9417 13376.468 12795.06 5762 200408 13376.468 26600.765 13300.3825 13376.468 13224.297 5763 200405 13060.433 26379.363 13189.6815 13318.93 13060.433 5763 200406 13318.930 40089.628 13363.2093 13710.265 13060.433 5763 200407 13710.265 41164.976 13721.6587 14135.781 13318.935763 200408 14135.781 27846.046 13923.023 14135.781 13710.265 5764 200405 12487.791 25782.978 12891.489 13295.187 12487.791 5764 200406 13295.187 39227.071 13075.6903 13444.093 12487.791 5764 200407 13444.093 40668.974 13556.3247 13929.694 13295.187 5764 200408 13929.694 27373.787 13686.8935 13929.694 13444.093 5765 200405 25057.736 51116.196 25558.098 26058.46 25057.736 5765 200406 26058.460 77418.077 25806.0257 26301.881 25057.736 5765 200407 26301.881 79490.979 26496.993 27130.638 26058.46 5765 200408 27130.638 53432.519 26716.2595 27130.638 26301.88120 rows selected.5. ratio_to_report函数的介绍Quote:1 select bill_month,area_code,sum(local_fare) local_fare,2 ratio_to_report(sum(local_fare)) over3 ( partition by bill_month ) area_pct4 from t5* group by bill_month,area_codeSQL> break on bill_month skip 1SQL> compute sum of local_fare on bill_monthSQL> compute sum of area_pct on bill_monthSQL> /BILL_MONTH AREA_CODE LOCAL_FARE AREA_PCT---------- --------- ---------------- ----------200405 5761 13060.433 .1711492795762 12643.791 .1656894315763 13060.433 .1711492795764 12487.791 .1636451435765 25057.736 .328366866********** ---------------- ----------sum 76310.184 1200406 5761 13318.930 .1690507725762 12795.060 .1624015425763 13318.930 .1690507725764 13295.187 .1687494145765 26058.460 .330747499********** ---------------- ----------sum 78786.567 1200407 5761 13710.265 .1705451975762 13224.297 .1645001275763 13710.265 .1705451975764 13444.093 .1672342215765 26301.881 .327175257********** ---------------- ----------sum 80390.801 1200408 5761 14135.781 .1709111475762 13376.468 .1617305395763 14135.781 .1709111475764 13929.694 .1684194165765 27130.638 .328027751********** ---------------- ----------sum 82708.362 120 rows selected.6 first,last函数使用介绍Quote:取出每月通话费最高和最低的两个用户.1 select bill_month,area_code,sum(local_fare) local_fare,2 first_value(area_code)3 over (order by sum(local_fare) desc4 rows unbounded preceding) firstval,5 first_value(area_code)6 over (order by sum(local_fare) asc7 rows unbounded preceding) lastval8 from t9 group by bill_month,area_code10* order by bill_monthSQL> /BILL_MONTH AREA_CODE LOCAL_FARE FIRSTVAL LASTVAL ---------- --------- ---------------- --------------- ---------------200405 5764 12487.791 5765 5764200405 5762 12643.791 5765 5764200405 5761 13060.433 5765 5764200405 5765 25057.736 5765 5764200405 5763 13060.433 5765 5764200406 5762 12795.060 5765 5764200406 5763 13318.930 5765 5764200406 5764 13295.187 **** ****200406 5765 26058.460 5765 5764200406 5761 13318.930 5765 5764200407 5762 13224.297 5765 5764200407 5765 26301.881 5765 5764200407 5761 13710.265 5765 5764200407 5763 13710.265 5765 5764200407 5764 13444.093 5765 5764200408 5762 13376.468 5765 5764200408 5764 13929.694 5765 5764200408 5761 14135.781 5765 5764200408 5765 27130.638 5765 5764200408 5763 14135.781 5765 576420 rows selected.。

Oracle9i数据库设计指引大全

Oracle9i数据库设计指引大全

数据库全局名称:
<s
1.2.3 数据库类型选择
对于海量数据库系统,采用data warehouse的类型。

对于小型数据库或OLTP类型的数据库,采用Transaction Processing类型。

1.2.4 数据库连接类型选择
Oracle数据库有专用服务器连接类型和多线程服务器MTS连接类型。

对于批处理服务,需要专用服务器连接方式,而对于OLTP服务则MTS的连接方式比较合适。

由于采用MTS后,可以通过配置网络服务实现某些特定批处理服务采用专用服务器连接方式,所以数据库设计时一般采用MTS类型。

1.2.5 数据库SGA配置
数据库SGA可以采用手工配置或按物理内存比例配置,在数据库初始设计阶段采用按比例配置方式,在实际应用中按系统调优方式修改SGA。

1.2.6 数据库字符集选择
为了使数据库能够正确支持多国语言,必须配置合适的数据库字符集,采用UTF8字符集。

注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,具体过程如下(切记设定的字符集必须是ORACLE支持,不然不能start)
SQL> shutdown immediate;
1.2.7 数据库其他参数配置
1.2.7.1 DB_FILES
Db_files是数据库能够同时打开的文件数量,默认值是200个。

当数据库规划时文件数量FILES接近或超过200个时候,按以下估计值配置:。

Oracle 9i 分析函数参考手册

Oracle 9i 分析函数参考手册

Oracl e 9i 分析函数参考AVG ,CORR,COVAR_POP ,COVAR_SAMP, COUNT ,CUME_DIST ,DENSE_RANK , FIRST ,FIRST_VALUE ,LAG,LAST ,LAST_VALUE,LEAD ,MAX,MIN ,NTILE ,PERCENT_RANK,PERCENTILE_CONT ,PERCENTILE_DISC ,RANK ,RATIO_TO_REPORT ,REGR_ (Linear Regression) Functions ,ROW_NUMBER, STDDEV,STDDEV_POP ,STDDEV_SAMP,SUM ,VAR_POP,VAR_SAMP ,VARIANCEOracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。

下面例子中使用的表来自Oracle自带的HR用户下的表,如果没有安装该用户,可以在SYS用户下运行$ORACLE_HOME/demo/schema/human_resources/hr_main.sql来创建。

少数几个例子需要访问SH用户下的表,如果没有安装该用户,可以在SYS用户下运行$ORACLE_HOME/demo/schema/sales_history/sh_main.sql来创建。

如果未指明缺省是在HR用户下运行例子。

开窗函数的的理解:开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:over(order by salary)按照salary排序进行累计,order by是个默认的开窗函数over(partition by deptno)按照部门分区over(order by salary range between 50 preceding and 150 following)每行对应的数据窗口是之前行幅度值不超过50,之后行幅度值不超过150over(order by salary rows between 50 preceding and 150 following)每行对应的数据窗口是之前50行,之后150行over(order by salary rows between unbounded preceding and unbounded following)每行对应的数据窗口是从第一行到最后一行,等效:over(order by salary range between unbounded preceding and unbounded following)主要参考资料:《expert one-on-one》Tom Kyte 《Oracle9i SQL Reference》第6章AVG功能描述:用于计算一个组和数据窗口内表达式的平均值。

Oracle公司内部数据库培训资料16_Oracle9i 日期函数

Oracle公司内部数据库培训资料16_Oracle9i 日期函数

CURRENT_TIMESTAMP
• 按照当前会话的时区显示当前会话的时间
ALTER SESSION SET TIME_ZONE = '-5:0'; SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;
ALTER SESSION SET TIME_ZONE = '-8:0'; SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;
Oracle9i 日期函数
Copyright © Oracle Corporation, 2001. All rights reserved.
目标
通过本章学习,您将可以使用下列日期函数:
• TZ_OFFSET • CURRENT_DATE • CURRENT_TIMESTAMP • LOCALTIMESTAMP • DBTIMEZONE • SESSIONTIMEZONE • EXTRACT • FROM_TZ • TO_TIMESTAMP • TO_TIMESTAMP_TZ • TO_YMINTERVAL

好的事情马上就会到来,一切都是最 好的安 排。上 午9时52分10秒 上午9时52分09:52:1020.10.15

一马当先,全员举绩,梅开二度,业 绩保底 。20.10.1520.10.1509: 5209:52:1009: 52:10Oct-20

牢记安全之责,善谋安全之策,力务 安全之 实。2020年10月15日 星期四9时52分 10秒T hursday, October 15, 2020
TO_YMINTERVAL 应用举例
SELECT hire_date, hire_date + TO_YMINTERVAL('01-02') AS HIRE_DATE_YMININTERVAL

第八章 Oracle9i常用工具

第八章  Oracle9i常用工具

8.7.1 LogMiner的用途
1.LogMiner的主要用途 LogMiner工具的主要用途有:
(1)跟踪数据库的变化:可以离线的跟踪数据库的变化,而
不会影响在线系统的性能。
(2)回退数据库的变化:回退特定的变化数据,减少pointin-time recovery的执行。
(3)优化和扩容计划:可通过分析日志文件中的数据以分析
8.3 Oracle企业管理器 (OEM)
8.3.1 OEM的体系结构
8.3.2 OEM组件介绍
8.3.1 OEM的体系结构
OEM为三层结构,其组成如下:
(1)第一层是客户端工具,如:EM Console, DBA
Management Pack和其他集成的Oracle应用。这些工具是
从机器本地启动的。也可以是通过浏览器下载下来的
文件。所以,比较而言,SQL*Plus Worksheet使用更简单、
方便。
8.2.2 SQL*Plus Worksheet的使用 1.启动SQL*Plus Worksheet 2.使用SQL*Plus Worksheet
1、启动SQL*Plus Worksheet
(1)直接登录进入 直接登录进入的操作步骤为: 在Oracle菜单中运行“Application
③将包含LONG类型数据列的表的内容拷贝到其他表。因为LONG类型的列 不能用于SELECT语句中,所以这是解决此问题的唯一方法。
④从一个Oracle数据库向一个非Oracle数据库拷贝表。
数据拷贝命令的格式如下: COPY[FROM<用户名>/<口令>@<数据库>= [TO<用户名>/<口令>@<数据库>] {APPEND |CREATE | INSERT | REPLACE} <表>[(<列>,…==USING<查询>

Oracle9i的关系数据库实用教程第二章 Oracle的体系结构

Oracle9i的关系数据库实用教程第二章  Oracle的体系结构
PCTUSED:指定块中数据使用空间 的最低百分比;
2020/4/27
2.2.5 模式对象
Oracle数据库的模式对象包括表、视 图、序列、同义词、索引、触发器、存 储过程等。
2020/4/27
2.3 内存结构
2.3.1 系统全局区 2.3.2 程序全局区 2.3.3 排序区 2.3.4 软件代码区
2020/4/27
2.2.4 数据库块
数据库块也称逻辑块或Oracle块,它对应 磁盘上一个或多个物理块,它的大小由初 始化参数db_block_size(在文件init.ora中) 决定,典型的大小是2k。
2020/4/27
Pckfree和Pctused两个参数用来优化数据 块空间的使用。
PCTFREE : 块 中 保 留 用 于 UPDATE 操作的空间百分比,当数据占用的空间达 到此上限时,新的数据将不能再插入到此 块中;
第二章 Oracle体系结构
2.1 物理结构 2.2 逻辑结构 2.3 内存结构 2.4 数据库实例与进程 2.5 数据字典
2020/4/27
2.1 物理结构
2.1.1 数据文件 2.1.2 日志文件 2.1.3 控制文件 2.1.4 配置文件
2020/4/27
2.1.1 数据文件
数据文件用来存储数据库中的全部数据, 如数据库表中的数据和索引数据。通常为后 缀名为.dbf格式的文件。
2020/4/27
共 享 池 的 大 小 取 决 于 init.ora 文 件 参 数 SHARED_POOL_SIZE,它是以字节为单 位的。用户必须将这个值设得足够大, 以确保有足够的可用空间来装载和存储 PL/SQL块和SQL语句。
2020/4/27
5.Java池

oracle分析函数

oracle分析函数

Oracle开发专题之:分析函数(OVER) (1)Oracle开发专题之:分析函数2(Rank, Dense_rank, row_number) (6)Oracle开发专题之:分析函数3(Top/Bottom N、First/Last、NTile) (10)Oracle开发专题之:窗口函数 (14)Oracle开发专题之:报表函数 (20)Oracle开发专题之:分析函数总结 (22)Oracle开发专题之:26个分析函数 (24)PLSQL开发笔记和小结 (28)分析函数简述 (60)说明: 1)Oracle开发专题99%收集自: /pengpenglin/(偶补充了一点点1%);2) PLSQL开发笔记和小结收集自/cheneyfree/3)分析函数简述收集自/7607759/昆明小虫/ 收集,并补充了一点点1%Oracle开发专题之:分析函数(OVER)目录:===============================================1.Oracle分析函数简介2. Oracle分析函数简单实例3.分析函数OVER解析一、Oracle分析函数简介:在日常的生产环境中,我们接触得比较多的是OLTP系统(即Online Transaction Process),这些系统的特点是具备实时要求,或者至少说对响应的时间多长有一定的要求;其次这些系统的业务逻辑一般比较复杂,可能需要经过多次的运算。

比如我们经常接触到的电子商城。

在这些系统之外,还有一种称之为OLAP的系统(即Online Aanalyse Process),这些系统一般用于系统决策使用。

通常和数据仓库、数据分析、数据挖掘等概念联系在一起。

这些系统的特点是数据量大,对实时响应的要求不高或者根本不关注这方面的要求,以查询、统计操作为主。

我们来看看下面的几个典型例子:①查找上一年度各个销售区域排名前10的员工②按区域查找上一年度订单总额占区域订单总额20%以上的客户③查找上一年度销售最差的部门所在的区域④查找上一年度销售最好和最差的产品我们看看上面的几个例子就可以感觉到这几个查询和我们日常遇到的查询有些不同,具体有:①需要对同样的数据进行不同级别的聚合操作②需要在表内将多条数据和同一条数据进行多次的比较③需要在排序完的结果集上进行额外的过滤操作分析函数语法:FUNCTION_NAME(<argument>,<argument>...)OVER(<Partition-Clause><Order-by-Clause><Windowing Clause>)例:sum(sal) over (partition by deptno order by ename) new_aliassum就是函数名(sal)是分析函数的参数,每个函数有0~3个参数,参数可以是表达式,例如:sum(sal+comm)over 是一个关键字,用于标识分析函数,否则查询分析器不能区别sum()聚集函数和sum()分析函数partition by deptno 是可选的分区子句,如果不存在任何分区子句,则全部的结果集可看作一个单一的大区order by ename 是可选的order by 子句,有些函数需要它,有些则不需要.依靠已排序数据的那些函数,如:用于访问结果集中前一行和后一行的LAG和LEAD,必须使用,其它函数,如AVG,则不需要.在使用了任何排序的开窗函数时,该子句是强制性的,它指定了在计算分析函数时一组内的数据是如何排序的.1)FUNCTION子句ORACLE提供了26个分析函数,按功能分5类分析函数分类等级(ranking)函数:用于寻找前N种查询开窗(windowing)函数:用于计算不同的累计,如SUM,COUNT,AVG,MIN,MAX等,作用于数据的一个窗口上例:sum(t.sal) over (order by t.deptno,t.ename) running_total,sum(t.sal) over (partition by t.deptno order by t.ename) department_total制表(reporting)函数:与开窗函数同名,作用于一个分区或一组上的所有列例:sum(t.sal) over () running_total2,sum(t.sal) over (partition by t.deptno ) department_total2制表函数与开窗函数的关键不同之处在于OVER语句上缺少一个ORDER BY子句!LAG,LEAD函数:这类函数允许在结果集中向前或向后检索值,为了避免数据的自连接,它们是非常用用的.VAR_POP,VAR_SAMP,STDEV_POPE及线性的衰减函数:计算任何未排序分区的统计值2)PARTITION子句按照表达式分区(就是分组),如果省略了分区子句,则全部的结果集被看作是一个单一的组3)ORDER BY子句分析函数中ORDER BY的存在将添加一个默认的开窗子句,这意味着计算中所使用的行的集合是当前分区中当前行和前面所有行,没有ORDER BY时,默认的窗口是全部的分区在Order by 子句后可以添加nulls last,如:order by comm desc nulls last 表示排序时忽略comm列为空的行.4)WINDOWING子句用于定义分析函数将在其上操作的行的集合Windowing子句给出了一个定义变化或固定的数据窗口的方法,分析函数将对这些数据进行操作默认的窗口是一个固定的窗口,仅仅在一组的第一行开始,一直继续到当前行,要使用窗口,必须使用ORDER BY子句根据2个标准可以建立窗口:数据值的范围(RANGES)或与当前行的行偏移量.5)Rang窗口Range 5 preceding:将产生一个滑动窗口,他在组中拥有当前行以前5行的集合ANGE窗口仅对NUMBERS和DATES起作用,因为不可能从VARCHAR2中增加或减去N个单元另外的限制是ORDER BY中只能有一列,因而范围实际上是一维的,不能在N维空间中例:avg(t.sal) over(order by t.hiredate asc range 100 preceding) 统计前100天平均工资6)Row窗口利用ROW分区,就没有RANGE分区那样的限制了,数据可以是任何类型,且ORDER BY 可以包括很多列7)Specifying窗口UNBOUNDED PRECEDING:这个窗口从当前分区的每一行开始,并结束于正在处理的当前行CURRENT ROW:该窗口从当前行开始(并结束)Numeric Expression PRECEDING:对该窗口从当前行之前的数字表达式(Numeric Expression)的行开始,对RANGE来说,从从行序值小于数字表达式的当前行的值开始.Numeric Expression FOLLOWING:该窗口在当前行Numeric Expression行之后的行终止(或开始),且从行序值大于当前行Numeric Expression行的范围开始(或终止)range between 100 preceding and 100 following:当前行100前,当前后100后注意:分析函数允许你对一个数据集进排序和筛选,这是SQL从来不能实现的.除了最后的Order by子句之外,分析函数是在查询中执行的最后的操作集,这样的话,就不能直接在谓词中使用分析函数,即不能在上面使用where或having子句二、Oracle分析函数简单实例:下面我们通过一个实际的例子:按区域查找上一年度订单总额占区域订单总额20%以上的客户,来看看分析函数的应用。

oracle分析函数

oracle分析函数

oracle分析函数
Oracle分析函数是一组可用于处理数据集的函数。

它们可以帮助您计算数据的统计值,如求和、平均值、最小值和最大值。

此外,还可以对数据进行细粒度的分析,如数据分析、排序、汇总和聚合。

Oracle分析函数可以提高您的应用程序的性能,并使您能够缩短查询时间。

Oracle分析函数可以分为三类:统计函数、数据分析函数和排序函数。

统计函数可以帮助您计算数据集的基本统计信息,如求和、平均值、最小值和最大值。

数据分析函数可以帮助您对数据进行更细粒度的分析,如数据分组、汇总和聚合。

排序函数可以帮助您对数据进行排序,以便更好地分析数据。

Oracle分析函数的优点非常明显,它们可以提高您的应用程序的性能,而且可以缩短查询时间。

此外,它们还可以提供准确和可靠的数据。

因此,当您需要对数据进行分析时,Oracle分析函数是一个有用的工具。

Oracle分析函数是一个强大的工具,可以帮助您更有效地处理数据集,从而获得更准确、更可靠的结果。

它们可以帮助您更快地执行复杂的查询,并使您能够更准确地分析和理解数据。

因此,Oracle 分析函数可以极大地提高您的业务分析效率,从而给您带来更大的利润。

Oracle9i动态SGA,PGA特性探索

Oracle9i动态SGA,PGA特性探索

Oracle9i动态SGA,PGA特性探索“In the latest release 10.2 Oracle changed these default values. The memory allocated to a single SQL operator(_smm_max_size) is limited to:for P_A_T <= 500MB the parameter _smm_max_size = 20% of P_A_Tfor P_A_T between 500MB and 1000MB the parameter _smm_max_size = 100Mfor P_A_T betweeen 1001MB and 2560MB (2.5GB) the parameter _smm_max_size = 10% of P_A_TI have seen even cases when these values were even bigger after the instance was restarted with P_A_T set at 4GB.The maximum value for parallel operations changed from 30% to 50% PGA_AGGREGATE_TARGET/DOP. Also the DOP changed. When DOP <=5 then _smm_max_size is used, otherwise _smm_px_max_size/DOP limits the maximum memory usage. . .转载:/ORACLE-a117737.htmoracle中SGA的设置关键词: sga关于SGA设置的⼀点总结本总结不针对特例,仅对服务器只存在OS + ORACLE 为例,如果存在其他应⽤请酌情考虑写这个也是因为近来这种重复性的问题发⽣的太多所导致的⾸先不要迷信STS,SG,OCP,EXPERT 等给出的任何建议、内存百分⽐的说法基本掌握的原则是, data buffer 通常可以尽可能的⼤,shared_pool_size 要适度,log_buffer 通常⼤到⼏百K到1M就差不多了设置之前,⾸先要明确2个问题1:除去OS和⼀些其他开销,能给ORACLE使⽤的内存有多⼤2:oracle是64bit or 32 bit,32bit 通常 SGA有 1.7G 的限制(某些OS的处理或者WINDOWS上有特定设定可以⽀持到2G以上甚⾄达到3.7G,本⼈⽆这⽅⾯经验)下⾯是我的windows2000下的oracle :SQL> select * from v$version;BANNER----------------------------------------------------------------Oracle8i Enterprise Edition Release 8.1.7.0.0 - ProductionPL/SQL Release 8.1.7.0.0 - ProductionCORE 8.1.7.0.0 ProductionTNS for 32-bit Windows: Version 8.1.7.0.0 - ProductionNLSRTL Version 3.4.1.0.0 - ProductionSQL>windows上存在32bit的限制,如AIX、HP UNIX 等有明确的64BIT OS and ORACLE的版本,32bit oracle可以装在64bit os 上,64 bit oracle不能装在32 bit OS上不管oracle是32 bit ORACLE还是 64 bit 的,假定应⽤存在没有很好的使⽤bind var 的情况,也不能设置 shared_pool_size 过⼤,通常应该控制在200M--300M,如果是 ORACLE ERP ⼀类的使⽤了很多存储过程函数、包,或者很⼤的系统,可以考虑增⼤shared_pool_size ,但是如果超过500M可能是危险的,达到1G可能会造成CPU的严重负担,系统甚⾄瘫痪。

Oracle9i管理工具[1]

Oracle9i管理工具[1]

学习改变命运,知 识创造未来
Oracle9i管理工具[1]
二 SQL* Plus命令
输入PL/SQL语句块
在SQL*Plus中进入PL/SQL块输入模式的方法有两种: 输入DECLARE或BEGIN并回车; 输入创建存储过程或函数的语句(如CREATE PROCEDURE)
块输入完成后用“.”结束输入,回到命令提示符状态,这时, PL/SQL块存入了SQL缓存,要执行该块,在命令提示符下输入RUN 或“/”即可。
学习改变命运,知 识创造未来
Oracle9i管理工具[1]
二 SQL* Plus命令 (2)格式设置命令
2.列格式 COLUMN命令用于制定输出列的标题、格式和处理的设置。
学习改变命运,知 识创造未来
Oracle9i管理工具[1]
2.列格式 1) 改变缺省的列标题
COLUMN column_name HEADING column_heading For example: Sql>select * from dept; DEPTNO DNAME LOC ---------- ---------------------------- --------10 ACCOUNTING NEW YORK sql>col LOC heading location sql>select * from dept; DEPTNO DNAME location --------- ---------------------------- ----------10 ACCOUNTING NEW YORK
学习改变命运,知 识创造未来
Oracle9i管理工具[1]
二 SQL* Plus命令 (1)环境维护命令

Oracle9i应用系统优化

Oracle9i应用系统优化

Oracle9i应用系统优化应用系统方案制定准确,对应用系统运行环境分析合理、正确,在数据库服务器性能、存储空间、网络带宽等方面的配置能够达到系统运行要求.2、优化目标•响应时间与吞吐量平衡•临界资源2.1 响应时间与吞吐・平衡根据应用类型的不一致,性能优化的目标不一致:在线事务处理系统OLTP)把吞吐量定义为性能指标;决策支持系统(DSS)把响应时间定义为性能指标。

响应时间响应时间=服务时间+等待时间系统吞吐量系统吞吐量指在给定的时间内所完成的工作量。

有下列两种技术:•以相同的资源来完成更多的工作(减少服务时间):•通过减少整个响应时间来更快完成工作。

等待时间当竞争增强的时候,某个任务的服务时间也许保持不变,但它的等待时间将增长。

我们开发的系统通常为OLTP与DSS的复合系统,侧重于OLTP,在硬件同意的情况下最好能够将运行数据库、分析数据库分离。

2.2 临界资源诸如CPU、内存、I/。

容量、网络带宽等资源,都是减少时间的关键因素。

性能好坏取决于下列因素:•可用资源的数量•需要该资源的客户方的数目•客户方等待资源所消耗的时间•客户保持资源的时间长短随着请求单元的增加,服务时间也增加。

为了处理这种情形,用户能够选择:•通过限制请求的速率,从而保护可同意响应时间•还可通过增加资源数目,如CPU与硬盘(增加资源的前提是应用系统设计良好,同时已经做了充分的优化)3、优化阶段从实际做的项目过程来看,除了系统安装优化外,系统优化往往都是在系统实施、运行时才考虑, 事实上到这阶段做系统优化的局限性比较大,由于系统架构设计都成型、固化,大幅度调整设计的代价非常昂贵,通常只能在局部领域做优化,只能通过重新分配内存或者优化I/O来或者多或者少地提高性能,实际上优化应该贯穿系统设计、开发、安装、测试、运行整个过程。

3.1 设计阶段为了达到最佳的效果,优化工作应当从设计阶段进行,而不是在系统实施后进行。

在数据库设计阶段,个人认为需要注意如下几个方面:•业务对象不能建立在系统表空间;•索引表空间与业务表空间分开;•将LoB类型的字段与其它的类型分开;•根据应用系统功能确定是否要使用冗余字段;•正确的主键字段的选择,建议使用数字,不推荐使用复合主键;3.2 开发、测试阶段在开发实现阶段,个人认为需要注意如下几个方面:•执行Sql使用变量绑定的方式,尽可能的保留在共享内存中,提高Sql命中率;•多表关联查询时使用有效的连接顺序:•尽可能的降低客户端与服务器的网络数据交互,某个业务功能点需要频繁与数据库交互的,建议使用存储过程、临时表实现;•根据查询条件建立必要的索引,查询条件中使用OraCIe函数建立相对应的函数索引,数据值范围较小的使用位图索引•多张表关联查询时,有的时候可使用先查询符合条件对应的表中关键字,然后通过关键字再查询对应表中有关信息;•频繁访问,较少更新的数据量较小的表信息可使用缓存的方式;•在实现批量更新、插入时,要使用jdbc批量执行方法,同时调整对应的fetchsize参数。

oracle分析函数

oracle分析函数

oracle分析函数
Oracle分析函数是指将多行数据集以单行形式显示的函数。

它提供
了一种组合数据,并返回汇总结果的方法。

它们允许Oracle查询来计算
数据的总和、平均值、最大值、最小值等。

Oracle中最常用的分析函数是AVG(平均数)、COUNT(计数)、MAX (最大值)、MIN(最小值)、SUM(求和)和VARIANCE(方差)函数。

AVG函数用于求一组数据的平均值,它可以接受一个或多个参数。

例如,要计算员工表中所有员工的平均年龄,我们可以使用以下语句:SELECT AVG(age) FROM employees;。

COUNT函数用于统计某个列中的值数量,它可以接受一个或多个参数。

例如,要计算员工表中所有员工的数量,我们可以使用以下语句:SELECT COUNT(*) FROM employees;。

MAX和MIN函数用于从一组数据中查找最大值和最小值。

例如,要查
找员工表中年纪最大和最小的员工,我们可以使用以下语句:SELECT MAX(age), MIN(age) FROM employees;。

SUM函数用于计算一组数据的总和。

例如,要计算员工表中所有员工
的工资总和,我们可以使用以下语句:
SELECT SUM(salary) FROM employees;。

VARIANCE函数用于计算数据的方差。

例如,要计算员工表中所有员
工的年龄方差,我们可以使用以下语句:
SELECT VARIANCE(age) FROM employees;。

oracle性能调优篇--Oracle9i 的查询优化

oracle性能调优篇--Oracle9i 的查询优化

oracle性能调优篇----Oracle9i 的查询优化本文描述了Oracle 的查询优化程序,它是数据库的关键组件,能让Oracle 的用户获得极佳的执行性能。

Oracle 的查询优化技术在功能上无与伦比,本文详细讨论了查询优化的所有重要领域。

简介什么是查询优化程序?查询优化对于关系数据库的性能,特别是对于执行复杂SQL 语句的性能而言至关重要。

查询优化程序确定执行每一次查询的最佳策略。

例如,查询优化程序选择对于指定的查询是否使用索引,以及在联接多个表时采用哪一种联接技术。

这类决策对SQL 语句的执行性能有很大的影响,查询优化对于每一种应用程序都是关键技术,应用程序涉及的范围从操作系统到数据仓库,从分析系统到内容管理系统。

查询优化程序对于应用程序和最终用户是完全透明的。

由于应用程序可能生成非常复杂的SQL 语句, 查询优化程序必须精心构建、功能强大,以保障良好的执行性能。

例如,查询优化程序可转换SQL 语句,使复杂的语句转换成为等价的但执行性能更好的SQL 语句。

查询优化程序的典型特征是基于开销。

在基于开销的优化策略中,对于给定查询生成多个执行计划,然后对每个计划估算开销。

查询优化程序选用估算开销最低的计划。

Oracle 在查询优化方面提供了什么?Oracle 的优化程序可称是业界最成功的优化程序。

基于开销的优化程序自1992 年随Oracle7 推出后,通过10 年的丰富的实际用户经验,不断得到提高和改进。

好的查询优化程序不是基于纯粹的理论假设及谓词在实验室中开发出来的,而是通过适合实际用户需求开发和磨合出来的。

Oracle 的查询优化程序比任何其他查询优化程序在数据库应用程序的应用都要多,而且Oracle 的优化程序一直由于实际应用的反馈而得到改进。

Oracle 的优化程序包含4 大主要部分(本文将在以下章节详细讨论这些部分):SQL 语句转换:在查询优化中Oracle 使用一系列精深技术对SQL 语句进行转换。

Oracle 9i(第一讲)

Oracle 9i(第一讲)


牢记安全之责,善谋安全之策,力务 安全之 实。20 20年1 0月15 日星期 四9时2 8分49 秒Thursday, October 15, 2020

相信相信得力量。20.10.152020年 10月15 日星期 四9时 28分4 9秒20. 10.15
谢谢大家!

树立质量法制观念、提高全员质量意 识。20 .10.15 20.10 .15Th ursda y, October 15, 2020
•Sybase •Oracle •db2
负载量: 海量数据
为什么要学oracle
▪ 需求量大
– 从目前软件公司对数据库的需求上来看,oracle程序 员的需求量是最大的。这里我们可以看一下数据(有 图有真相)。
为什么要学oracle
上海市oracle 相关职位需求 量为1910个。
为什么要学oracle
上海市sql server相关职位 需求量为1126 个。
为什么要学oracle
上海市db2相关 职位需求量为 435个。
为什么要学oracle
上海市sybase 相关职位需求 量为199个。
为什么要学oracle
▪ 薪水高
– Oracle的DBA普遍工资比较的高,我们可以看一下通 过oracle的ocp认证参加工作的人工资情况。


Oracle及oracle公司介绍
▪ 公司总裁-Larry Ellison
✓财富榜前30名内 ✓与盖茨相媲美 ✓ORACLE建立者和发展者 ✓IT风云人物
Oracle及oracle公司介绍
▪ 产品线
– 工具 ▪ JDeveloper---JBuilder ▪ Developer2000---VB ▪ Designer2000---数据库建模

2oracle9i体系结构

2oracle9i体系结构
辽宁工程技术大学电子与信息工程学院
2.2.4 配置文件
如何判断当前数据库使用的是哪个配置文件? select name, value from v$parameter where name = 'spfile'; value的值为空, 说明使用的配置文件是init.ora value的值不为空, 说明使用的是spfile***.ora
分配给段的第一个区称初始分区,以后分配的区称 增量分区
辽宁工程技术大学电子与信息工程学院
2.3.3 区
主要的几个存储参数: INITIAL:段建立时分配的第一个区的大小(单位: 字节) NEXT:段内分配的下一个增量区大小(单位:字 节) MAXEXTENTS:分配给段的区总数 MINEXTENTS:建立段时分配的区总数,也就是段 的最小区数量 PCTINCREASE:为段分配的每个增量区超过上一 个区的百分比
– 如果数据库使用过程中的临时数据较多且频 繁,则应当在数据库中创建一个专门用来存 储临时数据的临时表空间。否则 临时数据会 存储在SYSTEM表空间中,影响整个系统的 性能。
辽宁工程技术大学电子与信息工程学院
2.3.1 表空间
表空间分类 用户表空间 – 用于存放用户的私有信息。
辽宁工程技术大学电子与信息工程学院
2.3.1 表空间
表空间分类 SYSTEM表空间 – 自动建立(随数据库创建) – 存放数据字典 – 存储过程、包、函数和触发器的定义 – 存储数据库对象的定义
辽宁工程技术大学电子与信息工程学院
2.3.1 表空间
表空间分类
回滚表空间 – 回滚表空间(RollBack Table Space)是用于
辽宁工程技术大学电子与信息工程学院
2.3 Oracle9i的逻辑结构
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SAMPLE:下例计算每个员工的工资占该类员工总工资的百分比
SELECT last_name, salary, RATIO_TO_REPORT(salary) OVER () AS rr
FROM employees
WHERE job_id = 'PU_CLERK';
LAST_NAME SALARY RR
ORACLE9I分析函数
[ 2006-9-30 9:26:00 | By: hewy0526 ]
RATIO_TO_REPORT
功能描述:该函数计算expression/(sum(expression))的值,它给出相对于总数的百分比,即当前行对sum(expression)的贡献。
------------------------- ---------- ----------
Khoo 3100 .223021583
Baida 2900 .208633094
Tobias 2800 .201438849
REGR_SXY: 返回值等于REGR_COUNT(expr1, expr2) * COVAR_POP(expr1, expr2)
(下面的例子都是在SH用户下完成的)
SAMPLE 1:下例计算1998年最后三个星期中两种产品(260和270)在周末的销售量中已开发票数量和总数量的累积斜率和回归线的截距
Himuro 2600 .18705036
Colmenares 2500 .179856115
REGR_ (Linear Regression) Functions
功能描述:这些线性回归函数适合最小二乘法回归线,有9个不同的回归函数可使用。
12 26 67.2658228 58.9712313
12 26 67.2658228 58.9712313
12 27 37.5245541 284.958221
12 27 37.5245541 284.958221
ORDER BY t.day_number_in_month;
DAY_NUMBER_IN_MONTH Regr_AvgY Regr_AvgX
------------------- ---------- ----------
14 882 24.5
OVER (PARTITION BY t.fiscal_month_number ORDER BY t.day_number_in_month)
"Regr_Count"
FROM sales s, times t
WHERE s.time_id = t.time_id
AND t.fiscal_year = 1998 AND t.fiscal_month_number = 4;
4 3300
.
.
.
26 21450
30 22200
SAMPLE 3:下例计算1998年每月销售量中已开发票数量和总数量的累积回归线决定系数
SELECT t.fiscal_month_number,
ORDER BY t.fiscal_month_desc, t.day_number_in_month;
Month Day CUM_SLOPE CUM_ICPT
---------- ---------- ---------- ----------
12 12 -68 1872
OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month)
"Regr_AvgY",
REGR_AVGX(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month)
12 12 -68 1872
12 13 -20.244898 1254.36735
12 13 -20.244898 1254.36735
12 19 -18.826087 1287
7 .965342011
8 .955768075
9 .959542618
10 .938618575
11 .880931415
If VAR_POP(expr1) > 0 and VAR_POP(expr2 != 0 then
return POWER(CORR(expr1,expr),2)
REGR_AVGX:计算回归线的自变量(expr2)的平均值,去掉了空对(expr1, expr2)后,等于AVG(expr2)
SELECT t.fiscal_month_number "Month", t.day_number_in_month "Day",
REGR_SLOPE(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month) AS CUM_SLOPE,
REGR_R2(SUM(s.amount_sold), SUM(s.quantity_sold))
OVER (ORDER BY t.fiscal_month_number) "Regr_R2"
FROM sales s, times t
WHERE s.time_id = t.time_id
DAY_NUMBER_IN_MONTH Regr_Count
------------------- ----------
1 825
2 1650
3 2475
REGR_SLOPE:返回斜率,等于COVAR_POP(expr1, expr2) / VAR_POP(expr2)
REGR_INTERCEPT:返回回归线的y截距,等于
AVG(expr1) - REGR_SLOPE(expr1, expr2) * AVG(expr2)
14 882 24.5
REGR_COUNT:返回用于填充回归线的非空数字对的数目
REGR_R2:返回回归线的决定系数,计算式为:
If VAR_POP(expr2) = 0 then return NULL
If VAR_POP(expr1) = 0 and VAR_POP(expr2) != 0 then return 1
REGR_AVGY:计算回归线的应变量(expr1)的平均值,去掉了空对(expr1, expr2)后,等于AVG(expr1)
REGR_SXX: 返回值等于REGR_COUNT(expr1, expr2) * VAR_POP(expr2)
REGR_SYY: 返回值等于REGR_COUNT(expr1, expr2) * VAR_POP(expr1)
"Regr_AvgX"
FROM sales s, times t
WHERE s.time_id = t.time_id
AND s.prod_id = 260
AND t.fiscal_month_desc = '1998-12'
AND t.fiscal_week_number IN (51, 52)
REGR_INTERCEPT(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month) AS CUM_ICPT
FROM sales s, times t
12 27 37.5245541 284.958221
SAMPLE 2:下例计算1998年4月每天的累积交易数量
SELECT UNIQUE t.day_number_in_month,
REGR_COUNT(s.amount_sold, s.quantity_sold)
12 .882769189
SAMPLE 4:下例计算1998年12月最后两周产品260的销售量中已开发票数量和总数量的累积平均值
SELECT t.day_number_in_month,
REGR_AVGY(s.amount_sold, s.quantity_sold)
AND t.fiscal_year = 1998
GROUP BY t.fiscal_month_number
ORDER BY t.fiscal_month_number;
FISCAL_MONTH_NUMBER Regr_R2
------------------- ----------
12 20 62.4561404 125.28655
12 20 62.4561404 125.28655
12 20 62.4561404 125.28655
12 20 62.4561404 125.28655
WHERE s.time_id = t.time_id
AND s.prod_id IN (270, 260)
AND t.fiscal_year=1998
AND t.fiscal_week_number IN (50, 51, 52)
AND t.day_number_in_7372984
4 .807019972
5 .932745567
6 .94682861
相关文档
最新文档