PL/SQL开发五年工作经验精典实例
minus指令是运用在两个SQL语句上。它先找出第一个SQL语句所产生的结果,然后看这些结果有没有在第二个SQL语句的结果中,如果有的话,那这一笔资料就被去除,而不会在最后的结果中出现;
如果第二个SQL语句所产生的结果并没有存在于第一个SQL语句所产生的结果内,那这笔资料就被抛弃。
intersect指令是运用在两个SQL语句上,如果两个SQL语句的记录完全相同则显示相应记录,否则将不在结果中出现。
-------------------------------------------------------------------------------------------
2. 表空间(tablespace)、段(segment)、区段(extent)、块(block)的关系
1)表空间:是Oracle中的一个逻辑存储容器,位于存储层次体系的顶层,包含一个或多个数据文件。
2)段:占用存储空间的数据为对象,如表、索引、回滚段等;段由一个或多个区段组成。
3)区段:是文件中一个逻辑上连续分配的空间;区段由块组成。
4)块:是Oracle中最小的空间分配单位;数据行、索引条目或临时排序结果就存储在块中;Oracle中常见的块大小:2K、4K、8K、16K(最大不能超过32K)。
5)它们之间的关系:数据库由一个或多个表空间组成,表空间由一个或多个数据文件组成,表空间包含段,段由一个或多个区段组成,区段则由连续的块组成。
-------------------------------------------------------------------------------------------
3. 数据库分析技术语句
分析表: analyze table UNIT_PRE_CLAIM compute statistics;
分析索引:analyze index PK_UNIT_PRE_CLAIM_RELA_ID compute statistics;
分析列: analyze table zl_yhjbqk compute statistics for columns hbs_bh;
分析索引列:analyze table zl_yhjbqk compute statistics for all indexed columns;
-------------------------------------------------------------------------------------------
4. ORACLE的优化器共有3种:
a. RULE (基于规则的优化器)
。总是使用索引
。总是从驱动表开始(from子句最右边的表)
。只有在不可避免的情况下,才使用全表扫描
b. COST (基于成本的优化器)
。需要表、索引的统计资料
Analyze table customer compute statistics;
Analyze table customer estimate statistics sample 5000 rows;
。表中设置并行度、表分区
c. CHOOSE (选择性)
设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS. 你当然也在SQL句级或是会话(session)级对其进行覆盖.
为了使用基于成本的优化器(CBO, Cost-Based Optimizer), 你必须经常运行analyze命令,以增加数据库中的对象统计信息(object statistics)的准确性.如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关,如果table已经被analyze过, 优化器模式将自动成为CBO, 反之,数据库将采用RULE形式的优化器. 缺省情况下,ORACLE采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table
scan), 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器.注意: 在排序合并连接中不使用索引,如果查询返回两个表中大部分的数据快,那么CBO会认为全表扫描比索引扫描执行更快。
-------------------------------------------------------------------------------------------
5. Hint的常用用法(注意/*和+之间不能有空格)
1)/*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化.
2)/*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.
3)/*+CHOOSE*/ 表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量;
如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法;
4)/*+ RULE*/ 表明对语句块选择基于规则的优化方法.
5)/*+ROWID(TABLE)*/ 提示明确表明对指定表根据ROWID进行访问.
例如: SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA'
6)/*+INDEX(TABLE INDEX_NAME)*/ 表明对表选择索引的扫描方法.
7)/*+INDEX_JOIN(TABLE INDEX_NAME)*/ 提示明确命令优化器使用索引作为访问路径.
8)/*+APPEND*/ 直接插入到表的最后,可以提高速度.
例如: insert /*+append*/ into test1 select * from test4;
如用hint指定使用某个索引
select /*+ index(表名) */ col1 from 表名;
select /*+ index(表名 索引名) */ col1 from 表名;
select /*+ index(a 索引名) */ col1 from 表名 a;
其中
TABLE_NAME是必须要写的,且如果在查询中使用了表的别名,在hint也要用表的别名来代替表名;
INDEX_NAME可以不必写,Oracle会根据统计值选一个索引;
-------------------------------------------------------------------------------------------
6. 位图索引
位图索引储存主要用来节省空间,减少ORACLE对数据块的访问,它采用位图偏移方式来与表的行ID号对应,采用位图索引一般是重复值太多的表字段。位图索引在实际密集型OLTP(数据事务处理)中用得比较少,因为OLTP会对表进行大量的删除、修改、新建操作,ORACLE每次进行操作都会对要操作的数据块加锁,所以多人操作很容易产生数据块锁等待甚至死锁现象。在OLAP(数据分析处理)中应用位图有优势,因为OLAP中大部分是对数据库的查询操作,而且一般采用数据仓库技术,所以大量数据采用位图索引节省空间比较明显。
-------------------------------------------------------------------------------------------
7. 应该尽量避免出现left outer join, right outer join ,尤其是大表,大表更应该尽量避它作为外连接的驱动表
-------------------------------------------------------------------------------------------
8. 如获得完整的时间格式
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select to_char(to_date('2008-06-24','yyyy-mm-dd'),'day') from dual; --可以转换成中文星期几
-------------------------------------------------------------------------------------------
9. 随机抽取前N条记录的问题
select * from (select * from tablename order by sys_guid()) where rownum < N;
抽取从N行到M行的记录,如从20行到30行的记录
select * from (select rownum id,t.* from table where ……
and rownum <= 30) where id > 20;
-------------------------------------------------------------------------------------------
10. 怎么样在ORACLE中定时运行存储过程
可以利用dbms_job包来定时运行作业,如执行存储过程,一个简单的例子,提交一个作业:
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno, 'ur_procedure;', SYSDATE, 'SYSDATE + 1');
commit;
END;
之后,就可以用以下语句查询已经提交的作业 select * from user_jobs;
-------------------------------------------------------------------------------------------
11. 固定列数的行列转换
student subject grade
-------- ------- -----
student1 语文 80
student1 数学 70
student1 英语 60
student2 语文 90
student2 数学 80
student2 英语 100
转换为:
语文 数学 英语
student1 80 70 60
student2 90 80 100
…… …… …… …… ……
语句如下:
Select Student,
Sum(Decode(Subject, '语文', Grade, Null)) "语文",
Sum(Decode(Subject, '数学', Grade, Null)) "数学",
Sum(Decode(Subject, '英语', Grade, Null)) "英语"
From Table
Group By Student
-------------------------------------------------------------------------------------------
12. 怎么样实现分组取前N条记录 (如获取每个部门薪水前三名的员工)
Select *
From (Select Depno, Ename, Sal,
Row_Number() Over(Partition By Depno Order By Sal Desc) Rn
From Emp)
Where Rn <= 3;
本文转自:http://sakyone.iteye.com/blog/812000
PL/SQL开发五年工作经验精典实例的更多相关文章
- 常用的PL/SQL开发原则
(1)广泛使用绑定变量,特别是批量绑定,因为这可以有效的避免sql的硬解析和PL/SQL引擎和SQL引擎的上下文切换!(2)广泛使用UROWID来处理DML语句(UROWID是ROWID扩展,ORAC ...
- PL/SQL开发中动态SQL的使用方法
一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DDL语句及系统控制语句,可以通过使 ...
- ORACLE PL/SQL开发--bulk collect的用法 .
刚刚在inthirties老大的博客里看到这篇文章,写的不错,正好自己最近在学习PL/SQL,转过来学习学习. ============================================ ...
- Oracle PL/SQL开发基础(第三十三弹:EXCEPTION_INIT)
如果有一些异常并没有异常名称,比如一些ORA-开头的异常并没有一个友好的预定义的异常定义,此时在WHEN子句中无法使用具体的异常名称,必须要使用OTHERS异常处理器进行捕捉.通过EXCEPTION_ ...
- PL/SQL第五章 Order by排序
-- 排序 -- 1.列明排序 -- 2.别名排序 -- 3.列位置排序(当使用union,union all,intersect,minus集合操作,列明不同,但希望排序) SELECT deptn ...
- NODE 开发 2-3年工作经验 掌握的相关知识
文章 部分答案 内存
- Oracle PL/SQL开发基础(第三十四弹:RAISE_APPLICATION_ERROR)
RAISE_APPLICATION_ERROR在子程序内部使用时,能从存储子程序中抛出自定义的错误消息.这样就能将错误报告给应用程序而避免范围未捕获异常. 语法如下: RAISE_APPLICATIO ...
- Oracle SQL Developer,Oracle 开发工具之toad、SQL Developer、PL/SQL Developer等比较
参考: oracle 的几个开发工具比较 因Oracle几乎是中大型商业企业数据的首选,所以比较一下常用与Oracle的工具. Oracle SQL Developer 免费,一般开发使用足矣,常用. ...
- PL/SQL数据开发那点事
PL/SQL开发那点事----->PL/SQL开发过程中异常处理 用户编写的PL/SQL块在执行过程中不可避免地要发生一些错误. 这里涉及的错误并不是由于程序的语法错误引起的,而是因为处理的数据 ...
随机推荐
- jquery dialog close icon missing 关闭图片丢失,样式丢失问题
http://stackoverflow.com/questions/17367736/jquery-ui-dialog-missing-close-icon
- API Monitor---------------Using API Monitor to crack copy protected software
For this tutorial we will be using Mirial Softphone which is a HD video conferencing application. Th ...
- Javascript函数式编程的一些例子[转载]
函数式编程风格 通常来讲,函数式编程的谓词(关系运算符,如大于,小于,等于的判断等),以及运算(如加减乘数等)都会以函数的形式出现,比如: a > b通常表示为: gt(a, b)/ ...
- Linux 搭建svn环境
第一步:下载并安装svn sudo apt-get install subversion 第二步:创建版本库目录(此仅为目录,为后面创建版本库提供存放位置) 选择在var路径下创建版本库,当前处于根目 ...
- CocoSourcesCS 2
CocoSourcesCS 2 /*------------------------------------------------------------------------- DFA.cs - ...
- [ES6] 09. Destructuring Assignment -- 2
Read More: http://es6.ruanyifeng.com/#docs/destructuring Array “模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值: Ex ...
- Sublimetext 3 经常使用插件
今天配了一下开发工具,事实上主要是想配置svn插件,可是后来查了下,发现sublimet的插件库还是蛮丰富的.顺手安了一些别的插件进去. 1,Svn插件安装的一些问题 首先ctrl+shift+p,打 ...
- xUtils怎样通过注解对FindViewById进行封装
之前讲到了介绍了一下xUtils的基本用法,今天我们就来具体介绍一下关于xUtils中的ViewUtils模块. 在ViewUtils模块中我们首先看到的是它採用了一种注解的方式进行声明,那么我们首先 ...
- TestNG系列之:TestNG基本注解(注释)
注解 描述 @BeforeSuite 注解的方法只运行一次,在当前suite所有测试执行之前执行 @AfterSuite 注解的方法只运行一次,在当前suite所有测试执行之后执行 @BeforeCl ...
- 网页图表控件Highcharts选项配置参数
Highcharts提供大量的选项配置参数,您可以轻松定制符合用户要求的图表,目前官网只提供英文版的开发配置说明文档,而中文版的文档网上甚少,且零散不全.这里,我把Highcharts常用的最核心的参 ...