更新时间:2022-09-15 13:21:26
简单整理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视图,可以确定具有高消耗时间、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
|
本文转自邴越博客园博客,原文链接:http://www.cnblogs.com/binyue/p/3325015.html,如需转载请自行联系原作者