简单整理oracle日常应用笔记。
1、采用excel表格中的数据直接粘贴数据库记录中,默认会在后面加一个空格“”,操作完成后一定要记得对空格匹配然后修改一下。
2、查询数据库里的所有表结构,
采用select * from dba_tables(sys登录);
查看某个用户所拥有的表:select * from all_tables WHERE owner='SCOTT' ;
或者 SELECT * FROM DBA_TABLES WHERE OWNER='SCOTT';
3、上午在PL/SQL dev中建表时提示ORA-00907: 缺失右括号,检查sql脚本发现
eu_bctype INT(50)
Oracle中int为定长的类型,不能再规定其长度,需要改成number;
4、intersect运算
返回查询结果中相同的部分既他们的交集
1
2
3
|
select
*
from
abc
intersect
select
*
from
abc2 ;
|
5、minus运算
返回在第一个查询结果中与第二个查询结果不相同的那部分行记录,
即两个结果的差集
1
2
3
|
select
*
from
abc2
minus
select
*
from
abc ;
|
6、TO_CHAR格式化小数点输出
1
|
select
To_char(
sum
(score),9999999.99)
from
score;
|
7、有很多种方法可以用来找出哪些SQL语句需要优化,但是很久以来,最简单的方法都是分析保存在VSQL视图中的缓存的SQL信息。通过VSQL视图中的缓存的SQL信息。通过VSQL视图,可以确定具有高消耗时间、CUP和IO读取的SQL语句
查看总消耗时间最多的前10条SQL语句
1
2
3
4
5
6
7
8
9
10
|
select
*
from
(
select
v.sql_id,
v.child_number,
v.sql_text,
v.elapsed_time,
v.cpu_time,
v.disk_reads,
rank() over(
order
by
v.elapsed_time
desc
) elapsed_rank
from
v$sql v) a
where
elapsed_rank <= 10;
|
查看CPU消耗时间最多的前10条SQL语句
1
2
3
4
5
6
7
8
9
10
|
select
*
from
(
select
v.sql_id,
v.child_number,
v.sql_text,
v.elapsed_time,
v.cpu_time,
v.disk_reads,
rank() over(
order
by
v.cpu_time
desc
) elapsed_rank
from
v$sql v) a
where
elapsed_rank <= 10;
|
查看消耗磁盘读取最多的前10条SQL语句
1
2
3
4
5
6
7
8
9
10
|
select
*
from
(
select
v.sql_id,
v.child_number,
v.sql_text,
v.elapsed_time,
v.cpu_time,
v.disk_reads,
rank() over(
order
by
v.disk_reads
desc
) elapsed_rank
from
v$sql v) a
where
elapsed_rank <= 10;
|
8、oracle优化操作
1
2
|
a<>0 改为 a>0
or
a<0
a<>’’ 改为 a>’’
|
1
2
|
DELETE
FROM
EMP E
WHERE
E.ROWID > (
SELECT
MIN
(X.ROWID)
FROM
EMP X
WHERE
X.EMP_NO = E.EMP_NO);
|
1
2
3
4
|
高效:
SELECT
*
FROM
EMP
WHERE
DEPTNO >=4
低效:
SELECT
*
FROM
EMP
WHERE
DEPTNO >3
|
9、oracle SQL分页查询处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
--分页查询1
SELECT
TAB2.*
FROM
(
SELECT
tab1.*, ROWNUM row_num
FROM
(
--把需要分页的sql直接放进来就行了
SELECT
t.*
FROM
T_T_DEPT t
) TAB1
WHERE
ROWNUM<21
) TAB2
WHERE
TAB2.row_num >10
--分页查询2
SELECT
TAB2.*
FROM
(
SELECT
tab1.*, ROWNUM row_num
FROM
(
--把需要分页的sql直接放进来就行了
SELECT
t.*
FROM
T_T_DEPT t
) TAB1
) TAB2
WHERE
TAB2.row_num
BETWEEN
11
AND
20
|