一、时间处理函数

trunc(sysdate) 返回日期

to_date()

to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')

to_number() 转为数字

二、字符串处理函数

substr(bag.serialid, 0, 13) 截取字符串

regexp_substr(i_sBloodSubType, '[^,]+', 1, level) 正则

regexp_replace(i_sBloodSubType, '[^,]+', '')

regexp_like()

instr(b.fullname, '新鲜') 返回要截取的字符串在源字符串中的位置 参数:(源字符串, 目标字符串, 起始位置, 匹配序号)

length()

三、判断

=

!=

>

<

and

or

not

IS NULL

in ('血浆类', '低温沉淀物类')

exists()

coalesce(表达式1,表达式2,...,表达式n),n>=2,此表达式的功能为返回第一个不为空的表达式,如果都为空则返回空值。

nvl(表达式1,表达式2) 为空则取表达式2的值

decode() DECODE(value,if1,then1,if2,then2,if3,then3,...,else)

case when...then.... end 表达式

CASE语句寻找when的优先级是从上到下。再多的when,也只有一个出口,即其中有一个满足了expr就马上退出case,这点需要牢记

四、整合

cursor() 返回{字段名=值,.....} 整个结果集作为某一个字段 仅Oracle可用

五、去重

distinct

六、聚集查询

count()

sum()

max()

min()

avg()

查询聚集函数得到的结果和其他字段,该字段一定要被group by,否则会报错

wm_concat(column)  将字段合并

row_number() over(partition by 列 order by 列 desc) 为什么要用它?其实每次查询都会有一个伪列rownum,只是伪列的顺序是乱的,解决伪列顺序的问题还得使用子查询。所以这里直接用row_number()

group by rollup() grouping() 参考http://blog.itpub.net/519536/viewspace-610995/

实例:

对group_id进行普通的group by操作---按照小组进行分组

SQL> select group_id,sum(salary) from group_test group by group_id;

GROUP_ID SUM(SALARY)

---------- -----------

30 12000

20 8000

40 16000

10 4000

对group_id进行普通的roolup操作---按照小组进行分组,同时求总计

SQL> select group_id,sum(salary) from group_test group by rollup(group_id);

GROUP_ID SUM(SALARY)

---------- -----------

10 4000

20 8000

30 12000

40 16000

40000

以上rollup语句可以翻译成group by union all 语句,为:

select group_id,sum(salary) from group_test group by group_id

union all

select null, sum(salary) from group_test

order by 1;

GROUP_ID SUM(SALARY)

---------- -----------

10 4000

20 8000

30 12000

40 16000

40000

如果显示“1”表示GROUPING函数对应的列(例如JOB字段)是由于ROLLUP函数所产生的空值对应的信息,即对此列进行汇总计算后的结果。

如果显示“0”表示此行对应的这列参未与ROLLUP函数分组汇总活动。

having子句 一般是同group by一起使用的,用来筛选聚合后的结果

七、结果联合

union 可能有重复值,且需要去重的时候使用,否则会浪费去重的查询资源

union all 不需要去重的时候使用

with as 把一大堆重复用到的sql语句放在with as里面,取一个别名,后面的查询就可以用它

八、左右连接另一种写法

h.operator=op.id(+) 右连接

h.operator(+)=op.id 左连接

九、将结果集转为xml形式返回

dbms_xmlgen 用户处理xml格式 sys_refcursor 用来接收结果集 sysdate 系统时间

oracle 10g中,有两个包,用于处理xml格式: dbms_xmlgen 和 dbms_xmlstore.

更多dbms参考 http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_xmlgen.htm#i1010859

2.使用dbms_xmlgen生成数据表的xml格式

declare

xmlhdl dbms_xmlgen.ctxtype;

line varchar2(200);

xmltext varchar2(32767);

begin

-- create ctxhandle

xmlhdl := dbms_xmlgen.newcontext('select * fromxmldemo');

--generate xml format data into clob

xmltext :=dbms_xmlgen.getxml(xmlhdl);

--display the xml content

loop

exit when xmltext is null;

line :=substr(xmltext,1,instr(xmltext,chr(10))-1);

dbms_output.put_line(line);

xmltext :=substr(xmltext,instr(xmltext,chr(10))+1);

end loop;

--close ctxhandle

dbms_xmlgen.closecontext(xmlhdl);

end;

3.dbms_xmlgen其它函数

getnumrowsprocessed(xmlhandle):=getxml所处理的实际行数

dbms_xmlgen.setMaxRows(xmlhdl,10):=允许处理最大行数

dbms_xmlgen.setrowsettag(xmlhdl,'Packet'):=重置行集标签rowset

dbms_xmlgen.setrowtag(xmlhdl,'Record'):=重置行标签row

dbms_xmlgen.setnullhandling(xmlhdl,2):=列空值如何表示,如:<A/>

实例:

function queryBloodIn(i_sHandoverId in varchar2) return clob as

res clob;

-- 和 dbms_xmlgen.ctxtype 结果一样

ctx dbms_xmlgen.ctxHandle;

-- declare result set 申明结果集

refcur sys_refcursor;

begin

-- 将查询结果保存到结果集

OPEN refCur FOR

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as time,

substr(bag.serialid, 0, 13) as serialid,

