Oracle SQL
吐槽达达仔
这个作者很懒,什么都没留下…
展开
-
Oracle 数组类型
Oracle的数组类型,范例:create or replace function my_test(p_str varchar2)return numberas--普通变量v_var varchar2(1000);--固定长度数组type v_ar is varray(10) of varchar2(30); my_ar v_ar:=v_ar('g','m','d'...原创 2012-10-16 11:07:47 · 181 阅读 · 0 评论 -
Oracle版 WITH语句的使用
本文是看了DB2 SQL精粹有感写的Oracle版本,毕竟两个大公司的产品有不同嘛。 说起WITH 语句,除了那些第一次听说WITH 语句的人,大部分人都觉得它是用来做递归查询的。其实那只是它的一个用途而已,它的本名正如我们标题写的那样,叫做:公共表表达式(Common Table Expression),从字面理解,大家觉得它是用来干嘛的呢?其实,它是用来定义临时集合的。...2012-08-16 23:24:27 · 296 阅读 · 0 评论 -
Oracle 分区攻略(一)
说到大数据,在传统数据库里面,分区是首要的解决方案。那么,我总结了一下公司里面的培训资料,做了一份Oracle分区攻略。仅供学习参考。首先,回顾一下Oracle的表空间创建和表创建。[code="sql"]--表空间创建create tablespace user_temp tempfile 'D:\oracle\oradata\Oracle9i\user_tem...2012-08-17 15:35:29 · 95 阅读 · 0 评论 -
Oracle 分区攻略(二)
为了应对不同的分区情况,普通的分区不足以满足日益增长的系统需求。所以我们不仅仅有好的分区结构,而且也要很好的维护我们的分区。混合分区:[code="sql"]create table TRACK ( TRACK_ID NUMBER(20) not null, COMP_CDE ...原创 2012-08-17 15:45:44 · 76 阅读 · 0 评论 -
Oracle 分区攻略(三)
分区索引与全局索引的使用介绍本地索引:[code="sql"]drop index Dept_List_Index;CREATE INDEX Dept_List_Index ON DEPT_List (DeptNo) LOCAL;select table_name,partition_name,high_value from user_tab_partitions ...原创 2012-08-17 15:54:06 · 88 阅读 · 0 评论 -
EXSITS应该怎么用?
无论是做项目还是普通使用SQL,我们通常都会使用IN。因为很好理解,也很方便。但是,面对着多层查询嵌套,或者IN关键字里面的结果集数量巨大,查询的效率就会直线下降。这时候,我们应该用好EXSITS。首先,来一个简单的例子。[code="sql"]with score(id,name,subject,score)as(select 0,'张三','数学',88 from...原创 2012-08-20 18:04:34 · 278 阅读 · 0 评论 -
SQL之WITH语句进阶
WITH语句其实是SQL ANSI标准语句之一。我们在Oracle里面使用CONNECT BY语句进行递归查询。实际上,CONNECT BY仅仅属于Oracle自身的递归查询实现。在标准的数据库中,如DB2,SQL SERVER,PostgreSQL都是支持WITH语句进行递归查询。 通过使用WITH语句进行递归查询,我们完全可以手动实现Oracle中的SYS_CONNECT_BY...原创 2012-08-24 15:52:55 · 543 阅读 · 0 评论 -
Oracle存储过程返回游标
本人非常非常喜欢傻瓜教程。并不是因为傻瓜教程看了就成为傻瓜。而是很多东西的表现层是不同的,但内核与机制是类似的。所以我们不需要去记忆那么多固定的东西,就像SQL标准,DB2,SQL SERVER,ORACLE都有各自的实现。 好了,开始今天的总结: 首先,建立一个存储过程并通过out方式返回一个游标。create or replace procedure sp_te...原创 2012-09-24 18:29:18 · 308 阅读 · 0 评论 -
Oracle Multi_like函数
在VFP里面,有个很恶心的函数叫做inlist()。它可以作为inlist('%A%','%B%','%C%') 一次过like好几个,或者like一个数组。 好吧,因为业务需求,我们的SQL也有这样的需求。为了满足这个要求,我自己写了一个Multi_like函数来实现。 通过输入两个字符串,进行多个对比。想上函数代码。create or...原创 2012-09-27 21:13:38 · 149 阅读 · 0 评论 -
Oracle SQL判断字符串是否在目标字符串中的函数
根据需求,写了一段方法。用于识别以下的情况:判断 字符串A 在用逗号分隔的字符串B中是否存在如:v_str_a = aa ;v_str_b= aa,bb,dd,cc ; 如上,就返回Y,否则返回N。添加了一些校验。 以后可以根据需求,按照指定的分隔符,提取字符串。毕竟Oracle的字符串解析比较麻烦,能封装就封装。create or replac...2013-01-18 15:33:14 · 538 阅读 · 0 评论 -
Oracle 列转行函数 Listagg()
这是一个Oracle的列转行函数:LISTAGG() 先看示例代码:with temp as( select 'China' nation ,'Guangzhou' city from dual union all select 'China' nation ,'Shanghai' city from dual union all select 'China' n...原创 2012-10-16 09:58:45 · 1118 阅读 · 0 评论 -
Oracle Share Pool 与ORA-04031
oracle share pool详解:http://blog.csdn.net/tianlesoftware/article/details/6560956参考自:百度百科 共享池(Shared Pool)共享池是SGA保留的区,用于存储如SQL、PL/SQL存储过程及包、数据字典、锁、字符集信息、安全属性等。 共享池包含有:1) 库高速缓存(Library Cache);...原创 2013-07-16 11:25:46 · 135 阅读 · 0 评论 -
Oracle数据库设计中的不更新原则
在新增数据的时候,如果新的逻辑涉及到原有的信息,那么尽量是能不更新,就不更新。所谓的不更新原则。什么样的情况会有这样的问题呢? 比如说,用户下订单。如果你过往有购买订单,那么这次的订单就可以打折,但是原有的订单每次只能打折一次。 A -> B -> C有2种设计方式。如上面,A单根据B单打折,B单根据C单打折。 第一种,增加一个标致字段,如...原创 2013-02-04 16:39:58 · 126 阅读 · 0 评论 -
Oracle谓词推入
在Oracle中,谓词一般就是指where后面的那些过滤条件。 而在执行计划中,我们有时候会看到一个信息:VIEW PUSHED PREDICATE 就是传说中的谓词推入。 谓词推入是什么意思? 就是指视图(VIEW)在做关联之前,会将外面一层的数据放到视图里面先做过滤。一般是将外层关联的索引,放到视图内的表的索引上面来做。 在CSDN落落的Or...原创 2014-04-08 09:20:50 · 1461 阅读 · 0 评论 -
慎用堆表
有时候我们常常为了使用方便,省略建主键的建表方式。因为很多时候,这些数据来自于外部,而且数量和增长不会很大。 比如是一些存储过程刷新出来的结果集。 那么我们就会建一个堆表。什么是堆表?就是没有主键,也没有索引的表。 堆表在创建以后,数据库会以最快地速度把数据插入到磁盘中。在这个过程中,会产生磁盘碎片,数据分散的情况。这样会大大地降低数据密度。什么意思呢?...原创 2014-11-18 11:14:29 · 179 阅读 · 0 评论 -
使用Connect by进行递归查询
首先和使用WITH做递归查询一样,给数据库表插入一定的数据。[code="sql"]CREATE TABLE BBS ( PARENTID INTEGER NOT NULL, ID INTEGER NOT NULL, NAME VARCHAR(200) NOT NULL );insert into bbs (PARENTID,ID,NAME) values (0,1,'...2012-08-16 23:18:23 · 1256 阅读 · 0 评论 -
[转载]Oracle DBLink 创建及其使用和使用中问题解决
转载于[url]http://jadethao.iteye.com/blog/1576545[/url]1.创建dblink的语法: [code="sql"]CREATE [PUBLIC] DATABASE LINK link CONNECT TO username IDENTIFIED BY password USING ‘connectstring’ [/code]2...原创 2012-08-14 22:02:28 · 170 阅读 · 0 评论 -
Oracle 判断语句
首先是decode函数。decode的用法是DECODE(control_value,value1,result1[,value2,result2…][,default_result]);参数说明:control _value试图处理的数值。可以是数据库中表的某一列,DECODE函数将该数值与后面的一系列的偶序相比较,以决定返回值。value1是一组成序偶的数值...原创 2012-08-14 19:11:54 · 584 阅读 · 0 评论 -
Oracle集合类
首先,简单描述一下今天使用DBMS_OUTPUT.PUTLINE();的问题。这个output只能支持1000 bytes的数据量。如果超过这个数据量,就会报ORU-10027 buffer overflow,limit of 10000 bytes错误 。 如果你真的需要输出那么多的数据,请使用: set serveroutput on size 100000我们在...原创 2013-03-11 17:49:07 · 81 阅读 · 0 评论 -
Oracle填坑指南之长度为0的字符串
用一下语句查询,你认为结果是什么??select case when length(nvl(null,''))=0 then 1else 0 end from dual ; 我一直以为,这个结果是1。 后来经过试验证明, 在Oracle数据库里面''空字符串等于NULL。所以NVL(NULL,'')是没有任何意义的!! 所以,在判断语句的时候想使用where ...2013-03-18 16:20:42 · 1243 阅读 · 1 评论 -
Oracle Merge into语句
研究这个语句完全是为了偷懒而使用的。因为在Java写后台程序的时候,经常会出现存在则UPDATE,不存在则INSERT的需求。用SQL来完成就是要做3条SQL,用Hibernate写就就方便咯。可是我用的是iBatis,就要写三条了。。 简单地说一下这个SQL吧。 MERGE INTO target_tbl a USING new_record b ...原创 2013-03-29 15:35:06 · 331 阅读 · 0 评论 -
Oracle FUNCTION与PROCEDURE的最大区别
Oracle function里面是可以允许有DML语句的,但是不能在查询的时候使用。我们常用的function如:select max(a) from table ; 这种调用方式是不能执行带有DML的FUNCTION的。 但是如果不用在SQL里面是可以有的比如 dbms_output.put_line(func(...)); 如果函数里面采用自治事务,是可以有DML ...原创 2013-04-03 15:12:57 · 141 阅读 · 0 评论 -
Oracle SQL 嵌套CASE WHEN
尝试了一下,Oracle CASE WHEN 是可以支持嵌套使用的。虽然看起来比较恶心,但是还是挺有用的。 select case when (1 = 1) then case when(2=3) then 'A' else 'K' ...原创 2013-04-09 20:11:14 · 1391 阅读 · 0 评论 -
[转]Oracle表连接方式学习
出自:http://www.itpub.net/thread-207865-1-1.html 一般常见的Oracle数据库连接有3种:Nested Loop,Merge,Hash Join 1.嵌套循环联接NL(Neeted Loop) 嵌套循环联接也称为嵌套迭代,它将一个联接输入用作外部输入表(显示为图形执行计划中的顶端输入),将另一个联接输入用作内部(底端)输入表...原创 2013-04-10 20:40:09 · 79 阅读 · 0 评论 -
Oracle和Cognos Framework Manager中decode妙用,CASE WHEN也可以!
我们都知道Decode函数可以用来做什么作用,如果这个不知道的话,请找下度娘。那么,今天就来介绍一下,在WHERE条件语句里面使用Decode函数。 由浅入深,先一步一步来。。with tmp as( select 1 val,null flag from dual union all select 1 val,'a' flag from dual union all...2012-11-05 17:44:24 · 186 阅读 · 0 评论 -
Oracle索引的新认识
首先,Oracle的索引有。普通索引B*树,BitMap索引,函数索引,组合索引,反转索引。 那么这里主要说一下常用的索引。B*树索引就是普通索引。使用方式如下:create index idx_a on my_table(a); B*树的组合索引用法如下:create index idx_a_b on my_table(a,b); 组合索引是普通索引的一种...原创 2012-11-08 16:16:40 · 78 阅读 · 0 评论 -
总结Oracle数组和BULK COLLECT INTO
Oracle中使用数组,就像JAVA使用对象List<Object>一样,但是稍微有点不同。对于每个Object使用之前,需要做声明。 具体实现如下:declare --%ROWTYPE使用可以直接使用类型,非常方便,但是个性化定义就要使用Record如下: type tbl_type is table of my_tbl%rowtype...原创 2013-04-19 23:29:03 · 395 阅读 · 0 评论 -
Oracle 分析函数Lead(),Lag()
其实这2个函数的作用非常好理解,Lead()就是取当前顺序的下一条记录,相对Lag()就是取当前顺序的上一行记录。经常会有判断在一定条件下的两条记录之间的时间差这样的需求。Lead()函数的用法和Lag()是一样的,所以只说明一个就可以了。 语法结构:lead(value_expr [,offset][,default]) over([query_partition_clau...原创 2013-04-22 21:18:29 · 691 阅读 · 0 评论 -
Oracle中使用Java存储过程
从Oracle8i开始,就有了对Java存储过程的支持。OracleJVM能够和操作系统紧密地结合在一起,快速的进行数据操作及管理。 Java存储过程与一般的JDBC程序有所不同的是: 1.有安全限制,毕竟是在oracle内部运行的,不允许访问操作系统的资源,如文件。 2.获取数据库联接方式,connection = new OracleDriver().defaultConnecti...原创 2012-11-13 13:51:04 · 94 阅读 · 0 评论 -
[转]Oracle中使用正则表达式
Oracle10开始支持正则表达式。介绍内容如下:ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE : 与LIKE的功能相似2,REGEXP_INSTR : 与INSTR的功能相似3,REGEXP_SUBSTR : 与SUBSTR的功能相似4,REGEXP_REPLACE : 与REPLACE的功能相似它们在用法上与Oracl...原创 2012-11-13 14:05:43 · 66 阅读 · 0 评论 -
Oracle 临时表
在Oracle8i或以上版本中,可以创建以下两种临时表:1.会话特有的临时表CREATE GLOBAL TEMPORARY ()ON COMMIT PRESERVE ROWS;2.事务特有的临时表CREATE GLOBAL TEMPORARY ()ON COMMIT DELETE ROWS;但是对比DB2,Oracle的临时表有着很大的却别。就像是JSP一样...2012-08-14 10:42:18 · 77 阅读 · 0 评论 -
[转发]Oracle 同义词
Oracle中创建同义词语句: 转发:[url]http://a1520708.iteye.com/blog/1170135[/url]Sql代码[code="sql"] create synonym table_name for user.table_name; create synonym table_name for user.table_name;[/code] ...原创 2012-08-14 16:56:48 · 103 阅读 · 0 评论 -
你真的会SQL吗?关于SQL的join和on之间的区别
写了那么多年的SQL,居然发现自己写的是错的,实在是惭愧不已。还好没出什么问题。于是,决定痛定思痛,纠正自己对SQL的错误认识。 我们有一个SQL:SELECT sys.Netbios_Name0 as [Computer Name], sf.fileNameFROM dbo.v_R_System as sys INNER JOIN dbo.v_...原创 2014-12-05 22:11:07 · 472 阅读 · 0 评论