用pl/sql安装oracle explain plan(执行计划)

| 收藏本文 下载本文 作者:BQ鲸沫

下面是小编为大家带来的用pl/sql安装oracle explain plan(执行计划)(共含3篇),希望大家能够喜欢!同时,但愿您也能像本文投稿人“BQ鲸沫”一样,积极向本站投稿分享好文章。

用pl/sql安装oracle explain plan(执行计划)

篇1:用pl/sql安装oracle explain plan(执行计划)

1、用pl/sql以管理员身份登录数据库

2、运行脚本文件utlxplan,路径为%oracle_home%/rdms/admin,例如D:Oraclerdbmsadmin

注意下面要选择所有文件类型

然后运行,

运行代码: sql> create public synonym plan_table for plan_table;

sql>grant all on plan_table to public ;

接下来按照上面的方法运行第二个脚本plustrace.sql,,路径是%oracle_home%/sqlplus/admin

然后执行 SQL>grant plustrace to public;

即完成了安装过程

autotrace功能只能在SQL*PLUS里使用,因此需要打开sql*plus

sql>set autotrace on

例:

sql> select count(*) from test;

count(*)

-------------

4

Execution plan

----------------------------

0 select statement ptimitzer=choose (cost=3 card=1)

1 0 sort(aggregate)

2 1 partition range(all)

3 2 table access (full) of 't_test' (cost=3 card=900)

摘自 wudiisss的专栏

篇2:菜鸟学oracle:用PL/SQL画直方图

现在用的库里有一个MV是统计按小时的访问量的,数据如下代码:

SQL> select * from mv_time_stat;

TIME CNT

----------

0 187

1 51

2 34

3 19

4 19

5 20

6 50

7 107

8 682

9 1342

10 1854

11 1292

12 1416

13 1180

14 1217

15 1573

16 1785

17 1469

18 1892

19 1907

20 1602

21 1540

22 1013

23 441

24 rows selected.

--------------------------------------------------------------------------------

某年月日,突发奇想,打算在sqlplus下面按上面的数据画个直方图出来,首先写了个竖列的(因为好写):

代码:--------------------------------------------------------------------------------

SQL> COL Time FORMAT A7

SQL> SELECT LPAD(DECODE(TIME,TO_CHAR(SYSDATE,'HH24'),'NOW: '||TO_CHAR(TIME),TO_CHAR(TIME)),7,' ') AS “Time”,

2 SUBSTR('|'||LPAD('> '||CNT,CEIL(CNT/A.TOTAL*300)+LENGTH(TO_CHAR(CNT))+1,'-'),1,35) AS “ Count per hour”

3 FROM MV_TIME_STAT,(SELECT SUM(CNT) AS TOTAL FROM MV_TIME_STAT) A;

COL Time CLEAR

Time Count per hour

------- -----------------------------------------------------------------

0 |--> 187

1 |> 51

2 |> 34

3 |> 19

4 |> 19

5 |> 20

6 |> 50

7 |-> 107

NOW: 8 |---------> 682

9 |-----------------> 1342

10 |------------------------> 1854

11 |-----------------> 1292

12 |------------------> 1416

13 |---------------> 1180

14 |----------------> 1217

15 |--------------------> 1573

16 |-----------------------> 1785

17 |-------------------> 1469

18 |-------------------------> 1892

19 |-------------------------> 1907

20 |---------------------> 1602

21 |--------------------> 1540

22 |-------------> 1013

23 |-----> 441

24 rows selected.--------------------------------------------------------------------------------

然后又想,怎么样把它横过来,到网上查资料,又突击学习了下分析函数,写了一个过程是这个样子的:

代码:

--------------------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE HISTOGRAPH(HEIGHT NUMBER DEFAULT 15) AS

MAX_ONE NUMBER;

STR_LINE VARCHAR(120);

STR_TEMP VARCHAR(120);

I NUMBER;

BEGIN

DBMS_OUTPUT.PUT_LINE(LPAD('^',14,' '));

SELECT MAX(CNT) INTO MAX_ONE FROM MV_TIME_STAT;

FOR I IN 1 .. HEIGHT+1 LOOP

STR_LINE:=LPAD(TO_CHAR(MAX_ONE-(I-1)*MAX_ONE/HEIGHT,'99999')||'-'||TO_CHAR(MAX_ONE-(I-2)*MAX_ONE/HEIGHT,'99999')||'|',14,'0');

SELECT MAX(SYS_CONNECT_BY_PATH(

DECODE(SIGN(CNT-MAX_ONE+(I-1)*MAX_ONE/HEIGHT),-1,

DECODE(SIGN(CNT-MAX_ONE+(I-2)*MAX_ONE/HEIGHT),-1,'^','*'),

'|'),

' ')) INTO STR_TEMP

FROM MV_TIME_STAT

START WITH TIME=0

CONNECT BY PRIOR TIME=TIME-1;

STR_LINE:=STR_LINE||STR_TEMP;