b.shortname as bloodname,

bst.name as bloodsubtype

from pm_handover h,pm_handoverdetail hd,bloodbag bag,d_blood b,d_bloodsubtype bst

where h.id=i_sHandoverId

and h.type in (2, 102, 152)

and hd.handoverid=h.id

and (h.accepttime > trunc(sysdate) or exists(select null from pm_store s where s.bloodbagid = hd.bloodbagid and s.status in ('Processing', 'Producing')))

and hd.bloodbagid=bag.id

and bag.bloodid=b.id

and b.subtype=bst.id;

-- get Handle 得到处理对象

ctx:=dbms_xmlgen.newContext(refCur);

-- 空值处理

dbms_xmlgen.setNullHandling(ctx,dbms_xmlgen.EMPTY_TAG);

-- 设置列名作为标签名

dbms_xmlgen.useItemTagsForColl(ctx);

-- 得到xml结果

res:=dbms_xmlgen.getXML(ctx);

-- 关闭上下文

dbms_xmlgen.closeContext(ctx);

RETURN res;

end;

Oracle中碰到的函数和关键字收集的更多相关文章

  1. Oracle中的单行函数

    Oracle中的单行函数 1 字符函数 UPPER()--将字符串转换为大写 SELECT UPPER('abc') FROM dual; LOWER()-将字符串转换为小写 SELECT LOWER ...

  2. Oracle中 Instr 这个函数

    http://www.jb51.net/article/42369.htm sql :charindex('字符串',字段)>0 charindex('administrator',MUserI ...

  3. 创建类似于Oracle中decode的函数

    -- 创建类似于Oracle中decode的函数create or replace function decode(variadic p_decode_list text[])returns text ...

  4. Oracle中的substr()函数 详解及应用

    注:本文来源于<Oracle中的substr()函数 详解及应用> 1)substr函数格式   (俗称:字符截取函数) 格式1: substr(string string, int a, ...

  5. MySQL之实现Oracle中的rank()函数的功能

      假设表格为student, 数据如下:   我们要在MySQL中实现Oracle中的rank()函数功能,即组内排序,具体来说: 就是对student表中按照课程(course)对学生(name) ...

  6. oracle中的trim()函数详解

    1.先看一下Oracle TRIM函数的完整语法描述 TRIM([ { { LEADING | TRAILING | BOTH }[ trim_character ]| trim_character} ...

  7. oracle中的greatest 函数和 least函数

    oracle中的greatest 函数和 least函数 原文地址:https://blog.csdn.net/sinat_32023305/article/details/78778596    g ...

  8. 问题:oracle nvl;结果:Oracle中的NVL函数

    Oracle中的NVL函数 (2012-11-30 13:21:43) 转载▼ 标签: nvl oracle 分类: Oracle Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换 ...

  9. Oracle中的转换函数

    Oracle中的转换函数有三个,分别为to_char(),to_date(),to_number() 1.to_char()的用法 格式化当前的日期时间 select sysdate,to_char( ...

随机推荐

  1. IIS 部署ASP.Net, WebAPI, Restful API, PUT/DELETE 报405错解决办法, webapi method not allowed 405

    WebDAV 是超文本传输协议 (HTTP) 的一组扩展,为 Internet 上计算机之间的编辑和文件管理提供了标准.利用这个协议用户可以通过Web进行远程的基本文件操作,如拷贝.移动.删除等.在I ...

  2. Java基础——深入理解Java中的final关键字(转载)

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

  3. Mysql数据库读写分离Amoeba

    1.理解读写分离的原理 随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状.读写分离现在被大量应 ...

  4. 【Egret】中tree组件使用案例

    Egret中tree组件使用案例,包含(文本过多时,自动换行功能) 下面代码结合http://bbs.egret.com/forum.php?mod=viewthread&tid=19028& ...

  5. SQL语句中的日期查询

    我们先创建一个表: CREATE TABLE `student` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(10) NULL COMMEN ...

  6. K近邻 Python实现 机器学习实战(Machine Learning in Action)

    算法原理 K近邻是机器学习中常见的分类方法之间,也是相对最简单的一种分类方法,属于监督学习范畴.其实K近邻并没有显式的学习过程,它的学习过程就是测试过程.K近邻思想很简单:先给你一个训练数据集D,包括 ...

  7. 介绍三个Android支持库控件:TabLayout+ViewPager+RecyclerView

    本文主要介绍如下三个Android支持库控件的配合使用: TabLayout:android.support.design.widget.TabLayout ViewPager:android.sup ...

  8. Java虚拟机创建对象的内存分配以及对象的内存布局

    本博文知识参考周志明<深入理解Java虚拟机> Java虚拟机在创建对象使如果进行内存分配: 1.指针碰撞 2.空闲列表 Java在多线程情况下创建对象的内存分配: Java完成对象内存分 ...

  9. Web前端相关资源

    Web前端相关 GRUNT: js task runner Sea.js: js模块化 knockout.js:MVVM开发前台,绑定技术 Angular.js: 使用超动感HTML & JS ...

  10. BeautifulSoup库children(),descendants()方法的使用

    BeautifulSoup库children(),descendants()方法的使用 示例网站:http://www.pythonscraping.com/pages/page3.html 网站内容 ...