SQL实践
找出连续的数据 如1,2,3,48,50,51,52,53,67,68找出连续的数字的起点和重点1,348,4851,5367,68create table test.range_problem( a int not null, primary key (a)); insert into test.range_problem values(1); insert into test.range_problem values(2);...
SQL问题诊断
问题 诊断 用户反应有一个员工不能设置他的考勤月历了。补充说明,我们员工上班都是按周一到周五上班,朝8晚5下班,但也有上三天晚班休息两天的上班制度,所以要设置员工的上班制度。 而现在不能设置这个员工的上班制度了,那么这个员工也没法提交加班申请等操作了。而且快到工资结算的时候,如果不能及时提交考勤和加班...
PLSQL重点问题理解和实战
ORACLE中PL/SQL使用的集合变量类型有RECORD(类)、VARRAY(sql数组)、TABLE(嵌套表)TABLE(嵌套表) 可以加index定义也可以不加,加表示index by是建立主键索引相当于数组,不加就是个嵌套表集合1 TABLE(嵌套表)定义表变量类型 type type_table_emp_empno is table of emp.empno%type index by binary_integer;--Y...
MERGE开发中遇到的问题
在使用merge开发中遇到的问题。有一个需求,需要从基础表中取数据放到目标表,如果目标表中已经有基础表的数据了,就修改目标表中的数据,如果没有基础表中的数据就把基础表的数据插入到目标表中。因此用到merge完成这样一个操作首先 建立基本环境prompt PL/SQL Developer import fileprompt Created on 2017年9...
SQL开发实例和优化
找出连续的数据 如1,2,3,48,50,51,52,53,67,68找出连续的数字的起点和重点1,348,4851,5367,68create table test.range_problem( a int not null, primary key (a)); insert into test.range_problem values(1); insert into test.range_problem values(2);...
SQL优化实例-思路分析
一个真实具体的SQL优化思路一般都看预估的执行计划,比如遇到一个sql执行计划很长,很复杂,从计划中没有看到返回行数多,cost高或连接方式错误的地方,没有明显瓶颈,但整体逻辑读很高,运行很慢。这时就可以去看真实的执行计划,并查看真实计划里逻辑读cr最多的步骤。可以做个10046。根据逻辑读最多的步骤判断对应...
有趣的SQL-搜索前三名问题
今天看到这样个问题,比如找出每个部门里薪资在前三的所有员工信息具体数据和SQL是这样的WITH Employee AS( SELECT 1 Id, 'joe' Name,70000 SALARY,1 DepartmentId FROM DUAL UNION ALL SELECT 2 Id, 'Henry' Name,80000 SALARY,2 De...
ORACLE中实现表变量的方法
经常看到SQLSERVER 中用表变量类型的方式就能做到缓存一个比较大的中间结果,然后再对这个表变量做处理,非常方便,那么ORACLE有这种表变量的方式处理中间结果么实验后发下你用如下方法可以起到SQL SERVER里表变量的作用 1 创建基础数据表 create table T_TEST_PIP( &n...
SQL实践一
需求所有部门汇总的结果的打分。大部分指标是根据部门汇总(SUM或AVG)结果打分。但面谈率和前10%加班平均小时数俩指标,不是根据所有部门(TEAM)汇总(SUM或AVG)结果打分。而是需要根据每个部门的数据做排序或累加后的结果打分面谈率计算方式:TEAM1中季度1月份,面谈人数比例目标是33% -》 目标面谈人数 = 部门人数*...
一条SQL的改写
最近需求中需要实现这样一个功能找主活动是未锁定的,且已确认的子活动数据,表中数据的分布是这样的表中数据存放结构 主活动1 没锁定 &...
详解translate
TRANSLATE(string,from_str,to_str) 第二个参数,和第三个参数是一一对应的关系,第二个参数中每个位置上的字符会被 替换成第三个参数中对应位置上的字符,几遍第三个参数的对应位置没有值也可以视为null,这样相应字符将被替换为 null,也就是被删除了,参考如下替...
游标+bulk collect into limit的不同方法查询数据
如下需求想在查询表时先根据bulk collect into方式查询表中部分数据,然后处理,在查询表中其余数据知道查询出表中所有数据如一个表有6条数据,第一次次批量取3条,显示后再批量取3条,已显示游标方式查询具体构建环境create TABLE TEST.COURSE( COURSE_NO NUMBER(38), ...
动态SQL完成大表数据的迁移
目前需求是根据源表数据如salary>10000的数据插入目标表中,目标表根据需要指定,且插入指定N条数据后提交。对于此类问题可以用insert into select方法但需要按指定N条数据提交,说明表中数据量很大,插入时应批量提取,再按指定条数插入新表,且批量提取数据时也应根据数据大小分批提取,于是考虑在动态sql中使...
查询字符串中连续出现的字符
根据用户需求需要查询字符串中连续出现的字符如'mn,asdfs,opq,dfasf,abc,asdlfj,defg''DF,RST',要求找出两个字符串中连续出现的字符这里两个字符串数据相当于表中的两行数据,具体数据用sql构造。对于这种需求的sql主要涉及两块,一个是如何找出字符串中被,号分割的字符。一个是如何判断字符是连续的字...
不走索引场景的一次分析优化
一般一个SQL查询数据量很大,且优化余地不大时,我们必然想开启并行,用并行的方式提高数据的查询速度,然后不是任何情况下开启并行都可以达到最佳运行效果,有时原本使用索引的执行计划,因为使用并行反而该走全表扫描,因此必须通过hint方式引导优化器采取正确的执行计划,对于如下SQLSELECT &nbs...
改写不走索引的SQL
如下SQL为保证所有数据都出自UP_LOAD_SERL10表(后面将以别名T3称呼此表,其他表也已别名称呼)SELECT T1.SERL_NO ,T1.SI_YMD ,T1.ST_YMD ,T1.ST...
对hint的调优
实际工作中经常遇到开发人员加hint为提高数据的批处理的速度,但为了提高处理速度经常遇到并行的hint随意使用,并行不是万能的,不合理的使用只能阻碍运行速度,使用如下SQL说明并行问题SELECT /*+ LEADING(T1) USE_HASH(T_LGIN) PARALLEL(T1,8) */ &nb...
Oracle DBA常用sql分享
Oracle DBA常用sql分享
执行长达2分多钟的大型sql优化
在工作中,有些报表的展示较复杂,且需要统计的内容不断变化,开发的sql越来越长,运行越来越慢,这时优化必不可免,先来看下如下冗长的执行了2分多钟的sql,看看从中是否能找出些规律
不懂业务的SQL优化方法
看着如下长长的SQL,对于其要实现的功能一无所知,开发人员需要根据领导的需要调整该SQL并导出产生的数据,但每次运行都要5分钟左右,对对于开发,调试和领导确认都不能接受,开发人员直接将此SQL转给我优化,由于此SQL并不写入应用且手工执行频率很高,于是最直接的方法就是先并行加快sql的执行速度WITH T_MAST AS(&nbs...