数字替换变量求结果
记得刚毕业的那会,有次有个朋友问了我一个sql,当时没写出来,需求是这样的表t1:IDTYP1 ax-b+c2 a-c+bd表t2:IDCOLVAL1ax 151b 21c 332a 1232bd 42c 987需求就是...
oracle访问数据的方法
访问数据的方法:访问表: 全表扫描:从表所在的第一个extend的第一个block开始,扫描到高水位。全表扫描的产生的等待事件是数据库多块读、直接路径读等(这就不多说了),想说的是, 全表扫描是一次扫描多个数据块,而具体是一次扫描多少块,是由...
oracle的左右全自然笛卡尔集连接
总的来说呢,其他的都比较简单,但是full join 相对有点不好理解,不过多做两个列子,多看看,也就理解了。先建两张表,来点测试数据。scott@ORA> create table t1 (s varchar2(2),n number(1,0));Table created.scott@ORA> insert into t1 values ('a',1);1 row created.scott@ORA> insert into t1 va...
or与索引
or与索引据说or会使索引失效,那么是不是呢?测试一下,每个例子后会跟随相应的解释。初始:empno列有索引,ename没有scott@ORA> select empno,ename from emp where empno=7788 or empno=7369; EMPNO ENAME---------- ---------- 7369 SMITH &nbs...
select阻塞update 之row lock contention
上周一个客户的系统,行锁争用比较严重,客户的代码没法发出来,就在自己的测试库重现一下select 是有可能会阻塞update和insert 的(使用for update的情况下),避免这种情况可以加上nowait。首先,我这个库非常闲SQL> select event,sid,p1,p2,p3 from v$session_wait where event like '%row lock%';no rows select...
intersect和minus求交集差集
一个不小心,,断了两天,补~~!intersect是求两个集合的交集,比如在一张采购表中,如果要查询在14年五月份和14年六月份都购买了的物品的信息,就可以这样(select name,b_date,amount,pricefrom tabwhere to_char(b_date,'yyyymm') = '201405')intersect(select name,b_date,amount,pricefro...
把表中的blob字段导出,并且用一个唯一名称来命名导出的文件。
需求是发生在迁移数据的时候,我们的源库,有一个字段设计的为blob类型,但是目标库,人家设计的是varchar2类型,然后这个varchar2,存放的只是相当于一个指针的东西。思路是通过循环,给表中每一条记录要导出的blob文件赋值。首先先创建一个目录, create or replace directory BLOBDIR as 'D:\导出文件'...
趣味题
100块钱,换零钱,换成2,5,10,20,50的,有多少种换法:这个写法还能优化,可以减少一个表的笛卡尔集,目前先不做了SQL> WITH t2 AS 2 (SELECT rownum-1 a2 FROM dual CONNECT BY rownum<100/2+1 ), t5 AS 3 (SELECT rownum-1 a5 FROM dual CONNECT BY rownum<100/5+1 ), t1...
char的研究(终章)
首先,关于字符常量的比较规则,在这里说一下,有两种,一种是自动填充空格,一种是不自动填充空格1,自动填充空格:比较两个字符串的时候,如果长度不一致,那么会在长度短的字符串最后填补空格到相同长度,比较顺序是从左到右。这种比较规则局限于字符常量,char,nchar,user函数的返回值。2,不自动填充空格:比较...
null的研究(终篇)&char的开篇
在官方文档中,说null与空字符串是等价的。但是oracle建议不要把他们当成一样,因为以后可能会改变。另外,他们还是有区别的:1,is null 或者 is not null,这是整体的,不能把null换成空字符串;2,在case 或者decode中,null和空字符串也是有区别的;3,null可以成为boolean类型的第三个值,空字符串不行;4,plsql...
null的研究(第三发)
null与sql一个老生常谈的例子,两张表 t1,t2要查询t1表中不在t2表的数据。别的还行,如果是用not in,那么结果就不对了。简单写得几个写法如下:SQL> create table t1( a number,b number);Table created.SQL> create table t2( a number,b number);Table created.SQL> insert into t1 values(1,2);...
一个sql输出乘法口诀
忙碌的一天,不多说~~!itpub上的输出结果,我的写法如下:SQL> with t as 2 (select rownum r from dual connect by rownum < 10) 3 select substr(listagg(s, ' ') within group(order by s), 4 &nb...
null的研究(第二发)
第二发主要是null与索引还记得刚刚工作的时候,有一个很简单的sql查询一个表的数据,根据一个字段排序,这个字段有索引,但是没有任何约束,也没有null值但是呢,相同场景再现如下:SQL> select * from emp where rownum<3 order by hiredate;Execution Plan-----------------------------------------------...
null的研究(第一发)
首先,关于null这个东西,他是自适应类型的,意思是他可以是任何类型的,如果他在一个varchar2列,那他就是v archar2类型,在一个number列,那他就是number类型,这和‘’是不一样的,同样,null和空字符串,按照当前来说是一样的(我的oracle版本是11.2.0.4),但是和空格是不一样的。1,null,空格,空字符串在oracle中...
统计信息管理
第一章 统计信息是什么统计信息为了让oracle 的SQL优化器了解数据信息 包括数据量的多少和分布,以便SQL优化器 CBO能够获得较佳的执行计划,较好的执行计划 意味着oracle对于不同的SQL使用合理的访问路径和Join方式,简而言之是得到更好的性能。一般情况下,查询...
有索引,却不走索引的情况
今天时间不多,主要在写开发规范,一些业务sql也不能贴上来,只能简略的写一下编写SQL时,在查询列上使用函数、在查询列上做运算、传入类型不一致的参数等都有可能导致隐式转换的发生。发生隐式转换可能会导致索引无法被使用,还会消耗不必要的资源,使得SQL效率低下。 因此,为了避免隐式转换,在编写SQL时应注意以...
merge
merge,从t1表更新数据到t2表,如果t2的name字段的纪录在t1中存在,就将money的值累加,如果不存在,就把t1的值插入到t2中。如果不用merge的话,那么这个至少是需要一个update和一个insert的。现在,嘿嘿。。。1,创建测试表及数据建表的窗口丢了,自己写个脚本查出建表语句如下:SQL> @getddlPlease enter the object_...
趣味题sql,1-9,三个数字一组,前两组之后等于第三组
在论坛上看到一篇帖子,尝试了写一下,发现基本上所有人都自连接了三次,笛卡尔积非常大,所以效率特别低,我的写法,只需要自连接两次,效率提升很多,不过我判断是否有重复数字的步骤,不是最好的,但是效率仍然没的说,毕竟笛卡尔积小了太多。SQL> with t as 2 (select r &nbs...
10046之诊断绑定变量问题
今天整的是如何用10046来判断绑定变量的问题。(剑破冰山学习笔记)10046和10053,是两个比较常用的:10046出来的,是整个sql的执行过程,详细到整个执行过程中每一步的用时,比如:在10046中,可以看到,在解析这一步花了多长时间,在execute多久,fetch多久等等;10053呢,是针对优化器的,从10053中看到的,是为什么...
杀掉一个正在执行的sql
1,首先,执行一个比较消耗资源的sql语句测试语句如下:select count(*) from all_objects,all_objects;2,记忆中,v$session_longops中会记录执行时间超过6s的sql,下面去验证记忆(此时我已经午睡醒了)SQL> select username,sid,opname, 2 round(sofar*100 / totalwork,0)...