下面是小编为大家带来的用pl/sql安装oracle explain plan(执行计划)(共含3篇),希望大家能够喜欢!同时,但愿您也能像本文投稿人“BQ鲸沫”一样,积极向本站投稿分享好文章。
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的专栏
现在用的库里有一个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.
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查询语句
★ 安装工作总结
★ 安装委托书
★ 安装合同
★ 安装合同范本
★ 安装申请书
★ 安装承诺书
★ 安装协议书