Oracle sql高级编程学习笔记
本系列文章主要通过实例演示等重点记录学习Oracle sql高级编程的过程以及笔记。深入学习oracle数据库的内存结构、sql语句执行过程,以及如何优化sql,写出高效、简洁的sql语句
菜菜的中年程序猿
热爱编程的2B小青年
展开
-
oracle sql 高级编程学习笔记(二十九)
DML错误日志使用语法一、实例演示1、创建错入日志表2、声明 log error子句2.1 不设置reject limit插入数据2.2 加入reject limit 再进行插入二 、使用DML错误记录注意事项三、当基表中含有不支持的数据类型列时,创建Errors表的正确语法DML错误日志这个功能提供一个机制来使得你的一百万行数据插入不会仅仅由于几行数据有问题而失败。这个特性在10gR2中引...原创 2018-10-10 13:21:11 · 1326 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(二十七)
半联结定义一、半联结必要条件二、半联结执行计划1、in 执行计划2、exists执行计划三、控制半联结执行计划1、提示控制半联结执行计划2、使用always_semi_join参数控制半联结四、 半联结限制条件半联结定义当两张表进行联结的时候,如果表1中的数据行是否出现在结果集中需要根据表2中出现或不出现至少一个相匹配的数据行来判断,这种情况就会发生半联结;而反联结便是半联结的补集,它们会作...原创 2018-09-29 09:34:07 · 380 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(二十八)
反联结定义1.1、not in 实例演示1.2、not exists实例演示1.3、not in 空值问题1.4、反联结的其他实现形式1.4.1、minus1.4.2、利用外联结二、反联结的必要条件三、反联结的限制条件四、反联结执行计划4.1、not exists 执行计划4.2、没有空值约束的not in 执行计划4.3、空值约束的 not in 执行计划4.4、minus4.5、left o...原创 2018-09-30 09:11:42 · 1046 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(二十五)
connect by 递归查询实例演示1、 connect by 演示递归查看所有员工之间组织关系select lpad(' ', level * 2 - 1, ' ') || emp.last_name emp_last_name,-- level 伪列保存了递归的深度值 level =2 表示 递归了2-1层,即只查询KING id为100的所有直接下属 见下面伪列演示--这里...原创 2018-09-27 09:40:02 · 348 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(二十六)
递归子查询因子化 recursive subquery factoring RSF在上篇文章中我们用connect by 演示了递归功能,本文将用RSF进行演示一、实例演示实现connect by同样功能with emp as (select e.last_name, e.first_name, e.employee_id, e.manager_id from employee...原创 2018-09-28 10:02:31 · 644 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(二十四)
子查询因子化实例演示1、使用子查询因子化2、使用INLINE提示,查询因子做内联处理。3、再增加一次结果集的引用4、增加一次结果集 使用内联 *+inline在oracle 官方文档中有如下一段话:注意,oracle 可能将因子化的子查询作为临时表来处理,在一个表被多次引用的查询中,这可能是独特的性能优势,因为oracle可以物化查询结果集 从而避免多次执行一些非常耗费资源的数据库运算。...原创 2018-09-20 15:03:18 · 429 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(二十二)
一、model 空值model 子句存在空值的原因有两个 1、单员格存在,但值为空 2、单元格不存在1、实例演示 navselect product, country, year, week, sale from sales_fact where country = 'Australia' and ...原创 2018-09-14 14:16:25 · 344 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(二十三)
继上一篇中讲到model子句的性能优化,本文将继续学习model子句查询重写的优化:一、谓语前推1、实例演示:select * from (select product, country, year, week, inventory, sale, receipts from sales_fact model return updated rows part...原创 2018-09-15 11:20:02 · 357 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(二十一)
一、行求解顺序select product, country, year, week, inventory, sale, receipts from sales_fact where country = 'Australia' and product = 'Xtend Memory' model return updated rows partition by(pr...原创 2018-09-14 09:23:00 · 482 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(十八)
一、group by 子句优点1、使sql语句更具可读性 2、书写起来比使用很多相关子查询更简单 3、减少了重复访问同一个数据块的次数(从而也得到了更好的性能)二、group by的局限性1、LOB列,嵌套或数组不能用作group by表达式的一部分 2、标量子查询表达式是不允许的 3、如果group by 子句引用任何对象类型的列,则查询不能并行化实例演示wi...原创 2018-09-12 15:25:49 · 424 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(十九)
继续上篇oracle sql 高级编程学习笔记(十八):https://blog.youkuaiyun.com/whandgdh/article/details/82662267 中使用cube函数的例子 我们按照大类和小类分组求销售额select t.main_type, t.small_type,sum(t.sales_mount)sales_mount from test_cube t ...原创 2018-09-12 15:35:38 · 345 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(二十)
一、Model 子句剖析:通过 model return updated rows 或者model来声明这个语句 使用model子句。一个model子句有三组列,分区列,唯独列, 以及度量值列。 分区列类似于电子表格excel中的一张工作表, 维度列类似于行标签(A,B,C……)和列标签(1,2,3……) 度量值类似于 含有公式的单元格实例演示:实现求某地区某周的库存...原创 2018-09-13 09:27:36 · 476 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(十六)
使用解释执行有下面三点可能导致解释执行计划与实际执行不一致。 1、解释执行计划是基于你使用它的时候的环境来产生的 2、解释执行计划不考虑绑定变量的数据类型(所有变量都是varchar2类型) 3、解释执行计划不窥视绑定变量的值create table regions_2 (region_id varchar2(10) primary key,region_name varchar...原创 2018-09-06 14:34:47 · 320 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(十七)
查看任何之前已经执行过的sql语句保存在库高速缓存中的执行计划,最简单方法就是使用dbms_xplan.display_curor函数 使用 gather_plan_statistics 提示 则在sql执行后,会在v$sql_plan_statistics_all视图中查到SQL的执行统计信息,例如逻辑读,物理读取次数,物理写入次数以及每一个运算在一行数据上的运行时间。 或者也可以将stati...原创 2018-09-06 14:39:34 · 316 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(十五)
如果在查询中有多张表,在优化器确定了每个表的访问方法之后,下一步就是要确定将这些表联结起来的最佳方法以及最恰当的顺序。任何时候在from子句中有多个表时,就需要进行联结,如果没有指定任何条件,会选择笛卡尔联结。 联结的方法有:嵌套循环联结,散列联结,排序-合并联结,笛卡尔联结。每种联结方法都有一定的最适合使用条件,每个联结方法都有两个分支,所访问的第一张表通常称为驱动表,访问的第二张表则称为...原创 2018-09-04 09:21:32 · 1757 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(十二)
一、概念聚簇因子是 Oracle 统计信息中在CBO优化器模式下用于计算cost的参数之一,决定了当前的SQL语句是否走索引,还是全表扫描以及是否作为嵌套连接外部表等。如此这般,那到底什么是聚簇因子,那些情况下会影响到聚簇因子,以及如何提高聚簇因子?聚簇因子是基于表上索引列上的一个值,每一个索引都有一个聚簇因子。用于描述索引块上与表块上存储数据在顺序上的相似程度,也就说表上的数据行的存储顺序与...原创 2018-08-31 15:03:04 · 318 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(十三)
Oracle提供了五种索引扫描类型,根据具体索引类型、数据分布、约束条件以及where限制的不同进行选择: 索引唯一扫描(index unique scan) 索引范围扫描(index range scan) 索引跳跃扫描(index skip scan) 索引全扫描(index full scan) 索引快速扫描(index fast full scan)一、索引唯一扫描...原创 2018-09-03 13:40:36 · 427 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(十四)
上篇文章oracle sql 高级编程学习笔记(十三)https://blog.youkuaiyun.com/whandgdh/article/details/82347500 中的索引扫描类型还剩下索引跳跃扫描(index skip scan)以及索引快速全扫描一、索引跳跃扫描(index skip scan)该索引扫描方式主要发生在组合索引上,且组合索引的引导列未被指定在检索条件中的情况下发...原创 2018-09-03 13:51:45 · 418 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(十一)
ROWID是ORACLE中的一个重要的概念。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。ROWID它是一个伪列,它并不实际存在于表中。它是ORACLE在读取表中数据行时,根据每一行数据的物理地址信息编码而成的一个伪列。所以根据一行数据的ROWID能找到一行数据的物理地址信息。从而快速定位到数据行。数据库的大多数操作都是通过ROWID来完成...原创 2018-08-28 17:40:16 · 379 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(十)
一、B树索引的结构B-Tree索引是最常见的索引结构,默认创建的索引就是B-Tree索引。 B-树索引是基于二叉树结构的。B-树索引结构有3个基本组成部分:根节点、分支节点和叶子节点。其中根节点位于索引结构的最顶端,而叶子节点位于索引结构的最底端,中间为分子节点。叶子节点(Leaf node):包含条目直接指向表里的数据行。分支节点(Branch node):包含的条目指向索引里其他的...原创 2018-08-27 11:39:53 · 674 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(七)
一、全表扫描实例演示--在dba 权限下创建表t1 并建索引create table t1 asselect trunc((rownum-1)/100) id,rpad(rownum,100) t_pad from dba_source twhere rownum<=10000;create index t1_idx1 on t1(id);创建表T2 create t...原创 2018-08-26 09:26:49 · 434 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(八)
全扫描与多块读取全扫描运算将会进行多块读取。就是说一个单独的IO调用将会请求多个块而不是仅仅一个。所附求的数据块数目可以通过db_fi 1 c_trtultiblock_read_count 参数所指定的数目范国之间的任意个。 如果这个参数设定为16,而表中有160个块,可以只通过10次调用就可以来获取所有的数据块。我说可以仅通过10次调用就可以来获取是因为下面这些关于多块读取调用的限制...原创 2018-08-26 09:43:31 · 343 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(九)
一,高水位线定义高水位线好比水库中储水的水位线,用于描述数据库中段的扩展方式。高水位线对全表扫描方式有着至关重要的影响。当使用delete 操作 表记录时,高水位线并不会下降,随之导致的是全表扫描的实际开销并没有任何减少。下图给出高水位线的描述,如何降低高水位线,以及高水位线对全表扫描的影响。 二、实例演示创建表t1_bak 收集t1_bak表 统计信息 exec d...原创 2018-08-26 09:57:31 · 448 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(一)
前言作为一个java开发员,可能都会认为数据库没有必要过于精通,只需能写出满足业务的crud(增删改查)的sql语句即可,殊不知就像开车一样,我们不能只仅仅满足于开车,而对车子原理不屑。那样我们真的只能仅仅停留在java开发上,技术是永远都不嫌多的,去年我也是抱着我是一个java开发员,数据库的东西根本不必做深入的了解,直到今年由于发展需要,转而做报表开发,才深刻意识到自已在数据库上的欠缺,所...原创 2018-08-21 11:15:57 · 3293 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(二)
oracle的逻辑结构包括表空间(tablespace),段(segment),扩展区(extent),数据块(data block) oracle数据库在逻辑上是由多个表间组成的,表空间中存储的对象叫段,比如数据段,索引段,和回退段。段由区组成,区是磁盘分配的最小单位。段的增大是通过增加区的个数来实现的。每个区的大小是数据块大小的整数倍,区的大小可以不相同;数据块是数据库中最小的I/O单位,同...原创 2018-08-21 11:29:15 · 519 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(三)
一、优化器Oracle数据库中的优化器又叫查询优化器(Query Optimizer)。它是SQL分析和执行的优化工具,它负责生成、制定SQL的执行计划。Oracle的优化器有两种,基于规则的优化器(RBO)与基于代价的优化器(CBO) RBO: Rule-Based Optimization 基于规则的优化器 CBO: Cost-Based Optimizat...原创 2018-08-22 15:33:08 · 598 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(四)
优化器确定了执行计划,并保存导库高速缓存区中以备日后使用,实际上下一步就是执行 计划并取得数据行。 执行计划就是告诉oracle对于每一个表对象如何访问以及什么联结方式和联结顺序来将多个表联结到一起的一系列指令。 执行计划的每一个步骤会产生一个行源,然后与另外一个行源联结,直到所有的对象都被访问和联结。 满足查询条件的行必须从数据库返回给应用。对于任何大小的结果集,需要返回的数据行可能不会在...原创 2018-08-22 15:49:41 · 477 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(五)
一、 查询块查询块根据select关键字定义,查询块要么嵌套在一个查询块中,要么以某种方式与一个查询块存在连接。查询书写的方式决定了查询块之间的关系。select t.* from hr.employees t where t.department_id=60; 只有一个查询select t.* from hr.employees t where t.department_i...原创 2018-08-23 11:33:43 · 982 阅读 · 0 评论 -
oracle sql 高级编程学习笔记(六)
一、Consistent GetsConsistent Gets(数据请求总数在回滚段Buffer中的数据一致性读所需要的数据块)概念是指在处理你这个操作的时候需要在一致性读状态上处理多少个块,这些块产生的主要原因是因为由于在你查询的过程中,由于其他会话对数据块进行操 作,而对所要查询的块有了修改,但是由于我们的查询是在这些修改之前调用的,所以需要对回滚段中的数据块的前映像进行查询,以保证数据...原创 2018-08-24 09:28:50 · 442 阅读 · 0 评论