﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-陋舍-随笔分类-SQL</title><link>http://www.blogjava.net/lianyeyu/category/31573.html</link><description>先做人，后做事。</description><language>zh-cn</language><lastBuildDate>Sat, 17 May 2008 06:56:16 GMT</lastBuildDate><pubDate>Sat, 17 May 2008 06:56:16 GMT</pubDate><ttl>60</ttl><item><title>Oracle中常见函数的使用</title><link>http://www.blogjava.net/lianyeyu/archive/2008/05/17/201087.html</link><dc:creator>连夜雨</dc:creator><author>连夜雨</author><pubDate>Sat, 17 May 2008 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/lianyeyu/archive/2008/05/17/201087.html</guid><wfw:comment>http://www.blogjava.net/lianyeyu/comments/201087.html</wfw:comment><comments>http://www.blogjava.net/lianyeyu/archive/2008/05/17/201087.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lianyeyu/comments/commentRss/201087.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lianyeyu/services/trackbacks/201087.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;工作中根据不同的业务需要查询出不同的结果集，于是用到了以前很少用到的一些Oracle函数，先记录下来收集的一些函数的用法。<br />
<br />
<span style="font-size: 14pt; font-family: 黑体"><strong style="font-family: 宋体">nvl</strong></span></p>
过查询获得某个字段的合计值，如果这个值位null将给出一个预设的默认值<br />
<font color="brown">select nvl(sum(t.dwxhl),1) from tb_jhde t where zydm=-1<br />
</font>这里关心的nvl的用法，nvl（arg,value）代表如果前面的arg的值为null那么返回的值为后面的value 。
<p>另一个有关的有用方法<br />
<font color="brown">declare&nbsp;<br />
i integer<br />
select nvl(sum(t.dwxhl),1) into i from tb_jhde t where zydm=-1<br />
</font>这样就可以把获得的合计值存储到变量i中，如果查询的值为null就把它的值设置为默认的1 。<br />
<br />
GREATEST<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
功能: 集合中的最大值 <br />
思路: 确定第一个参数是什么类型,之后所有的参数全部转换成这种类型再比较. <br />
<br />
注意: <br />
(1) 参数只能是集合,不能是子查询.<br />
(2) 并且只选择第一个字符最大的. <br />
<br />
函数: <br />
FUNCTION GREATEST (pattern NUMBER) return NUMBER;<br />
pragma BUILTIN('GREATEST',12,240,240);-- This is special cased in PH2 -- Pj<br />
<br />
function GREATEST (pattern VARCHAR2 CHARACTER SET ANY_CS)<br />
return VARCHAR2 CHARACTER SET pattern%CHARSET;&nbsp;&nbsp;&nbsp; <br />
pragma BUILTIN('GREATEST',12,240,240);-- This is special cased in PH2 -- Pj<br />
<br />
function GREATEST (pattern DATE) return DATE;<br />
pragma BUILTIN('GREATEST',12,240,240);-- This is special cased in PH2 -- Pj<br />
<br />
例子:<br />
SELECT GREATEST(SELECT gb.set_of_books_id FROM gl_sets_of_books gb)<br />
FROM dual<br />
--ORA-00936: missing expression<br />
<br />
SELECT GREATEST(100,1,3,11)FROM dual;<br />
--100<br />
<br />
SELECT GREATEST('100',1,3,11)FROM dual;<br />
--3<br />
<br />
SELECT GREATEST('a',1,3,11)FROM dual;<br />
--'a'<br />
<br />
SELECT GREATEST('abc','bcd','cde','cda')FROM dual;<br />
--'cde'<br />
--这里只是 <br />
<br />
SELECT GREATEST(100,1,'3',11)FROM dual;<br />
--100<br />
<br />
SELECT GREATEST(100,1,3,'a')FROM dual;<br />
--ORA-01722: invalid number<br />
--无效数字 <br />
<br />
<strong style="font-size: 14pt">start with&#8230;&#8230;connect by<br />
</strong></p>
使用start with&#8230;&#8230;connect by子句进行分级查询<br />
<br />
部门branch_code与营业部sub_branch_cod关系二叉树如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 02<br />
&nbsp;&nbsp;&nbsp;&nbsp; 011&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 022<br />
0111&nbsp;0112&nbsp;0121&nbsp;0122&nbsp;0211&nbsp;0212&nbsp;0221&nbsp;0222<br />
<br />
* start with 用于指定查询的根行<br />
* connect by 用于指定父行与子行的关系<br />
* PRIOR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在条件表达式中引导父行<br />
* lpad&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 函数用来填充字段串左边的位置，从而达到格式化的目的<br />
* where&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用于过滤查询结果 <br />
<br />
--查询语句：<br />
SQL&gt; select lpad(branch_code,LENGTH(branch_code)+(LEVEL*2)-2,'_') as branch<br />
&nbsp; 2&nbsp; from test_11<br />
&nbsp; 3&nbsp; where branch_code &lt;&gt; '0000'<br />
&nbsp; 4&nbsp; start with branch_code='0'<br />
&nbsp; 5&nbsp; connect by PRIOR sub_branch_code=branch_code<br />
&nbsp; 6&nbsp; /<br />
<br />
BRANCH<br />
--------------------------------------------------------------------------------<br />
0<br />
__01<br />
____012<br />
____012<br />
__01<br />
____011<br />
____011<br />
0<br />
__02<br />
____021<br />
____021<br />
__02<br />
____022<br />
____022 <br />
14 rows selected<br />
<br />
<strong style="font-size: 14pt">intersect运算</strong> <br />
返回查询结果中相同的部分 <br />
<br />
(各个部门中有哪些相同的工种) <br />
select job from account intersect select job from research <br />
intersect <br />
select job from sales; <br />
<br />
<strong style="font-size: 14pt">minus运算</strong> <br />
返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。<br />
 <br />
(有哪些工种在财会部中有，而在销售部中没有？) <br />
select job from account <br />
minus <br />
select job from sales;<br />
<br />
<strong>取四舍五入的几位小数</strong><br />
<span style="font-size: 12px"><span style="font-size: 12pt">round(n+0.{m个0}5, m)<br />
</span><br />
<span style="font-size: 12pt">比如， 取两位的话:<br />
round(15.333 + 0.005, 2)</span><br />
</span>
<img src ="http://www.blogjava.net/lianyeyu/aggbug/201087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lianyeyu/" target="_blank">连夜雨</a> 2008-05-17 14:07 <a href="http://www.blogjava.net/lianyeyu/archive/2008/05/17/201087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>