DBMS_OUTPUT.PUT_LINE(REPLACE (STR_LINE,'^',' '));

END LOOP;

SELECT MAX(SYS_CONNECT_BY_PATH(TO_CHAR(TIME,'00'),'^')) INTO STR_TEMP

FROM MV_TIME_STAT

START WITH TIME=0

CONNECT BY PRIOR TIME=TIME-1;

DBMS_OUTPUT.PUT_LINE(LPAD('0',14,' ')||LPAD('>',LENGTH(REPLACE(STR_TEMP,' '))+3,'-'));

DBMS_OUTPUT.PUT_LINE(REPLACE(LPAD('^',14,' ')||REPLACE(STR_TEMP,' '),'^',' '));

END;

/

Procedure created.

SQL> exec histograph;

^

1907- 2034| |

1780- 1907| | | | |

1653- 1780| | | | |

1526- 1653| | | | | | | |

1398- 1526| | | | | | | | | |

1271- 1398| | | | | | | | | | | |

1144- 1271| | | | | | | | | | | | | |

1017- 1144| | | | | | | | | | | | | |

890- 1017| | | | | | | | | | | | | | |

763- 890| | | | | | | | | | | | | | |

636- 763| | | | | | | | | | | | | | | |

509- 636| | | | | | | | | | | | | | | |

381- 509| | | | | | | | | | | | | | | | |

254- 381| | | | | | | | | | | | | | | | |

127- 254| | | | | | | | | | | | | | | | | |

0- 127| | | | | | | | | | | | | | | | | | | | | | | | |

0-------------------------------------------------------------------------->

00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23

PL/SQL procedure successfully completed.

篇3:用一个实例讲解Oracle数据库的PL/SQL语句块

PL/SQL程序块以显示所给出雇员编号的雇员的详细信息

1 SQL> Declare

2 v_empno emp.empno%Type; /*声明变量v_empno,%type:使该变量的类型与emp表中的empno类型相同*/

3 v_emprecord emp%Rowtype;/*声明变量v_emprecord,%rowtype:使该变量的类型与emp表中的整行相同*/

4 Begin

5 Select * Into v_emprecord From emp Where empno=&v_empno;

6 dbms_output.put_line(雇员编号||v_emprecord.empno);

7 dbms_output.put_line(雇员姓名||v_emprecord.ename);

8 dbms_output.put_line(入职日期||v_emprecord.hiredate);

9 dbms_output.put_line(职位||v_emprecord.job);

10 dbms_output.put_line(管理员编号||v_emprecord.mgr);

11 dbms_output.put_line(工资||v_emprecord.sal);

12 dbms_output.put_line(奖金||v_emprecord.comm);

13 dbms_output.put_line(部门编号||v_emprecord.deptno);

14 End;

if条件控制语句

语法:

1 if condition then statement;

2 elsif condition then statement;

3 else statement;

4 end if;

5/*condition 是一个布尔变量(值为true,false 或null,当表达式为true是执行then);statement是PL/SQL 或SQL 语句;*/

通过if-then-elsif,按下列加薪比执行:(加薪的百分比是以他们现有的薪水为根据的)

Deptno Raise(%age)

10 5%

20 10%

30 15%

40 20%

1 SQL> Declare

2 v_empno emp.empno%Type;

3 v_emprecord emp%Rowtype;

4 v_sal emp.sal%Type;

5 Begin

6 Select * Into v_emprecord From emp Where empno=&v_empno;

7 If v_emprecord.empno=10 Then v_sal:=v_emprecord.sal*1.05;

8 Elsif v_emprecord.empno=20 Then v_sal:=v_emprecord.sal*1.10;

9 Elsif v_emprecord.empno=30 Then v_sal:=v_emprecord.sal*1.15;

10 Elsif v_emprecord.empno=40 Then v_sal:=v_emprecord.sal*1.20;

11 End If;

12 End;

for loop循环控制语句语法:

1for counter in [reverse] lower_bower..upper_bound loop

2statement1;

3statement2;

4

5end loop;

6/*counter 是一个隐式声明的整数,每次循环一次其自增1或自减1; reverse 将counter 从最大值每次减1至最小值; lower_bound 指定counter 变量变化范围的下届 upper_bound 指定counter 变量变化范围的上届*/

利用for loop 循环控制语句实现向“emp”表添加10个新雇员编号;

1 SQL> Declare

2 v_empno emp.empno%Type;

3 Begin

4 Select Max(empno) Into v_empno From emp;

5 For i In 1..10 Loop

6 v_empno:=v_empno+1;

7 Insert Into emp (empno) Values (v_empno);

8 End Loop;

9 End;

SQL实习总结

sql查询语句

SQL语言学习总结

安装工作总结

安装委托书

安装合同

安装合同范本

安装申请书

安装承诺书

安装协议书

用pl/sql安装oracle explain plan(执行计划)(合集3篇)

欢迎下载DOC格式的用pl/sql安装oracle explain plan(执行计划),但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档