oracle SQL/PLSQL
ghostgant
在校大学生,大二
展开
-
sql语句中常量的处理
<br />在基于COST的优化,怎样提高性能<br />1、在写sql时,应该尽量避免对列操作,这样不仅会导致无法使用索引,而且还会增加执行成本,导致sql执行速度变慢。<br />2、即使包含了比较复杂的运算和多次数据转化,但是常量在执行开始之间就计算好了,因此,一次的计算不会对查询带来多大的影响。<br />3、如果不能避免常量的计算或类型转化,尽量让计算或转化的结果直接等于列的值,不要对列进行计算或转化<br /><br />正确写法:<br />SQL> set timing on<br />SQ原创 2010-06-28 15:30:00 · 1617 阅读 · 0 评论 -
Oracle9i&10g 树查询特性
<br />例子:<br />SELECT (SELECT ID FROM TEST WHERE LEVEL = A.LV START WITH ID=A.ID CONNECT BY ID = PRIOR F_ID) F_ID,ID FROM (SELECT ID,LEVEL LVFROM TEST CONNECT BY ID = FID) A<br />查询Test表里面所以字节点的父节点<br /> <br />10g 的新特性<br /> 第一个伪列是CONNECT_BY_ISLEAF,用来原创 2010-06-29 09:55:00 · 901 阅读 · 0 评论 -
趣味题2:判断记录连续性的问题
<br />1、大致的需求是使用SQL来判断记录的连续性,并找到每段记录的最小值和最大值。<br /> 核心思想是通过和ROWNUM的比较,给不同的时间段分配不同的值,然后根据这个值进行GROUP。需要额外注意的是,首先要保证记录是按照顺序读取的,否则的话,会导致记录错误的分段。其次需要注意的是时间的处理,这里是将年和月的信息存在一个字符串中,但是判断记录是否连续需要根据时间的规则处理。而且,每个月包含的天数是不一致的,因此,需要使用处理月份的函数。<br />select min(time) ||‘原创 2010-06-30 16:30:00 · 1133 阅读 · 0 评论 -
rownum&row_number() over(order by column)区别
<br />select rownum,row_number() over(order by id) row_num from tab1;--这个查询rownum 是查不出数据的Oracle的bug<br /> <br />select rownum,a.* from (select row_number() over (order by id) row_num from tab1) a;--可以查询出数据<br /> <br />over() 就相当于加上了一个条件<br /> <br />sum(sal原创 2010-06-29 23:12:00 · 1009 阅读 · 0 评论 -
oracle 树状查询,查询根节点
1、第一种方法SQL> SELECT TO_NUMBER(SUBSTR(PATH, 2, INSTR(PATH, '/', 2) - 2)) ROOT_ID, ID2 FROM 3 (4 SELECT SYS_CONNECT_BY_PATH(ID, '/') || '/' PATH, ID 5 FROM TEST 6 WHERE ROWNUM 7 CONNECT BY PRIOR ID = FID8 )9 ;ROOT_ID ID ------------ ------------1 11 21 200516原创 2010-06-29 17:29:00 · 3272 阅读 · 0 评论 -
insert all 的好处
<br />例子子,从一张表里面读取数据插入到两张表;<br />1、最普通的方法是两个INSERT INTO SELECT语句。这种方法编码最简单,但是存在着两次插入的数据不一致的情况。如果要解决这个问题,必须通过人为加锁的方式,这样又会影响并发性。这样涉及到读两次的数据不一样<br />2、还有一种方式是通过临时表的方式。第一次将数据放到临时表中,然后通过临时表把数据分别插入目标表和日志表。这种方法虽然解决了并发性问题,但是效率比较低。相同的数据需要查询三次,插入三次。<br />3、如果数据量不大的话原创 2010-06-28 21:02:00 · 10834 阅读 · 1 评论 -
学习plsql笔记
<br />begin<br />v_deptno emp.deptno%type:=&deptno;<br />update emp set sal=sal*1.1 where deptno=v_deptno;<br />if sql%found then dbms_output.put_line('执行成功') ;else dbms_output.put_line('执行失败');<br />end;<br />sql%rowcount -- 修改的sql行数<br />declare<br />v_d原创 2010-06-28 16:14:00 · 1134 阅读 · 0 评论 -
Group by RollUp&Group by CUBE&GroupBy 区别
<br />1、如果是ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。<br />2、如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。<br /><br />举例:SQL> select grouping(index原创 2010-06-28 16:52:00 · 4206 阅读 · 0 评论 -
Oracle趣味题1
<br />题目:<br />1~9有9个数字,三个三个一组,可能正好能组成一个加法等式<br />比如:124+659=783<br />给出所有的结果,使用工具不限制<br /><br /> with tmp as(<br /> 2 select a.num from (select rownum as num from dual connect by rownum <= 999) a<br /> 3 where substr(a.num,1,1) != substr(a.num,2,1)<br原创 2010-06-28 16:09:00 · 683 阅读 · 0 评论 -
merge into的用法
<br />示例:支持Oracle10g<br />MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。<br /> <br />语法:<br /><br /> MERGE INTO [your table-name] [rename your table h原创 2010-06-28 11:27:00 · 465 阅读 · 0 评论 -
Oracle自定义聚集函数
<br />-- 创建对象类型<br />CREATE OR REPLACE TYPE T_LINK AS OBJECT ( <br /> STR VARCHAR2(30000),<br /> STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT T_LINK) RETURN NUMBER,<br /> MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT T_LINK,VALU原创 2010-06-24 18:35:00 · 678 阅读 · 0 评论 -
关于大批量数据转储,其中涉及到对数据进行转储
目标 对两张表 600万数据 的比对,按照某种格式,比对结果进行转储 前提是 两种表的的数据是不一致的,需要通过字典对照来进行把某张表的数据进行转换其中600万数据中有两个字段是 字符串的值,一个有逗号分隔,另一个没有逗号分隔 起初的做法,是新建了中间表,把两边的数据标准化,把串转换成列 这样 600万的数据拆掉就有可能生成3000万的数据 1、中间用的树状查询去拆分转原创 2012-02-21 14:16:26 · 569 阅读 · 0 评论