![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
oracle
文章平均质量分 61
AmberSheng
坚强的菜鸟一个
展开
-
oracle编程入门笔记2015-01-06--基本概念
oracle 编程的基础是SQL。那么什么是SQL?SQL是人和数据库之间交流的语言,和人与人之间交流是一样的。例如select * from employee。这就是一句sql,它的意思就是人告诉数据库,请帮我找出所有的员工信息。具体数据库去哪里找,怎么找这些都不用人去操心,好贴心。那么问题来了,oracle,ibm,Microsoft都有自己的数据库,所以难道我要学习三种语言才能和他们原创 2015-01-06 11:15:59 · 472 阅读 · 0 评论 -
oracle编程入门笔记2015-01-19--四种表连接
1.循环嵌套连接(nested loop)nested loop 用java描述大概就是一个双层循环for(遍历驱动表){for(遍历被驱动表){根据驱动表的条件}}使用嵌套循环的条件是驱动表记录返回的记录较少,这样,使用nested loop总体的循环次数较少。例如这样是不会使用nested loop。因为没有其他帅选条件,无论哪张表作为驱动表,循环次数都转载 2015-01-20 14:55:20 · 786 阅读 · 0 评论 -
not exists不等于not in
自从有了hash join semi之后,in 和exists的效率不再被人诟病,并且两者是等价的。但是 not in 和not exists如果不加其他限制条件,两者往往不是等价的。使用scott账户演示。emp总共14行记录,其中有一行mgr为空使用not in 结果为空,也就是mgr为空使用not in 会返回null,而not in 会把null当做false处理原创 2015-02-09 12:44:45 · 936 阅读 · 0 评论 -
oracle编程入门笔记2015-01-20--oracle集合运算
数据库的一些设计是基于集合理念的。也就是说,很多集合上的思想和运算方式在数据库上有所体现。其实数据库表可以看做是一些数据的集合,有人会说,集合不允许重复,但是表里面可以出现重复行。重复行难道不违背数据库设计的一些范式吗?既然数据表可以看做是集合。那么就会有对应的集合运算union,union all,minus,intersect。这些运算有如下特点:1.所有的输入查询必须返回原创 2015-01-21 16:25:43 · 508 阅读 · 0 评论 -
对存在空值的列建索引
众所周知,存在空值的列,在谓词中有is null会导致索引失效。所以is null的选择性还是很强的。那么在该字段上应该有索引,创建一个索引create index IDX_DEPT_FSTANDARDCODE on T_ORG_DEPARTMENT (FSTANDARDCODE)cost:198回顾一下索引的原理,is null谓词的列不会存在于索引结构中。所原创 2015-02-09 19:29:05 · 19084 阅读 · 4 评论 -
oracle编程入门笔记2015-01-18--常用oracle查询语句
查询数据存储的物理块信息select e.rowid,(select file_namefrom dba_data_files where file_id =dbms_rowid.rowid_to_absolute_fno(e.rowid,'SCOTT','EMP')) FILEN,dbms_rowid.rowid_block_number(e.rowid) block_no,原创 2015-01-18 14:55:29 · 601 阅读 · 0 评论 -
oracle编程入门笔记2015-01-22--解释计划
在进行开发时,遇到性能问题调优经常要看执行计划。但是执行计划需要sql实际执行后才能获取。有时候使用替代方案解释计划来近似代替最终的执行计划。1.获取解释计划的方法。a,用plsql developer中sql 窗口直接按快捷键F5就可以看到。其他图形化工具类似里面字段的意思可以就不解释了。太多了,用到了再查,多查几次就记住了。2.使用命令explain plan fo原创 2015-01-22 13:58:11 · 872 阅读 · 0 评论 -
oracle编程入门笔记2015-01-23--执行计划
解释计划有时候不那么尽如人意。但是很方便不是吗,遇到具体的性能调优的时候,可能需要真正的执行SQL以便获取执行计划。我不说太多的方法,更多方法可以去网络上搜索。我喜欢用的如下由于执行过的sql会存在于共享池中,所以可以通过oracle提供的dbms_xplan.display_cursor 方法去V$SQL_PLAN 视图中去查找sql的执行计划。这个方法接收三个参数,如果需要原创 2015-01-23 09:42:36 · 551 阅读 · 0 评论 -
oracle编程入门笔记2015-01-25--浅说cube
有一次因为一个业务需求。查找客户进九十天的订单金额总和,近九十天最后一次订单生成时间以及总订单数,具体sql代码如下,由于业务场景以及表结构关系不能详述,所以代码片段只做感官认识。select fcustid, dd, income, amount, mindd, num from (select fcustid, dd, inc原创 2015-01-25 16:14:00 · 986 阅读 · 0 评论 -
函数索引与虚拟列的比较
在数据库开发过程中,经常遇到一个问题是时间字段精度问题。有时候在保存的时候要求时间精确到秒,但是在使用过程中可能只要精确到天。例如:。如果要求找到2012年七月25号创建的用户。1.错误sql:select * from t_cust_custbasedata t where t.fcreatetime = to_date('2012-07-25','yyyy-mm-dd') 数据库里面存原创 2015-03-03 15:55:42 · 1580 阅读 · 0 评论 -
位图索引
位图索引在OLTP系统中很少看见,所以一般人解除的不多。但在BI,报表系统中由于数据往往只进行查找操作,所以见到的还是比较多的。创建语法:create bitmap index index_name on table_name(column_name) 和普通索引创建语法基本一致,只是在index前面多以bitmap关键字例如有员工表表结构如:有一个状态字段只能有两个值0离职,1在职。原创 2015-03-05 11:32:16 · 733 阅读 · 0 评论 -
删除数据库索引的正确姿势
有时候发现你之前创建的索引后来你用不上了,于是为了节省空间,降低优化器在选择执行计划时候的成本。我们会选择删除这个索引。但是因为业务场景比较多,又不是所有代码都是一个人写的。所以直接drop索引可能导致意想不到的后果,ps,之前订单表索引失效就是血的教训,不过那次是由于没有及时收集统计信息。但也充分证明了索引的重要性和严重影响。所以如何正确的删除你觉得不要用的索引,以客户表客户编码索引为例原创 2015-03-06 09:17:28 · 9193 阅读 · 0 评论 -
如何快速往表里插入大量的数据行
数据转储过程中往往涉及到数据的插入和删除。在数据量特别大的时候往往会消耗较长时间。不卖关子,直接介绍一个我目前知道最有效的插入例子。declaretype fid is table of dpcrm.t_cust_returnvisit.fid%type;fids fid;begin select fid bulk collect into fids from dp原创 2015-03-06 15:39:47 · 4074 阅读 · 0 评论 -
ORACLE事务隔离级别
事务在所有的关系型数据库中都是一个非常非常非非常常重要的概念。1.什么是事务2.事务的acid属性参见http://docs.oracle.com/database/121/CNCPT/transact.htm#CNCPT016翻译 2015-03-08 19:13:58 · 3076 阅读 · 0 评论 -
DML错误日志
之前在存储过程中对于insert大量属于可能带来的错误,我一般使用exception异常处理来记录异常并保证程序正确执行,类似于下面这段异常处理代码declare--异常信息 startTime timestamp(6); --开始时间 endTime timestamp(6); --结束时间 FERRORCODE VARCHAR(50);原创 2015-03-07 09:15:27 · 1719 阅读 · 0 评论 -
materialized log
创建一个部门表的物化视图,由于部门表变动不频繁,而且需要实时反映出部门表的变动,所以采用了fast refresh。语句如下CREATE MATERIALIZED VIEW dept_mv BUILD IMMEDIATE REFRESH FAST ON COMMIT ENABLE QUERY REWRITE asselect dept.rowid原创 2015-03-31 16:52:52 · 775 阅读 · 0 评论 -
object table 和storage table
404 not found原创 2015-03-31 21:01:32 · 479 阅读 · 0 评论 -
2015-02-07 ORACLE 事件
一、Oracle跟踪文件 Oracle跟踪文件分为三种类型,一种是后台报警日志文件,记录数据库在启动、关闭和运行期间后台进程的活动情况,如表空间创建、回滚段创建、某些alter命令、日志切换、错误消息等。在数据库出现故障时,应首先查看该文件,但文件中的信息与任何错误状态没有必然的联系。后台报警日志文件保存BACKGROUND_DUMP_DEST参数指定的目录中,文件格式为SIDALRT.LOG转载 2015-02-07 16:21:42 · 496 阅读 · 0 评论 -
oracle编程入门笔记2015-01-19--表连接
之前主要讲的是怎么去一张表里面取数据,本节主要是阐述一下表与表之间是怎么关联的。不多说,直接上例子员工表和部门表关联,然后查出员工的基本信息和归属部门信息。执行计划如图,前面有1.2.3.4.不看。看执行计划是从上往下,从右往左。也就是说,最右面的先执行,缩进最多的。同样缩进的,上面先执行。就例子中做出几点说明:1.表的关联顺序并不会成为其筛选的顺序。员工表在前,但是员原创 2015-01-19 19:30:02 · 444 阅读 · 0 评论 -
oracle编程入门笔记2015-01-07--核心SQL
oracle SQL编程细节很多。但是主要的核心有。1.五个基本sql语句select,update,delete,insert,merge。所有复杂的sql都是这些简单的核心sql组成的,使用这些sql比较简单。但是怎么让sql跑的快,那就是经验的积累,写多了就快了。2.除了经验还需要理论上的指导oracle8还是8g以后,反正现在能看到的oracle只要没有特殊说明一般都是CB原创 2015-01-07 14:01:31 · 633 阅读 · 0 评论 -
oracle编程入门笔记2015-01-06--sqlplus
学习java我们用eclipse,学习微软系我们用vs。所以学习一个新东西,工具也是你不得不学的。很好的用好工具能事半功倍。学oracle 的sql标准sql*plus当然必不可少了。当然还有其他更好用的工具例如PLSQL Developer但是由于后者功能过于强大,往往会掩盖一些sql的基础知识,所以不建议初学者一开始就使用。后面开发时候当然要使用了,那效率提升不是一点点。而且sqlpl原创 2015-01-06 13:09:19 · 556 阅读 · 0 评论 -
oracle编程入门笔记2015-01-26--分析函数使用举例
分析函数的作用,可以看做是函数和窗口共同作用,在原来查询的基础上给每行返回了一列特定的额外计算出来的行。所以可以单独把分析函数以及窗口单独拿出来分析。下面开始首先分析函数主要有如下几个。不是所有的oracle函数都叫分析函数。lag(scalar_expression,,):返回当前行前offset行记录中scalar_expression,如果没有返回default值。offset默原创 2015-01-26 19:28:07 · 665 阅读 · 0 评论 -
oracle编程入门笔记2015-01-27--分析函数性能
1.分析函数可以在既需要单行记过又要分组统计结果的时候代替自连接。例如需要查询每个员工的部门以及员工所在部门的员工数。简单看一眼执行计划用分析函数改写避免自连接,结果可以自行验证,这里只说明执行计划上的差异是不是觉得cost没有差异,但是io和cpu消耗差距还是很明显的。PS:据说在11gr2之后计算出来的cost是不包括分析函数cost的。也不知道是不是真原创 2015-01-27 15:28:44 · 526 阅读 · 0 评论 -
oracle编程入门笔记2015-01-08--查询
ORACLE SQL编程和调优最多的莫非是查询语句了。先说查询中最常用的语句5.select 字段列表1.from 表2.where 筛选条件3.group by 按照条件分组4.having 分组筛选条件6.order by 排序字段列表1.查询逻辑语句书写是有顺序的以上就是书写查询语句的顺序,这里面仅仅是一些常用的语句,还有很多不常用的没有列举。2.查原创 2015-01-08 10:14:56 · 534 阅读 · 0 评论 -
oracle编程入门笔记2015-01-28--model子句原理
model 子句完整语法,先不着急理解,看完后面的回头来看看model的完整语法。MODEL[][][MAIN ] [PARTITION BY ()] DIMENSION BY () MEASURES () [] [RULES] (, ,.., ) ::= ::= RETURN {ALL|UPDATED} ROWS ::= [I原创 2015-01-29 10:41:45 · 654 阅读 · 0 评论 -
oracle编程入门笔记2015-01-10--更新,删除
更新,删除操作也没有什么复杂的语法,贴一张copy的图转载 2015-01-10 15:35:48 · 409 阅读 · 0 评论 -
oracle编程入门笔记2015-01-30--model子句性能
model子句也有自己的性能问题。model子句的关键性能问题是出现在rules中的各种规则的求解。根据rules的复杂度,执行顺序,多个规则的依赖关系。model子句会产生不同的执行计划,而这些执行计划就是model子句调优的关键。概述:model子句执行计划有如下五种,cyclic,acyclic,ordered以及acyclic fast和ordered fast。没有绝对的优劣原创 2015-01-30 14:10:15 · 751 阅读 · 0 评论 -
oracle编程入门笔记2015-01-12--数据合并
有一条sql语句,我们用的很少。不是没有使用场景,而是我们习惯用if判断代替这就是---merge。用if逻辑可以实现merge,而且更加灵活。但是在一些简单场景,merge远远比if来的更加简洁,更加高效。merge into schedule_test stusing (select * from dpcrm.t_cust_schedule where rownum < 100) so原创 2015-01-12 13:48:35 · 580 阅读 · 0 评论 -
oracle编程入门笔记2015-01-12--数据库原理1
先给来一张偷来的图oracle 数据库和实例。首先解释数据库和实例的区别。可以这么理解1.数据库就是实实在在存储数据的文件。2.实例就是一些oracle进程,内存和加载到内存里的数据集合。其实oracle sql编程语法就之前说的那么多,剩下的就是要看sql到底怎么执行了。知其然知其所以然。了解sql执行原理和一些内部机制才能指导我们写更优的sql。实例=SGA原创 2015-01-12 20:00:05 · 784 阅读 · 0 评论 -
oracle编程入门笔记2015-01-13--数据库原理1之硬解析软解析
上次说到oracle会有一个共享池,里面保存了最近执行的sql以及解析过的代码。如果sql执行过,那么在共享池里面就会有保存,下次执行同样的sql就不需要解析,直接执行就可以了。如果第一次执行,或者之前的执行记录被后面的覆盖了,那么就要重新解析。硬解析:一切从头开始,包括语法,语义,权限分析工作,但是这个过程是数据库后台进程操作的。我们看不见,但是相当耗费事。具体怎么查看后台的解析过程,请原创 2015-01-13 17:56:08 · 712 阅读 · 0 评论 -
oracle编程入门笔记2015-01-14--查询转换
写一条sql 提交到oracle执行,但实际上oracle 最后执行的并不一定是你写的sql。这就是oracle的查询转换。oracle 为了让你的sql 更加高效,所以会在不影响查询结果的前提下,自动的优化我们写的sql。而执行计划也是根据oracle转换后的sql来确定的举例来说明什么事查询转换原始查询:禁用查询转换后的查询手动转换结果结论就是oracle会自动优化我们原创 2015-01-14 15:57:33 · 465 阅读 · 0 评论 -
oracle编程入门笔记2015-01-17--一个例子告诉你共享池和数据缓存对效率的影响
为了证明共享池和数据缓存对效率的影响我来举个例子。先清空共享池alter system flush shared_pool;根据前面的知识,这样之前执行过的sql和执行计划就会被清空,接下来的所有sql都要硬解析了。清空数据缓存alter system set events 'immediate trace name flush_cache'这样,接下来都要从磁盘上原创 2015-01-17 16:44:37 · 1099 阅读 · 0 评论 -
oracle编程入门笔记2015-01-19--index fast full scan
index fast full scan 其实类似于全表扫描,但是数据不是从数据块里面拿到,而是直接从索引里面获取。(前面讲过索引里面是存了索引列列值和rowid的)。所以index fast full scan 会全表扫描索引表以便拿到数据。那么就有两个问题1.索引列一定要有非空约束2.查询列只能是索引列例如:fcustnumber列是索引列,且非空。这个非空是数据库从收集到原创 2015-01-19 18:43:23 · 578 阅读 · 0 评论 -
oracle编程入门笔记2015-01-18--执行计划中的索引扫描方式说明
数据库条有过程中经常涉及一个概念就是索引。接下来我就来讲讲我理解的索引首先,数据库中的数据是存储在一个个实实在在的在硬盘上的文件中,oracle最小的文件操作单位叫数据块。所谓的查询就是从这些文件中找到我们想要的数据。例如用下面语句就可以知道员工名字叫king的员工信息数据具体存在哪里。select e.rowid,(select file_namefrom dba_d原创 2015-01-18 16:11:40 · 1249 阅读 · 0 评论 -
oracle编程入门笔记2015-02-05--递归查询
应用场景知道a部门,想找到其所有上级部门。部门间用id和父级id相互关联。以上是用oracle递归查询实现的,当然可以用自连接,但是由于你不确定有多少层,所以自连接的次数也不好确定。start with 条件就是整个递归的起点,connect by 是递归条件,prior从字面意思理解可以使当前记录的fparentid = 下一条的fid这样就可以根据当前记录定位下一条记录。原创 2015-02-06 11:09:46 · 772 阅读 · 0 评论 -
materialized view 物化视图-data warehousing
很快就会客户原创 2015-03-31 16:51:29 · 946 阅读 · 0 评论