﻿<?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-梦幻之旅-随笔分类-DataBase</title><link>http://www.blogjava.net/hwpok/category/27104.html</link><description>DEBUG - 天道酬勤</description><language>zh-cn</language><lastBuildDate>Tue, 27 May 2014 08:43:40 GMT</lastBuildDate><pubDate>Tue, 27 May 2014 08:43:40 GMT</pubDate><ttl>60</ttl><item><title>Oracle Data Guard Linux 平台 Physical Standby 搭建实例()</title><link>http://www.blogjava.net/hwpok/archive/2014/05/26/414117.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Mon, 26 May 2014 05:49:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2014/05/26/414117.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/414117.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2014/05/26/414117.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/414117.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/414117.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自: http://blog.csdn.net/tianlesoftware/article/details/5547565Data&nbsp;Guard&nbsp;环境：操作系统：&nbsp;redhat&nbsp;4.7&nbsp;Primary数据库：IP地址：10.85.10.1。数据库SID：orclDB_UNIQUE_NAME：orcl_pd&nbsp;Standby数据库：IP地址...&nbsp;&nbsp;<a href='http://www.blogjava.net/hwpok/archive/2014/05/26/414117.html'>阅读全文</a><img src ="http://www.blogjava.net/hwpok/aggbug/414117.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2014-05-26 13:49 <a href="http://www.blogjava.net/hwpok/archive/2014/05/26/414117.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 批量更新</title><link>http://www.blogjava.net/hwpok/archive/2013/01/07/393904.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Mon, 07 Jan 2013 05:14:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2013/01/07/393904.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/393904.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2013/01/07/393904.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/393904.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/393904.html</trackback:ping><description><![CDATA[<p>在大型的数据库应用中，我们经常会有针对表与表之间的关键建进行字段更新，那么在这个时候，我们就不能写简单的update来实现更新操作，而要针对具体的数据量来进行批量的update,下面几个例子是常用的SQL,将其做个对比，欢迎大家提出更好，更高效的SQL实现。</p>
<p><br />数据库：<strong style="background-color: #ffff66; color: black">Oracle</strong> 9i&nbsp;<wbr> 测试工具：PL/SQL</p>
<p>定义2张测试表：T1,T2<br />T1--大表 10000条 T1_FK_ID<br />T2--小表 5000条&nbsp;<wbr> T2_PK_ID<br />T1通过表中字段ID与T2的主键ID关联</p>
<p><br />模拟数据如下：<br /><br /></p>
<p>--T2有5000条记录<br />create table T2 as select rownum id, a.* from all_objects a where 1=0;<br />//T2表的字段和all_objects表字段类型以及默认值一致，但索引初始化了，需要重新设置<br /><br />--创建主键ID,向T2表copy数据<br />alter table T2 add constraint T2_PK_ID primary key (ID);<br />insert into T2 select rownum id, a.* from all_objects a where rownum&lt;=5000;<br />&nbsp;<wbr><br />--T1有10000条记录&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br />create table T1 as select rownum sid, T2.* from T2 where 1=0;<br /><br />-- 创建外键ID,向T1表copy数据<br />alter table T1 add constraint T1_FK_ID foreign key (ID) references t2 (ID);<br />insert into T1 select rownum sid, T2.* from T2;<br />insert into T1 select rownum sid, T2.* from T2;<br /><br />--更新Subobject_Name字段，初始为NULL<br />update T2 set T2.Subobject_Name='StevenHuang'<br /></p>
<p><br />需求：我们希望能把T1表的Subobject_Name字段也全部更新成'StevenHuang'，也就是说T1的10000条记录都会得到更新，以下SQL语句均在PL/SQL命令窗口测试。<br /><br />方法一:<br />写PL/SQL,开cursor</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" /><span style="color: #0000ff"><font size="2">declare</font></span><font size="2"><span style="color: #000000">&nbsp;<wbr><br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>l_varID&nbsp;<wbr></span><span style="color: #000000; font-weight: bold">varchar2</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">20</span></font><font size="2"><span style="color: #000000">);<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>l_varSubName&nbsp;<wbr></span><span style="color: #000000; font-weight: bold">varchar2</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">30</span></font><font size="2"><span style="color: #000000">);<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr></span><span style="color: #0000ff">cursor</span><span style="color: #000000">&nbsp;<wbr>mycur&nbsp;<wbr></span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;<wbr></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;<wbr>T2.Id,T2.Subobject_Name&nbsp;<wbr></span><span style="color: #0000ff">from</span></font><font size="2"><span style="color: #000000">&nbsp;<wbr>T2;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">begin</span></font><font size="2"><span style="color: #000000">&nbsp;<wbr><br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr></span><span style="color: #0000ff">open</span></font><font size="2"><span style="color: #000000">&nbsp;<wbr>mycur;&nbsp;<wbr><br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>loop<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></span><span style="color: #0000ff">fetch</span><span style="color: #000000">&nbsp;<wbr>mycur&nbsp;<wbr></span><span style="color: #0000ff">into</span></font><font size="2"><span style="color: #000000">&nbsp;<wbr>l_varID,l_varSubName;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></span><span style="color: #0000ff">exit</span><span style="color: #000000">&nbsp;<wbr></span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;<wbr>mycur&nbsp;<wbr></span><span style="color: #808080">%</span></font><font size="2"><span style="color: #000000">notfound;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></span><span style="color: #0000ff">update</span><span style="color: #000000">&nbsp;<wbr>T1&nbsp;<wbr></span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;<wbr>T1.Subobject_Name&nbsp;<wbr></span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;<wbr>l_varSubName&nbsp;<wbr></span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;<wbr>T1.ID&nbsp;<wbr></span><span style="color: #808080">=</span></font><font size="2"><span style="color: #000000">&nbsp;<wbr>l_varID;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr></span><span style="color: #0000ff">end</span></font><font size="2"><span style="color: #000000">&nbsp;<wbr>loop;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr></span><span style="color: #0000ff">close</span></font><font size="2"><span style="color: #000000">&nbsp;<wbr>mycur;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">end</span><span style="color: #000000">;</span></font></div>
<p>---耗时39.716s<br />显然这是最传统的方法，如果数据量巨大的话（4000万记），还会报&#8221;snapshot too old&#8221;错误退出,PL/SQL工具会挂掉<br /><br />方法二:<br />用loop循环，分批update<br /></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" /><span style="color: #0000ff"><font size="2">declare</font></span><font size="2"><span style="color: #000000">&nbsp;<wbr><br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>&nbsp;<wbr>i&nbsp;<wbr></span><span style="color: #000000; font-weight: bold">number</span></font><font size="2"><span style="color: #000000">;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>&nbsp;<wbr>j&nbsp;<wbr></span><span style="color: #000000; font-weight: bold">number</span></font><font size="2"><span style="color: #000000">;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">begin</span></font><span style="color: #000000"><br /><font size="2"><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>&nbsp;<wbr>i&nbsp;<wbr>:</font></span><font size="2"><span style="color: #808080">=</span><span style="color: #000000">&nbsp;<wbr></span><span style="color: #800000; font-weight: bold">1</span></font><font size="2"><span style="color: #000000">;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>&nbsp;<wbr>j&nbsp;<wbr>:</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;<wbr></span><span style="color: #800000; font-weight: bold">0</span></font><font size="2"><span style="color: #000000">;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;<wbr></span><span style="color: #ff00ff">count</span><span style="color: #000000">(</span><span style="color: #808080">*</span><span style="color: #000000">)&nbsp;<wbr></span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;<wbr>j&nbsp;<wbr></span><span style="color: #0000ff">from</span></font><font size="2"><span style="color: #000000">&nbsp;<wbr>T1;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>&nbsp;<wbr>loop<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></span><span style="color: #0000ff">exit</span><span style="color: #000000">&nbsp;<wbr></span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;<wbr>i&nbsp;<wbr></span><span style="color: #808080">&gt;</span></font><font size="2"><span style="color: #000000">&nbsp;<wbr>j;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></span><span style="color: #0000ff">update</span><span style="color: #000000">&nbsp;<wbr>T1&nbsp;<wbr></span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;<wbr>T1.Subobject_Name&nbsp;<wbr></span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;<wbr>(</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;<wbr>T2.Subobject_Name&nbsp;<wbr></span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;<wbr>T2&nbsp;<wbr></span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;<wbr>T1.ID&nbsp;<wbr></span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;<wbr>T2.ID)&nbsp;<wbr></span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;<wbr>T1.ID&nbsp;<wbr></span><span style="color: #808080">&gt;=</span><span style="color: #000000">&nbsp;<wbr>i&nbsp;<wbr></span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;<wbr>T1.ID&nbsp;<wbr></span><span style="color: #808080">&lt;</span></font><font size="2"><span style="color: #000000">&nbsp;<wbr><br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" /><br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />(i&nbsp;<wbr></span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;<wbr></span><span style="color: #800000; font-weight: bold">1000</span></font><font size="2"><span style="color: #000000">);<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>i&nbsp;<wbr>:</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;<wbr>i&nbsp;<wbr></span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;<wbr></span><span style="color: #800000; font-weight: bold">1000</span></font><font size="2"><span style="color: #000000">;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" />&nbsp;<wbr>&nbsp;<wbr></span><span style="color: #0000ff">end</span></font><font size="2"><span style="color: #000000">&nbsp;<wbr>loop;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">end</span></font><span style="color: #000000"><font size="2">;<br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" /></font></span></div>
<p>--耗时0.656s，这里一共循环了10次，如果数据量巨大的话，虽然能够完成任务，但是速度还是不能令人满意。(例如我们将T1--大表增大到100000记录 T2--小表增大到50000记录,将耗时10.139s)<br /><br />方法三:<br />--虚拟一张表来进行操作，在数据量大的情况下效率比方法二高很多.<br />&nbsp;<wbr>&nbsp;<wbr> <strong>注：此语句下T1,T2表中必须有相应的主外建关联，否则sql编译不能通过</strong>.<br /></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" /><font size="2"><span style="color: #0000ff">update</span><span style="color: #000000">&nbsp;<wbr>(</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;<wbr>T1.Subobject_Name&nbsp;<wbr>A1,T2.Subobject_Name&nbsp;<wbr>B1&nbsp;<wbr></span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;<wbr>T1,T2&nbsp;<wbr></span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;<wbr>T1.ID</span><span style="color: #808080">=</span><span style="color: #000000">T2.ID)&nbsp;<wbr></span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;<wbr>A1</span><span style="color: #808080">=</span></font><span style="color: #000000"><font size="2">B1;&nbsp;<wbr><br /><img title="ORACLE批量更新三种方法比较" alt="" align="top" src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" real_src="http://cache.baidu.com/Images/OutliningIndicators/None.gif" /></font></span></div>
<p>--耗时3.234s (T1--大表增大到100000记录 T2--小表增大到50000记录)<br />*以上所有操作都已经将分析执行计划所需的时间排除在外</p><img src ="http://www.blogjava.net/hwpok/aggbug/393904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2013-01-07 13:14 <a href="http://www.blogjava.net/hwpok/archive/2013/01/07/393904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PL/SQL中SELECT INTO无记录的情况</title><link>http://www.blogjava.net/hwpok/archive/2012/12/25/393477.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Tue, 25 Dec 2012 11:40:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2012/12/25/393477.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/393477.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2012/12/25/393477.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/393477.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/393477.html</trackback:ping><description><![CDATA[<em><font color="#993300">SELECT AMOUNT <br />&nbsp; INTO l_Amount <br />&nbsp; FROM T1 <br />WHERE... <br /></font></em>条件比较长，省略。可以保证最多只有一条相符结果。 <br />无记录的时候，想把l_Amount设为0。 <br /><br />为了应付无记录的情况，想了以下这些写法： <br /><br />第1种，先检查件数： <br /><em><font color="#993300">SELECT COUNT(*) INTO l_Cnt 以下省略 <br />IF l_Cnt &gt; 0 THEN <br />&nbsp; &nbsp; SELECT AMOUNT INTO l_Amount 以下省略 <br />END IF; </font></em><br /><br />第2种，用exception： <br /><font color="#993300"><em>FUNCTION GETAMOUNT RETURN NUMBER <br />IS l_Ret BEGIN SELECT AMOUNT INTO l_Ret 以下省略 <br />RETURN l_Ret <br />WHEN NO_DATA_FOUND THEN RETURN 0 END; </em></font><br /><br />第3种，用UNION： <br /><em><font color="#993300">SELECT AMOUNT <br />&nbsp; INTO l_Amount <br />&nbsp; FROM <br />( SELECT AMOUNT <br />&nbsp; FROM T1 <br />WHERE... <br />UNION ALL <br />&nbsp; SELECT 0 FROM DUAL <br />) <br />&nbsp; WHERE rownum &lt;=1; </font></em><br /><br />第4种，用NVL函数： <br /><font color="#993300"><em>SELECT NVL(MAX(AMOUNT), 0)因为最多就一条记录，MAX,MIN之类的函数都可以 <br />&nbsp; INTO l_Amount <br />&nbsp; FROM T1 <br />WHERE... </em></font><img src ="http://www.blogjava.net/hwpok/aggbug/393477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2012-12-25 19:40 <a href="http://www.blogjava.net/hwpok/archive/2012/12/25/393477.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows环境下Oracle数据库冷备份和恢复全过程 </title><link>http://www.blogjava.net/hwpok/archive/2012/09/28/388798.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Fri, 28 Sep 2012 10:05:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2012/09/28/388798.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/388798.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2012/09/28/388798.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/388798.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/388798.html</trackback:ping><description><![CDATA[<div>1.点击开始菜单的&#8220;运行&#8221;，输入sqlpluslog&nbsp;</div>
<div></div>
<div>2.在弹出的命令行窗口以sysdba身份登陆，要输入:系统用户名/登陆密码@数据库实例名，如sys/testora@orcl<br /></div>
<div>3.输入 alter database backup controlfile to trace resetlogs，然后在D:\oracle\product\10.1.0\admin\orcl\udump下找到</div>
<div>刚执行语句创建的文件，把下面这一段复制出来：</div>
<div>STARTUP NOMOUNT</div>
<div>CREATE CONTROLFILE SET DATABASE "ORCL" RESETLOGS &nbsp;ARCHIVELOG</div>
<div>&nbsp; &nbsp; MAXLOGFILES 16</div>
<div>&nbsp; &nbsp; MAXLOGMEMBERS 3</div>
<div>&nbsp; &nbsp; MAXDATAFILES 100</div>
<div>&nbsp; &nbsp; MAXINSTANCES 8</div>
<div>&nbsp; &nbsp; MAXLOGHISTORY 454</div>
<div>LOGFILE</div>
<div>&nbsp; GROUP 1 'D:\oracle\product\10.1.0\ORADATA\ORCL\REDO01.LOG' &nbsp;SIZE 10M,</div>
<div>&nbsp; GROUP 2 'D:\oracle\product\10.1.0\ORADATA\ORCL\REDO02.LOG' &nbsp;SIZE 10M,</div>
<div>&nbsp; GROUP 3 'D:\oracle\product\10.1.0\ORADATA\ORCL\REDO03.LOG' &nbsp;SIZE 10M</div>
<div>DATAFILE</div>
<div>&nbsp; 'D:\oracle\product\10.1.0\ORADATA\ORCL\SYSTEM01.DBF',</div>
<div>&nbsp; 'D:\oracle\product\10.1.0\ORADATA\ORCL\UNDOTBS01.DBF',</div>
<div>&nbsp; 'D:\oracle\product\10.1.0\ORADATA\ORCL\SYSAUX01.DBF',</div>
<div>&nbsp; 'D:\oracle\product\10.1.0\ORADATA\ORCL\USERS01.DBF',</div>
<div>&nbsp; 'D:\oracle\product\10.1.0\ORADATA\ORCL\USERS02.DBF',</div>
<div>&nbsp; 'D:\oracle\product\10.1.0\ORADATA\ORCL\TOOLS01.DBF'</div>
<div>CHARACTER SET ZHS16GBK;<br /></div>
<div>4.输入shutdown immediate停掉当前数据库实例。<br /></div>
<div>5.D:\oracle\product\10.1.0\db_1\database文件夹和第3步显示的那些LOGFILE和DATAFILE文件和'D:\oracle\product\10.1.0\ORADATA\里的控制文件都复制出来。</div>
<div>6.停掉新的数据库实例（新数据库实例与源数据库实例同名），将第5步复制的文件和文件夹覆盖新的数据库安装文件夹下的相对</div>
<div>应的文件和文件夹。<br /></div>
<div>7.如果新数据库实例的安装目录和源数据库实例的安装目录不同则需要将第3步复制的那一段修改为和新数据库实例相符的路径，</div>
<div>并在sqlplus中以sys用户登陆执行这段语句，至此备份恢复完毕。</div>
<div></div><img src ="http://www.blogjava.net/hwpok/aggbug/388798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2012-09-28 18:05 <a href="http://www.blogjava.net/hwpok/archive/2012/09/28/388798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle10g数据库冷备份、恢复的具体步骤(转)</title><link>http://www.blogjava.net/hwpok/archive/2012/09/27/388672.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Thu, 27 Sep 2012 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2012/09/27/388672.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/388672.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2012/09/27/388672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/388672.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/388672.html</trackback:ping><description><![CDATA[<div class="articalTitle">数据库冷备份、恢复的具体步骤（实例讲解）：<br />需求：现在将A及机器上的oracle10g数据库全部转移到B机器上，注意：A机器上的数据库很大（用户、表空间以及数据很庞大）</div>
<div id="sina_keyword_ad_area2" class="articalContent  ">
<p>冷备份：<br />1、在A机器上用shutdown immediat;命令将数据库停掉。<br />2、最关键的一部(copy文件)。将数据文件、重做日志文件、控制文件等、密码文件全部copy出来，根据个人的相关经验这些文件基本上在oradata下，所以把oradata全部copy即可，还有数据文件、密码文件一般是在db_1下的database下，所以要把database文件夹全部copy。<br />3、将A机器上的注册文件全部导出。在window的命令行输入regedit进入windows的注册文件界面，点击文件展开菜单点击导出即可导出注册文件。<br />（冷备份完成，接下来就恢复）</p>
<p>恢复：<br />1、在B机器上最好装与A机器相同的数据库结构，包括sid、口令、所装的路径等（本例只将A和B数据库结构一样，若不一样只需要改变控制文件里的路径即可）<br />2、将B机器上的oracle10g同样用shutdown immediat;停掉同时服务全部停掉（避免覆盖的时候出错）<br />3、将备份的oradata全部覆盖B机器上的oradata，同时也将备份database全部覆盖B机器上的db_1下的<br />database文件夹。将导出的注册文件导入到B机器上（具体怎么导给导出是一样的）<br />4、启动oracle10g的服务，在dos下用sqlplus "/as sysdba" 进入导oracle同时用startup重新启动oracle数据库，当出现加载数据库实例完成就ok了。</p>
<p>完工</p>
<p>注：冷备份常用于数据库的全库并且数据较庞大时的移植、备份等。一般用imp和exp或是DPimp和DPexp命令进行备份和恢复（DPimp和DPexp命令是oracle10g出现的新用法，其实和imp和exp用法基本一样，到google一搜很多）。</p></div><img src ="http://www.blogjava.net/hwpok/aggbug/388672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2012-09-27 11:16 <a href="http://www.blogjava.net/hwpok/archive/2012/09/27/388672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle  正则 匹配中文</title><link>http://www.blogjava.net/hwpok/archive/2012/04/07/373547.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Sat, 07 Apr 2012 12:08:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2012/04/07/373547.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/373547.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2012/04/07/373547.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/373547.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/373547.html</trackback:ping><description><![CDATA[<ol><li><span>[\u2E80-\u9FFF]+$&nbsp;&nbsp;&nbsp; </span>匹配所有东亚区的语言&nbsp;&nbsp;&nbsp; <br /></li><li><span>[\u4E00-\u9FFF]+$&nbsp;&nbsp;&nbsp;&nbsp; 匹配简体和繁体&nbsp;&nbsp;&nbsp;&nbsp; <br /></span></li><li><span>[\u4E00-\u9FA5]+$&nbsp;&nbsp;&nbsp;&nbsp; 匹配简体&nbsp; <br /></span></li></ol><img src ="http://www.blogjava.net/hwpok/aggbug/373547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2012-04-07 20:08 <a href="http://www.blogjava.net/hwpok/archive/2012/04/07/373547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PowerDesigner设置</title><link>http://www.blogjava.net/hwpok/archive/2012/01/11/368323.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 11 Jan 2012 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2012/01/11/368323.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/368323.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2012/01/11/368323.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/368323.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/368323.html</trackback:ping><description><![CDATA[<div class="postTitle"><strong>sql语句中表名与字段名前的引号去除：</strong><br /><br />打开cdm的情况下，进入Tools－Model Options－Naming Convention，把Name和Code的标签的Charcter case选项设置成Uppercase或者Lowercase，只要不是Mixed Case就行！<br />或者选择Database-&gt;Edit current database-&gt;Script-&gt;Sql-&gt;Format，有一项CaseSensitivityUsingQuote，它的 comment为&#8220;Determines if the case sensitivity for identifiers is managed using double quotes&#8221;，表示是否适用双引号来规定标识符的大小写， 可以看到右边的values默认值为&#8220;YES&#8221;,改为&#8220;No&#8221;即可！<br />或者在打开pdm的情况下，进入Tools－Model Options－Naming Convention，把Name和Code的标签的Charcter case选项设置成Uppercase就可以！<br /><br />&nbsp;<br /><br /><strong>在修改name的时候，code的值将跟着变动，很不方便</strong><br /><br />修改方法：PowerDesign中的选项菜单里修改，在[Tool]--&gt;[General Options]-&gt;[Dialog]-&gt;[Operating modes]-&gt;[Name to Code mirroring],这里默认是让名称和代码同步，将前面的复选框去掉就行了。<br /><br />&nbsp;<br /><br /><strong>由pdm生成建表脚本时，字段超过15字符就发生错误（oracle）</strong><br /><br />&nbsp; 原因未知，解决办法是打开PDM后，会出现Database的菜单栏，进入Database － Edit Current DBMS －script－objects－column－maxlen，把value值调大(原为30)，比如改成60。出现表或者其它对象的长度也有这种错误的话都可以选择对应的objects照此种方法更改！<br />或者使用下面的这种方法：<br />&nbsp;&nbsp;&nbsp;&nbsp; 生成建表脚本时会弹出Database generation提示框：把options － check model的小勾给去掉，就是不进行检查（不推荐）！<br />&nbsp;&nbsp;&nbsp; 或者可以修改C:\Program Files\Sybase\PowerDesigner Trial 11\Resource Files\DBMS\oracl9i2.xdb文件<br />&nbsp;&nbsp;&nbsp;&nbsp; 修改好后，再cdm转为pdm时，选择&#8220;Copy the DBMS definition in model&#8221;把把这个资源文件拷贝到模型中。<br /><br />&nbsp;<br /><br /><strong>由CDM生成PDM时，自动生成的外键的重命名</strong><br /><br />PDM Generation Options-&gt;Detail-&gt;FK index names默认是%REFR%_FK，改为FK_%REFRCODE%，其中%REFRCODE%指的就是CDM中Relationship的code！另外自动生成的父字段的规则是PDM Generation Options-&gt;Detail-&gt;FK column name template中设置的，默认是%.3:PARENT%_%COLUMN%，可以改为Par%COLUMN%表示是父字段！<br /><br />&nbsp;<br /><br /><strong>&nbsp;建立一个表后,为何检测出现Existence of index的警告</strong><br />&nbsp;&nbsp;&nbsp; A table should contain at least one column, one index, one key, and one reference.<br />可以不检查 Existence of index 这项，也就没有这个警告错误了！<br />意思是说没有给表建立索引，而一个表一般至少要有一个索引，这是一个警告，不用管也没有关系！<br /><br />&nbsp;<br /><br /><strong>如何防止一对一的关系生成两个引用（外键）</strong><br />要定义关系的支配方向，占支配地位的实体（有D标志）变为父表。<br />在cdm中双击一对一关系-&gt;Detail-&gt;Dominant role选择支配关系<br /><br />&nbsp;<br /><br /><strong>修改报表模板中一些术语的定义</strong><br />即文件：C:\Program Files\Sybase\PowerDesigner Trial 11\Resource Files\Report Languages\Chinese.xrl<br />Tools－Resources－Report Languages－选择Chinese－单击Properties或双击目标<br />修改某些对象的名称：Object Attributes\Physical Data Model\Column\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ForeignKey：外键<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mandatory：为空<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Primary：主键<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Table：表<br /><strong>用查找替换，把&#8220;表格&#8221;替换成&#8220;表&#8221;</strong><br />修改显示的内容为别的：Values Mapping\Lists\Standard，添加TRUE的转化列为是，FALSE的转化列为空<br />另外Report－Title Page里可以设置标题信息<br /><br />&nbsp;<br /><br /><strong>PowerDesigner11中批量根据对象的name生成comment的脚本</strong><br /><br />'******************************************************************************<br />'* File:&nbsp;&nbsp;&nbsp;&nbsp; name2comment.vbs<br />'* Purpose:&nbsp; Database generation cannot use object names anymore<br />'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in version 7 and above.<br />'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; It always uses the object codes.<br />'<br />'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; In case the object codes are not aligned with your<br />'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object names in your model, this script will copy<br />'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the object Name onto the object comment for<br />'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the Tables and Columns.<br />'<br />'* Title:&nbsp;&nbsp;&nbsp; 把对象name拷入comment属性中<br />'* Version:&nbsp; 1.0<br />'* Author：<br />'* 执行方法：PD11 -- Open PDM -- Tools --&nbsp; Execute Commands -- Run Script<br />'******************************************************************************<br /><br />Option Explicit<br />ValidationMode = True<br />InteractiveMode = im_Batch<br /><br />Dim mdl ' the current model<br /><br />' get the current active model<br />Set mdl = ActiveModel<br />If (mdl Is Nothing) Then<br />&nbsp;&nbsp; MsgBox "There is no current Model"<br />ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then<br />&nbsp;&nbsp; MsgBox "The current model is not an Physical Data model."<br />Else<br />&nbsp;&nbsp; ProcessFolder mdl<br />End If<br /><br />' This routine copy name into code for each table, each column and each view<br />' of the current folder<br />Private sub ProcessFolder(folder)<br />&nbsp;&nbsp; Dim Tab 'running&nbsp; table<br />&nbsp;&nbsp; for each Tab in folder.tables<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not tab.isShortcut then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tab.comment = tab.name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim col ' running column<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for each col in tab.columns<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; col.comment= col.name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; next<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end if<br />&nbsp;&nbsp; next<br /><br />&nbsp;&nbsp; Dim view 'running view<br />&nbsp;&nbsp; for each view in folder.Views<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not view.isShortcut then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; view.comment = view.name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end if<br />&nbsp;&nbsp; next<br /><br />&nbsp;&nbsp; ' go into the sub-packages<br />&nbsp;&nbsp; Dim f ' running folder<br />&nbsp;&nbsp; For Each f In folder.Packages<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not f.IsShortcut then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProcessFolder f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end if<br />&nbsp;&nbsp; Next<br />end sub<br /><br />&nbsp;<br /><br /><strong>PowerDesigner 生成SQL的Existence of refernce错误问题</strong><br />现象：用PowerDesigner生成SQL语句时，提示Existence of refernce错误。<br />原因：该表没有与其他表的关联(如外键等），而PowerDesigner需要存在一个refernce才能生成SQL.<br />解决方法：<br />&nbsp;&nbsp;&nbsp; 在工具栏空白处右键打开Palette面板，选中Link/Extended Dependency 按钮，然后在提示出错的表上添加到自己的Dependency。<br />&nbsp;&nbsp;&nbsp; 重新生成SQL,你将发现刚才提示的错误没有了，问题解决。<br />&nbsp;&nbsp; <br /><strong>利用PowerDesigner批量生成测试数据</strong><br />主要解决方法:<br />A:在PowerDesigner 建表<br />B:然后给每一个表的字段建立相应的摘要文件<br />步骤如下:<br />Model-&gt;Test Data Profiles配置每一个字段摘要文件General:输入Name、Code、<br />选择Class(数字、字符、时间)类型<br />选择Generation Source： Automatic、List、ODBC、File Detail:配置字段相关信息<br />所有字段摘要文件配置完成后双击该表-&gt;选择字段-&gt;Detail-&gt;选择Test Data Parameters 摘要文件如果字段值与其它字段有关系在: Computed Expression 中输入计算列--生成测试数据:<br />DataBase-&gt;Generation Test Data-&gt;<br />选择:Genration 类型(Sript、ODBC)<br />&nbsp;&nbsp;&nbsp;&nbsp; Selection(选择要生成的表)<br />&nbsp;&nbsp;&nbsp;&nbsp; Test Data Genration(Default number of rows 生成记录行数)<br /></div><img src ="http://www.blogjava.net/hwpok/aggbug/368323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2012-01-11 15:32 <a href="http://www.blogjava.net/hwpok/archive/2012/01/11/368323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQLPLUS SPOOL命令使用</title><link>http://www.blogjava.net/hwpok/archive/2012/01/05/367972.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Thu, 05 Jan 2012 15:24:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2012/01/05/367972.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/367972.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2012/01/05/367972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/367972.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/367972.html</trackback:ping><description><![CDATA[<p>SPOOL<span style="font-family: 宋体">是</span>SQLPLUS<span style="font-family: 宋体">的命令,必须在SQLPLUS中使用，主要完成以标准输出方式输出SQLPLUS的命令及执行结果，一般常用户格式化导出ORACLE表数据。<br /></span></p>
<p><span style="font-family: 宋体">对于</span>SPOOL<span style="font-family: 宋体">数据的</span>SQL<span style="font-family: 宋体">，最好要自己定义格式，以方便程序直接导入</span>,SQL<span style="font-family: 宋体">语句如：<br /></span>select taskindex||'|'||commonindex||'|'||tasktype||'|'||to_number(to_char(sysdate,'YYYYMMDD')) from sys_user;<br /><br />spool<span style="font-family: 宋体">常用的设置</span></p>
<p>set colsep' ';<span style="font-family: 宋体">　　　</span> //<span style="font-family: 宋体">域输出分隔符</span></p>
<p>set echo off;<span style="font-family: 宋体">　　　　</span>//<span style="font-family: 宋体">显示</span>start<span style="font-family: 宋体">启动的脚本中的每个</span>sql<span style="font-family: 宋体">命令，缺省为</span>on</p>
<p>set feedback off;<span style="font-family: 宋体">　　</span>//<span style="font-family: 宋体">回显本次</span>sql<span style="font-family: 宋体">命令处理的记录条数，缺省为</span>on</p>
<p>set heading off;<span style="font-family: 宋体">　　</span> //<span style="font-family: 宋体">输出域标题，缺省为</span>on</p>
<p>set pagesize 0;<span style="font-family: 宋体">　　　</span>//<span style="font-family: 宋体">输出每页行数，缺省为</span>24,<span style="font-family: 宋体">为了避免分页，可设定为</span>0<span style="font-family: 宋体">。</span></p>
<p>set termout off;<span style="font-family: 宋体">　　</span> //<span style="font-family: 宋体">显示脚本中的命令的执行结果，缺省为</span>on</p>
<p>set trimout on;<span style="font-family: 宋体">　　　</span>//<span style="font-family: 宋体">去除标准输出每行的拖尾空格，缺省为</span>off</p>
<p>set trimspool on;<span style="font-family: 宋体">　　</span>//<span style="font-family: 宋体">去除重定向（</span>spool<span style="font-family: 宋体">）输出每行的拖尾空格，缺省为</span>off<br /><br /><br /></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /><span style="color: #000000">sqlplus&nbsp;</span><span style="color: #808080">-</span><span style="color: #000000">s&nbsp;username</span><span style="color: #808080">/</span><span style="color: #000000">password</span><span style="color: #008000">@sid</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;trimspool&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;linesize&nbsp;</span><span style="color: #800000; font-weight: bold">120</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;pagesize&nbsp;</span><span style="color: #800000; font-weight: bold">2000</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;newpage&nbsp;</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;heading&nbsp;</span><span style="color: #0000ff">off</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;term&nbsp;</span><span style="color: #0000ff">off</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />spool&nbsp;sys_user.txt;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;col1</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000">,</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">col2</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000">,</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">col3</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000">,</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">col4</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000">..</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;sys_user;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />spool&nbsp;</span><span style="color: #0000ff">off</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">exit</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /></span></div><img src ="http://www.blogjava.net/hwpok/aggbug/367972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2012-01-05 23:24 <a href="http://www.blogjava.net/hwpok/archive/2012/01/05/367972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle执行SQL时遭遇特殊字符&amp;</title><link>http://www.blogjava.net/hwpok/archive/2011/12/31/367677.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Sat, 31 Dec 2011 13:38:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/12/31/367677.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/367677.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/12/31/367677.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/367677.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/367677.html</trackback:ping><description><![CDATA[在sqlplus中执行set define off关闭特殊字符，关闭前可用show define查看有哪些特殊字符；<br /><img src ="http://www.blogjava.net/hwpok/aggbug/367677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-12-31 21:38 <a href="http://www.blogjava.net/hwpok/archive/2011/12/31/367677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle及操作系统对于文件大小的限制</title><link>http://www.blogjava.net/hwpok/archive/2011/12/28/367449.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 28 Dec 2011 12:43:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/12/28/367449.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/367449.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/12/28/367449.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/367449.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/367449.html</trackback:ping><description><![CDATA[<span style="color: #000000">文件系统:<br />&nbsp;&nbsp;&nbsp; FAT12 单文件最大支持8M <br />&nbsp;&nbsp;&nbsp; Fat16单文件最大支持2G <br />&nbsp;&nbsp;&nbsp; Fat32单文件不能大于4G <br />&nbsp;&nbsp;&nbsp; NTFS单文件最大64GB <br />&nbsp;&nbsp;&nbsp; NTFS5.0单文件最大2TB<br /><br />
<div>&nbsp;&nbsp;&nbsp; Ext2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大文件大小: 1TB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大文件极限: 仅受文件系统大小限制<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大分区/文件系统大小: 4TB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大文件名长度: 255 字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缺省最小/最大块大小: 1024/4096 字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缺省inode分配: 每4096字节为1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在强制FS检查前的最大装载: 20(可配置) <br /></div>
<div><font color="#cc3333">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //REDHAT9默认是ext3的文件系统<br /></font>&nbsp;&nbsp;&nbsp; Ext3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大文件大小: 1TB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大文件极限: 仅受文件系统大小限制<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大分区/文件系统大小: 4TB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大文件名长度: 255 字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缺省最小/最大块大小: 1024/4096 字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缺省inode分配: 每4096字节为1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在强制FS检查前的最大装载: 20(可配置)&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ReiserFS<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大文件大小: 1TB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大文件极限: 32k目录,42亿文件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大分区/文件系统大小: 4TB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大文件名长度: 255 字符 <br /><br />&nbsp;&nbsp;&nbsp; JFS <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最小文件系统大小 16 MB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大文件大小: 受体系结构限制<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大文件极限: 受文件系统大小限制<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缺省最小/最大块大小: 1024/4096 字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缺省inode分配: 动态</div><br /><br />oracle 数据库:<br /><span style="color: #000000">&nbsp;&nbsp;&nbsp; Oracle数据文件的大小存在一个内部限制，这个限制是：<br />&nbsp;&nbsp;&nbsp; 每个数据文件最多只能包含2^22-1个数据块.<br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp; 这个限制也就直接导致了每个数据文件的最大允许大小。<br />&nbsp;&nbsp;&nbsp; 在2K Block_size下，数据文件最大只能达到约8G<br />&nbsp;&nbsp;&nbsp; 在32K的Block_size下，数据文件最大只能达到约16*8G的大小。</span>
<p><span style="color: #000000">&nbsp;&nbsp;&nbsp; 这个限制是由于Oracle的<span style="color: #0000ff">Rowid</span>中使用<strong>22</strong>位来代表Block号，这22位最多只能代表2^22-1个数据块<br /><br /><span style="color: #000000">&nbsp;&nbsp;&nbsp; 为了扩展数据文件的大小，Oracle10g中引入了大文表空间，在大文件表空间下，Oracle使用32位来代表Block号，也就是说，在新的技术下，大文件表空间下每个文件最多可以容纳4G个Block。<br />&nbsp;&nbsp;&nbsp; 那么也就是说当Block_size为2k时，数据文件可以达到8T 。<br />&nbsp;&nbsp;&nbsp; 当block_size为32K时，数据文件可以达到128T。</span></span></p></span> <img src ="http://www.blogjava.net/hwpok/aggbug/367449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-12-28 20:43 <a href="http://www.blogjava.net/hwpok/archive/2011/12/28/367449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 表空间设置的问题(转)</title><link>http://www.blogjava.net/hwpok/archive/2011/12/28/367440.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 28 Dec 2011 09:43:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/12/28/367440.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/367440.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/12/28/367440.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/367440.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/367440.html</trackback:ping><description><![CDATA[<p>以下的文章主要是对Oracle表空间的设置问题的描述，我们大家都知道Oracle数据库中的表很多，一共算是600多个表，大概你能占十几个G空间。下面的文章主要讲述的是Oracle表空间设置：</p>
<p>　　是设置在USERS表空间内建立一个十几G的数据文件USERS01.DBF呢？</p>
<p>　　还是在USERS表空间内建立三个几G的数据文件USERS01.DBF,USERS02.DBF,USERS03.DBF，</p>
<p>　　Oracle表空间内的数据文件以多大上限最好？是越大的单个文件好呢？还是小一点的多个文件好？以什么为原则？</p>
<p>　　Oracle数据库产生许多碎片怎么办？存储数据文件的这个盘符，可以定期做&#8220;磁盘碎片整理&#8221;吗？该怎么做？要不要先把数据库关掉再做？</p>
<p>　　两个数据库同时运行在一个服务器上面，为两套业务系统服务，</p>
<p>　　两个数据库共用一个对外端口1521合理吗？会不会影响数据吞吐性能？要不要一个用1521端口，一个用1520端口，开两个监听程序这样设置？</p>
<p>　　1。分成多个数据文件。</p>
<p>　　原因是：</p>
<p>　　（1）有些操作系统对文件大小有限制，或者安装是做过限制。你不一定清楚这些限制。而且某些版本的传输协议不支持过大的文件，例如AIX某版本的sftp就不允许传输文件超过2G。</p>
<p>　　（2）你现在数据量小，所以不用考虑太多。但将来数据量增大以后，要考虑负载均衡，就要把部分数据文件挪到其他盘上。多个数据文件会使这样很容易。</p>
<p>　　（3）当你的数据文件某部分出现坏块之后，你需要让某个数据文件暂时offline恢复等等，如果你的数据文件过大，影响也可能更大。</p>
<p>　　（4）使用RMAN备份的时候，单独备份数据文件。恢复也可单独恢复，因此很显然分多个数据文件有好处。</p>
<p>　　2。单个数据文件的大小，这个要考虑的东西比较多。比如你的存储性能，比如你的总数据量，等等。专家的建议是，对于几十G到几百G的数据量，单个数据文件的大小一般在2－10G。原则有一套理论说明的，但是我忘了，只说一下个人的建议：</p>
<p>　　（1）操作系统限制。这个如果没有注意到很容易出问题，特别是自扩展的数据文件，例如system，undotbs等等</p>
<p>　　（2）Oracle表空间的大小。要考虑单个数据文件移动或恢复的情况。显然如果对于几十个G的表空间，就分成两个数据文件，并不能对你的操作带来什么好处。</p>
<p>　　（3）全凭经验把握的东西，还要考虑的你硬盘的raid情况等等。情况比较复杂，只能折衷。不能简单的一概而论说大就好或者小就好。</p>
<p>　　当然这并不是主要的，你没必要太关注这方面的东西。因为对于你这样的简单环境来说，区区一个表空间数据文件大小的修改，对性能的提高甚至不如多建一条索引大！</p>
<p>　　3。数据库产生碎片怎么办。我告诉你，数据库的碎片和windows说的那个碎片整理是两码事，你不要混淆。windows再怎么整理也是没用的。</p>
<p>　　其实我坦白的跟你讲，你几十个G的数据库，短期根本就不用考虑什么碎片问题。这种情况得等大家都反映数据库开始变慢了，再考虑回收段空间等等。而且你都说&#8220;是否要关闭了再做&#8221;，说明你的数据库可以关，也就暗示了它&#8220;不是很忙&#8221;，那么最近3－5年之内你不用考虑做这件事了。</p>
<p>　　4。两个数据库同时用一个监听器1521当然不合理，你一个监听器挂了两个数据库都连不上去，你不觉得这样风险很大么？</p>
<p>　两个公用一个端口，对数据的吞吐性能是没有任何影响的，这个你不用担心。但是安全性无疑很低。</p>
<p>　　所以当然有必要用两个端口1521和1520，其实我建议你把两个数据库安装在两个不同的操作系统用户下面，这样大家彼此逻辑都清楚，影响小，带来的好处你能慢慢体会到。这纯粹是从我的工作经验来建议你的。如果你嫌麻烦当我没说。</p>
<p>　　如何设置？你这个问题问的复杂了，我可懒得把编辑TNS的一堆写出来。</p>
<p>　　告诉你个简单方法，先命令行输入netca创建监听器，建两个，1521和1520。然后再命令行dbca创建数据库，注意创建的过程中会提示你和哪个端口绑定，自己选就行了。全图形界面非常简单。</p><img src ="http://www.blogjava.net/hwpok/aggbug/367440.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-12-28 17:43 <a href="http://www.blogjava.net/hwpok/archive/2011/12/28/367440.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 表空间设计原则(转)</title><link>http://www.blogjava.net/hwpok/archive/2011/12/28/367399.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 28 Dec 2011 03:42:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/12/28/367399.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/367399.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/12/28/367399.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/367399.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/367399.html</trackback:ping><description><![CDATA[<p>常用原则：<br />1、一般较大的表或索引单独分配一个tablespace。<br />2、Read only对象或Read mostly对象分成一组，存在对应的tablespace中。<br />3、若tablespace中的对象皆是read only对象，可将tablespace设置成read only模式，在备份时，read only tablespace只需备份一次。<br />4、高频率insert的对象分成一组，存在对应的tablespace中。<br />5、增、删、改的对象分成一组，存在对应的tablespace中。<br />6、表和索引分别存于不同的tablespace。<br />7、存于同一个 tablespace中的表（或索引）的extent 大小最好成倍数关系，有利于空间的重利用和减少碎片。</p>
<p>&nbsp;<br />根据以上原则，数据库表空间设计原则如下：</p>
<p>原则上每个schema对应一个表空间和一个相应索引表空间；每个schema下的大表对应一个单独的表空间和索引表空间；对于需要分区的特大表，则每个子分区对应一个单独的表</p>
<p>空间和索引空间。</p>
<p><br />&nbsp;&nbsp;&nbsp; 典型应用一：控制用户所占用的表空间配额。<br />　　在一些大型的数据库应用中，我们需要控制某个用户或者某一组用户其所占用的磁盘空间。这就好像在文件服务器中，需要为每个用户设置磁盘配额一样，以防止硬盘空间</p>
<p>耗竭。所以，在数据库中，我们也需要限制用户所可以使用的磁盘空间大小。为了达到这个目的，我们就可以通过表空间来实现。<br />　　我们可以在Oracle数据库中，建立不同的表空间，为其设置最大的存储容量，然后把用户归属于这个表空间。如此的话，这个用户的存储容量，就受到这个表空间大小的限</p>
<p>制。</p>
<p>　　典型应用二：控制数据库所占用的磁盘空间。<br />　　有时候，在Oracle数据库服务器中，可能运行的不止一个服务。除了数据库服务器外，可能还有邮件服务器等应用系统服务器。为此，就需要先对Oracle数据库的磁盘空间</p>
<p>作个规划，否则，当多个应用程序服务所占用的磁盘空间都无限增加时，最后可能导致各个服务都因为硬盘空间的耗竭而停止。所以，在同一台服务器上使用多个应用程序服务</p>
<p>，我们往往需要先给他们进行磁盘空间的规划和分配。各个服务都不能够超过我们分配给他的最大限额，或者超过后及时的提醒我们。只有这样，才能够避免因为磁盘空间的耗</p>
<p>竭而导致各种应用服务的崩溃。</p>
<p>　　典型应用三：灵活放置表空间，提高数据库的输入输出性能。<br />　　数据库管理员还可以将不同类型的数据放置到不同的表空间中，这样可以明显提高数据库输入输出性能，有利于数据的备份与恢复等管理工作。因为我们数据库管理员在备</p>
<p>份或者恢复数据的时候，可以按表空间来备份数据。如在设计一个大型的分销系统后台数据库的时候，我们可以按省份建立表空间。与浙江省相关的数据文件放置在浙江省的表</p>
<p>空间中，北京发生业务记录，则记录在北京这个表空间中。如此，当浙江省的业务数据出现错误的时候，则直接还原浙江省的表空间即可。很明显，这样设计，当某个表空间中</p>
<p>的数据出现错误需要恢复的时候，可以避免对其他表空间的影响。<br />　　另外，还可以对表空间进行独立备份。当数据库容量比较大的时候，若一下子对整个数据库进行备份，显然会占用比较多的时间。虽然说Oracle数据库支持热备份，但是在</p>
<p>备份期间，会占用比较多的系统资源，从而造成数据库性能的下降。为此，当数据库容量比较大的时候，我们就需要进行设置多个表空间，然后规划各个表空间的备份时间，从</p>
<p>而可以提高整个数据库的备份效率，降低备份对于数据库正常运行的影响。</p>
<p>　　典型应用四：大表的排序操作。<br />　　我们都知道，当表中的记录比较多的时候，对他们进行查询，速度会比较慢。第一次查询成功后，若再对其进行第二次重新排序，仍然需要这么多的时间。为此，我们在数</p>
<p>据库设计的时候，针对这种容量比较大的表对象，往往把它放在一个独立的表空间，以提高数据库的性能。</p>
<p>　　典型应用五：日志文件与数据文件分开放，提高数据库安全性。<br />　　默认情况下，日志文件与数据文件存放在同一表空间。但是，这对于数据库安全方面来说，不是很好。所以，我们在数据库设计的过程中，往往喜欢把日志文件，特别是重</p>
<p>做日志文件，放在一个独立的表空间中，然后把它存放在另外一块硬盘上。如此的话，当存放数据文件的硬盘出现故障时，能够马上通过存放在另一个表空间的重做日志文件，</p>
<p>对数据库进行修复，以减少企业因为数据丢失所带来的损失。</p>
<p>　　当然，表空间的优势还不仅仅这些，企业对于数据库的性能要求越高，或者数据库容量越大，则表空间的优势就会越大。<br />　　在数据库设计的时候，我们建议数据库管理员按如下顺序设置表空间。</p>
<p>&nbsp;&nbsp;&nbsp; 第一步：建立表空间。<br />　　在设计数据库的时候，首先需要设计表空间。我们需要考虑，是只建立一个表空间呢，还是需要建立多个表空间，以及各个表空间的存放位置、磁盘限额等等。<br />　　到底设计多少个表空间合理，没有统一的说法，这主要根据企业的实际需求去判断。如企业需要对用户进行磁盘限额控制的，则就需要根据用户的数量来设置表空间。当企</p>
<p>业的数据容量比较大，而其又对数据库的性能有比较高的要求时，就需要根据不同类型的数据，设置不同的表空间，以提高其输入输出性能。<br />　　<br />&nbsp;&nbsp;&nbsp; 第二步：建立用户，并制定用户的默认表空间。<br />　　在建立用户的时候，我们建议数据库管理员要指定用户的默认表空间。因为我们在利用CREATE语句创建数据库对象，如数据库表的时候，其默认是存储在数据库的当前默认</p>
<p>空间。若不指定用户默认表空间的话，则用户每次创建数据库对象的时候，都要指定表空间，显然，这并不是很合理。</p>
<p>　　另外要注意，不同的表空间有不同的权限控制。用户对于表空间A具有完全控制权限，可能对于表空间B就只有查询权限，甚至连连接的权限的都没有。所以，合理为用户配</p>
<p>置表空间的访问权限，也是提高数据库安全性的一个方法。</p><img src ="http://www.blogjava.net/hwpok/aggbug/367399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-12-28 11:42 <a href="http://www.blogjava.net/hwpok/archive/2011/12/28/367399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spfile和pfile(转)</title><link>http://www.blogjava.net/hwpok/archive/2011/12/12/366164.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Mon, 12 Dec 2011 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/12/12/366164.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/366164.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/12/12/366164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/366164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/366164.html</trackback:ping><description><![CDATA[spfile和pfile都是数据库的参数文件，pfile是到8i为止的主要参数文件，从9i开始，Oracle采用了一个spfile文件，这种文件不像pfile，它是一个不能用文本编辑器编辑的二进制文件，而pfile则可以直接用notepad编辑。这样做的好处当然是提高了安全性。 
<p><br />&nbsp;&nbsp;&nbsp; 数据库在启动时,调用参数文件的顺序为:<br />1）spfile</p>
<p>2）pfile<br />&nbsp;&nbsp;&nbsp; <span style="color: #000000">一般配置中不指定用PFILE文件启动的话默认都是以SPFILE文件启动，可以通过下面的指令来查看是以pfile还是spfile启动，如果isspecified里有true，表明用spfile进行了指定配置，</span><span style="color: #000000">如果全为false，则表明用pfile启动。</span></p>
<p><span style="color: #0000ff">select isspecified,count(*) from v$spparameter group by isspecified;</span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 上述2个文件所在目录可以通过show parameter pfile|spfile 查看，不过用pfile和spfile查出来的都是同一个参数，因为一次只能用一个参数文件。</p>
<p>SQL&gt; <span style="color: #0000ff">show parameters spfile<br /></span>NAME&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;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE<br />------------------------------------ ----------- ------------------------------<br />spfile&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;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E:/ORACLE/PRODUCT/10.2.0/DB_1/DBS/SPFILESQDSS.ORA</p>
<p>&nbsp;</p>
<p>SQL&gt; <span style="color: #0000ff">show parameters pfile<br /></span>NAME&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;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE<br />------------------------------------ ----------- ------------------------------<br />spfile&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;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E:/ORACLE/PRODUCT/10.2.0/DB_1/DBS/SPFILESQDSS.ORA</p>
<p>&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 由于SPFILE是二进制，无法直接修改，可以通过以下步骤来实现：</p>
<p>1）备份好原始的SPFILE和PFILE文件；</p>
<p>2）利用SPFILE生成PFILE：</p>
<p>&nbsp;&nbsp; SQL&gt; <span style="color: #0000ff">create pfile from spfile;</span></p>
<p>3）修改PFILE文件，所要修改的参数名称如果记不住可以使用show parameters来查看；</p>
<p>4）指定PFILE启动数据库，查看修改的参数是否启用</p>
<p>&nbsp;&nbsp; SQL&gt;<span style="color: #0000ff">shutdown immediate;</span></p>
<p>&nbsp;&nbsp; SQL&gt;<span style="color: #0000ff">startup pfile='f:/此处为放置PFILE的目录/initSID.ora';</span></p>
<p>&nbsp;&nbsp; 此处如果PFILE在默认目录则不用加路径，直接文件名即可。</p>
<p>5）数据库启动后用show parameters查看修改的参数是否生效，如果生效继续下一步，否则检查重复前面步骤；</p>
<p>6）用PFILE生成SPFILE，指令为：</p>
<p>&nbsp;&nbsp; SQL&gt;<span style="color: #0000ff">create spfile from pfile'f:/此处为放置PFILE的目录/initSID.ora';</span>&nbsp;</p>
<p>7）停止数据库，用SPFILE启动：</p>
<p>&nbsp;&nbsp; SQL&gt;<span style="color: #0000ff">startup;</span></p>
<p>8）数据库启动后用show parameters查看修改的参数是否生效，如果已经是修改过的值则大功告成，中途每次使用create命令前后注意观察所创建文件的修改时间。</p><img src ="http://www.blogjava.net/hwpok/aggbug/366164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-12-12 17:15 <a href="http://www.blogjava.net/hwpok/archive/2011/12/12/366164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 使用编译警告</title><link>http://www.blogjava.net/hwpok/archive/2011/09/20/359050.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Tue, 20 Sep 2011 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/09/20/359050.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/359050.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/09/20/359050.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/359050.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/359050.html</trackback:ping><description><![CDATA[ALTER SESSION SET plsql_warnings='ENABLE:ALL';<img src ="http://www.blogjava.net/hwpok/aggbug/359050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-09-20 10:23 <a href="http://www.blogjava.net/hwpok/archive/2011/09/20/359050.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 存储中的块</title><link>http://www.blogjava.net/hwpok/archive/2011/09/19/358999.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Mon, 19 Sep 2011 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/09/19/358999.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/358999.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/09/19/358999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/358999.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/358999.html</trackback:ping><description><![CDATA[CREATE OR REPLACE PROCEDURE pro_PPT<br />IS<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E1 EXCEPTION;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PRAGMA EXCEPTION_INIT(E1, -2200);<br />BEGIN<br />&nbsp; <br />&nbsp; -- 块1开始------------------------------------------------------<br />&nbsp; DECLARE<br />&nbsp;&nbsp;&nbsp; n NUMBER := 1;<br />&nbsp; BEGIN<br />&nbsp;&nbsp;&nbsp; DBMS_OUTPUT.put_line('第1块'||n);<br />&nbsp; EXCEPTION <br />&nbsp;&nbsp;&nbsp; WHEN OTHERS THEN<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBMS_OUTPUT.put_line('第1块异常-------');<br />&nbsp; END;<br />&nbsp; -- 块1结束------------------------------------------------------<br />&nbsp; <br />&nbsp; -- 块2开始------------------------------------------------------<br />&nbsp; DECLARE<br />&nbsp;&nbsp;&nbsp; m NUMBER := 2;<br />&nbsp; BEGIN<br />&nbsp;&nbsp;&nbsp; DBMS_OUTPUT.put_line('第2块'||m);<br />&nbsp; EXCEPTION <br />&nbsp;&nbsp;&nbsp; WHEN OTHERS THEN<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBMS_OUTPUT.put_line('第2块异常-------');<br />&nbsp; END;<br />&nbsp; -- 块2结束------------------------------------------------------<br />EXCEPTION<br />&nbsp; WHEN OTHERS THEN<br />&nbsp;&nbsp;&nbsp; DBMS_OUTPUT.put_line('收到全局-------');<br />END;<img src ="http://www.blogjava.net/hwpok/aggbug/358999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-09-19 16:28 <a href="http://www.blogjava.net/hwpok/archive/2011/09/19/358999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)insert into select 中使用序号</title><link>http://www.blogjava.net/hwpok/archive/2011/09/14/358653.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 14 Sep 2011 13:18:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/09/14/358653.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/358653.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/09/14/358653.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/358653.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/358653.html</trackback:ping><description><![CDATA[<div class="showContent">
<p>今天遇到一个问题：</p>
<p>在insert into select后面用序列时报错</p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;R_POL_VIPO(id,SUMVIPONUM,STATSTICSDATE)<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;R_POL_VIPO_seq.Nextval,VIPONUM,sysdate<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;R_POL_VIPO<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">YEAR</span><span style="color: #808080">=</span><span style="color: #000000">substr(v_date,</span><span style="color: #800000; font-weight: bold">0</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">4</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">MONTH</span><span style="color: #808080">=</span><span style="color: #000000">substr(v_date,</span><span style="color: #800000; font-weight: bold">5</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div>
<p>ORA-02287:此处序号不许使用</p>
<p>将其改成如下形式编译就通过了：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;R_POL_VIPO(id,SUMVIPONUM,STATSTICSDATE)<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;R_POL_VIPO_seq.Nextval,b.</span><span style="color: #808080">*</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;VIPONUM,sysdate<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;R_POL_VIPO<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">YEAR</span><span style="color: #808080">=</span><span style="color: #000000">substr(v_date,</span><span style="color: #800000; font-weight: bold">0</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">4</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">MONTH</span><span style="color: #808080">=</span><span style="color: #000000">substr(v_date,</span><span style="color: #800000; font-weight: bold">5</span><span style="color: #000000">))&nbsp;b;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">INSERT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">INTO</span><span style="color: #000000">&nbsp;EX_EDM_DAILY_SENDED&nbsp;(ID&nbsp;,DETAIL_ID,TASK_ID,</span><span style="color: #ff00ff">USER_ID</span><span style="color: #000000">,PROJECT_ID,&nbsp;DATA_TYPE,EMAIL&nbsp;,CONTENT3,CONTENT2&nbsp;,CONTENT1&nbsp;,REAL_STATUS,SHAM_STATUS,OPEN_TIME,OPEN_COUNT,OPEN_IP&nbsp;&nbsp;,OPEN_CITY,CLICK_TIME,CLICK_COUNT&nbsp;,CLICK_IP&nbsp;,CLICK_CITY&nbsp;,REGISTE_TIME,SEND_TIME,SEND_IP,SEND_NAME,RESEND_COUNT,CATEGORY&nbsp;,LOCAL_CODE&nbsp;,LOCAL_MSG,ESP_CODE&nbsp;&nbsp;,ESP_MSG&nbsp;,DELETE_FLAG,CREATE_TIME,REMARK)&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;EX_EDM_SEQ_DAILY_SENDED.NEXTVAL,ID,TASK_ID,</span><span style="color: #ff00ff">USER_ID</span><span style="color: #000000">,PROJECT_ID,DATA_TYPE,EMAIL&nbsp;,CONTENT3,CONTENT2&nbsp;,CONTENT1&nbsp;,REAL_STATUS,SHAM_STATUS,OPEN_TIME,OPEN_COUNT,OPEN_IP&nbsp;&nbsp;,OPEN_CITY,CLICK_TIME,CLICK_COUNT&nbsp;,CLICK_IP&nbsp;,CLICK_CITY&nbsp;,REGISTE_TIME,SEND_TIME,SEND_IP,SEND_NAME,RESEND_COUNT,CATEGORY&nbsp;,LOCAL_CODE&nbsp;,LOCAL_MSG,ESP_CODE,ESP_MSG&nbsp;,DELETE_FLAG,CREATE_TIME,REMARK&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;</span></div>
<p>上以这句在java jdbc里执行是没有问题的.<br />本文出自 &#8220;<a href="http://407882.blog.51cto.com/">水滴</a>&#8221; 博客，请务必保留此出处<a href="http://407882.blog.51cto.com/397882/594736">http://407882.blog.51cto.com/397882/594736</a></p></div><img src ="http://www.blogjava.net/hwpok/aggbug/358653.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-09-14 21:18 <a href="http://www.blogjava.net/hwpok/archive/2011/09/14/358653.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(原创)DBMS_SCHEDULER  带参数JOB</title><link>http://www.blogjava.net/hwpok/archive/2011/09/14/358602.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 14 Sep 2011 05:35:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/09/14/358602.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/358602.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/09/14/358602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/358602.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/358602.html</trackback:ping><description><![CDATA[<div>1.创建测试表
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;t_test<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />(<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ID&nbsp;DATE&nbsp;</span><span style="color: #0000ff">PRIMARY</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">KEY</span><span style="color: #000000">,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;VALUE&nbsp;</span><span style="color: #000000; font-weight: bold">NUMBER</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />);</span></div><br />2.创建存储过程<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">or</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">replace</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">procedure</span><span style="color: #000000">&nbsp;pro_test(v&nbsp;</span><span style="color: #808080">IN</span><span style="color: #000000">&nbsp;</span><span style="color: #000000; font-weight: bold">NUMBER</span><span style="color: #000000">)&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">is</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">begin</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;t_test(id,VALUE)&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">&nbsp;(sysdate,v);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #808080">/</span></div><br /><br /><br />3.创建JOB<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">BEGIN</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;DBMS_SCHEDULER.CREATE_JOB(<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JOB_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">HUYVANPULL_TEST_JOB1</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JOB_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">STORED_PROCEDURE</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JOB_ACTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">PRO_TEST</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NUMBER_OF_ARGUMENTS&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REPEAT_INTERVAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">FREQ=MINUTELY;INTERVAL=1</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENABLED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;FALSE,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;START_DATE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;SYSDATE,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COMMENTS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">HUYVANPULL-Test</span><span style="color: #ff0000">'</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">END</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #808080">/</span></div>如果没有创建权限,赋权限<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">Grant</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Create</span><span style="color: #000000">&nbsp;Job&nbsp;</span><span style="color: #0000ff">To</span><span style="color: #000000">&nbsp;em_test;</span></div><br />4.设置存储JOB的存储过程的参数<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">BEGIN</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JOB_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">HUYVANPULL_TEST_JOB1</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARGUMENT_POSITION&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARGUMENT_VALUE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">0</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">END</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #808080">/</span></div><br />5.启动JOB<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">BEGIN</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBMS_SCHEDULER.enable(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">HUYVANPULL_TEST_JOB1</span><span style="color: #ff0000">'</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">END</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #808080">/</span></div></div><br /><br />6.查询JOB<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;USER_SCHEDULER_JOBS;</span></div><br />7.停用JOB<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">BEGIN</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBMS_SCHEDULER.disable(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">HUYVANPULL_TEST_JOB1</span><span style="color: #ff0000">'</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">END</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #808080">/</span></div><br />8.删除JOB<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">BEGIN</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBMS_SCHEDULER.drop_job(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">HUYVANPULL_TEST_JOB1</span><span style="color: #ff0000">'</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">END</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #808080">/</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><img src ="http://www.blogjava.net/hwpok/aggbug/358602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-09-14 13:35 <a href="http://www.blogjava.net/hwpok/archive/2011/09/14/358602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)DBMS_SCHEDULER</title><link>http://www.blogjava.net/hwpok/archive/2011/09/14/358598.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 14 Sep 2011 05:16:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/09/14/358598.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/358598.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/09/14/358598.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/358598.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/358598.html</trackback:ping><description><![CDATA[<div id="message9013887" class="t_msgfont">示例2:创建一个任务（STORED_PROCEDURE）<br />在这个demo中，我使用了带参数的procedure，一种情况是使用默认值，另外一种情况是使用新设置的值。下面看具体的示例过程。<br /><br />第一步：创建一个日志表和相应的procedure<br /><br />SQL&gt; create table sch_demo_log <br />&nbsp;&nbsp;2&nbsp;&nbsp;(&nbsp;&nbsp;arg_1 number,<br />&nbsp;&nbsp;3&nbsp; &nbsp;&nbsp;&nbsp;arg_2 varchar2(32),<br />&nbsp;&nbsp;4&nbsp; &nbsp;&nbsp;&nbsp;deal_date date<br />&nbsp;&nbsp;5&nbsp;&nbsp;);<br /><br />表已创建。<br /><br />SQL&gt; create or replace procedure proc_sch(arg_1 in number ,<br />&nbsp;&nbsp;2&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;arg_2 in varchar2)<br />&nbsp;&nbsp;3&nbsp;&nbsp;is <br />&nbsp;&nbsp;4&nbsp;&nbsp;begin<br />&nbsp;&nbsp;5&nbsp; &nbsp;&nbsp;&nbsp;insert into sch_demo_log values(arg_1,arg_2,sysdate);<br />&nbsp;&nbsp;6&nbsp; &nbsp;&nbsp;&nbsp;commit;<br />&nbsp;&nbsp;7&nbsp;&nbsp;end;<br />&nbsp;&nbsp;8&nbsp;&nbsp;/ <br /><br />过程已创建。<br />第二步：创建一个调度程序并设置对应procedure中参数的default value<br /><br /><br />SQL&gt; begin<br />&nbsp;&nbsp;2&nbsp; &nbsp;&nbsp;&nbsp;DBMS_SCHEDULER.CREATE_PROGRAM(<br />&nbsp;&nbsp;3&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;program_name&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;=&gt; 'TEST_PROG',<br />&nbsp;&nbsp;4&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;program_action&nbsp; &nbsp;&nbsp; &nbsp;=&gt; 'PROC_SCH',<br />&nbsp;&nbsp;5&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;program_type&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;=&gt; 'STORED_PROCEDURE',<br />&nbsp;&nbsp;6&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;number_of_arguments =&gt; 2,<br />&nbsp;&nbsp;7&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;comments&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;=&gt; 'sch test by STORED_PROCEDURE with argument',<br />&nbsp;&nbsp;8&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;enabled&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; =&gt; false);<br />&nbsp;&nbsp;9&nbsp;&nbsp;end;<br />10&nbsp;&nbsp;/<br /><br />PL/SQL 过程已成功完成。<br /><br />SQL&gt; <br />SQL&gt; begin<br />&nbsp;&nbsp;2&nbsp; &nbsp; DBMS_SCHEDULER.define_program_argument(<br />&nbsp;&nbsp;3&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; program_name&nbsp; &nbsp;&nbsp; &nbsp;=&gt; 'TEST_PROG',<br />&nbsp;&nbsp;4&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_position =&gt; 1,<br />&nbsp;&nbsp;5&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_type&nbsp; &nbsp;&nbsp;&nbsp;=&gt; 'number',<br />&nbsp;&nbsp;6&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; default_value&nbsp; &nbsp;&nbsp;&nbsp;=&gt; 100);<br />&nbsp;&nbsp;7&nbsp; &nbsp; <br />&nbsp;&nbsp;8&nbsp; &nbsp; DBMS_SCHEDULER.define_program_argument(<br />&nbsp;&nbsp;9&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; program_name&nbsp; &nbsp;&nbsp; &nbsp;=&gt; 'TEST_PROG',<br />10&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_position =&gt; 2,<br />11&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_type&nbsp; &nbsp;&nbsp;&nbsp;=&gt; 'VARCHAR2',<br />12&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; default_value&nbsp; &nbsp;&nbsp;&nbsp;=&gt; 'Thomaszhang Test');<br />13&nbsp;&nbsp;END;<br />14&nbsp;&nbsp;/<br /><br />PL/SQL 过程已成功完成。<br /><br />　<br /><br />第三步：创建一个调度表（计划）<br /><br />在本demo中，每2分钟运行一次<br /><br />SQL&gt; begin<br />&nbsp;&nbsp;2&nbsp; &nbsp; DBMS_SCHEDULER.create_schedule( <br />&nbsp;&nbsp;3&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; repeat_interval =&gt; 'FREQ=MINUTELY;INTERVAL=2',<br />&nbsp;&nbsp;4&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; start_date&nbsp; &nbsp;&nbsp; &nbsp;=&gt; sysdate,<br />&nbsp;&nbsp;5&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; comments&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;=&gt; 'test',<br />&nbsp;&nbsp;6&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; schedule_name&nbsp; &nbsp;=&gt; 'TEST_SCH');<br />&nbsp;&nbsp;7&nbsp;&nbsp;end;<br />&nbsp;&nbsp;8&nbsp;&nbsp;/<br /><br />PL/SQL 过程已成功完成。<br />第四步：创建一个job<br /><br />SQL&gt; begin<br />&nbsp;&nbsp;2&nbsp; &nbsp; DBMS_SCHEDULER.create_job( <br />&nbsp;&nbsp;3&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; job_name&nbsp; &nbsp;&nbsp; &nbsp;=&gt; 'TEST_JOB',&nbsp; &nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;4&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; program_name&nbsp;&nbsp;=&gt; 'TEST_PROG',<br />&nbsp;&nbsp;5&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; schedule_name =&gt; 'TEST_SCH',<br />&nbsp;&nbsp;6&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; job_class&nbsp; &nbsp;&nbsp;&nbsp;=&gt; 'DEFAULT_JOB_CLASS',&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;7&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; comments&nbsp; &nbsp;&nbsp; &nbsp;=&gt; 'arg test',<br />&nbsp;&nbsp;8&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; auto_drop&nbsp; &nbsp;&nbsp;&nbsp;=&gt; false,<br />&nbsp;&nbsp;9&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; enabled&nbsp; &nbsp;&nbsp; &nbsp; =&gt; false);<br />10&nbsp;&nbsp;end;<br />11&nbsp;&nbsp;/<br /><br />PL/SQL 过程已成功完成。<br /><br />SQL&gt; exec DBMS_SCHEDULER.enable('TEST_PROG');<br />PL/SQL 过程已成功完成。<br /><br />SQL&gt; exec DBMS_SCHEDULER.enable('TEST_JOB');<br />PL/SQL 过程已成功完成。<br />第五步：检查运行情况，查看一下日志表记录情况<br />SQL&gt; select * from sch_demo_log;<br /><br />未选定行<br /><br />　<br /><br />--还没有到调度时间，稍等一下。。。<br /><br /><br />SQL&gt; select * from sch_demo_log;<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;ARG_1 ARG_2&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;DEAL_DATE<br />---------- ------------------------ -------------------<br />&nbsp; &nbsp;&nbsp; &nbsp; 100 Thomaszhang Test&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;2007-11-12 14:35:59<br /><br />可以看到，这个时候，sch_demo_log记录的前2个字段，使用了我们前面define的缺省值.下面我set一个新的job参数看看<br /><br />　<br /><br />第六步：设置不同的job参数<br /><br /><br />SQL&gt; begin<br />&nbsp;&nbsp;2&nbsp; &nbsp; DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(<br />&nbsp;&nbsp;3&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; job_name&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; =&gt; 'TEST_JOB',<br />&nbsp;&nbsp;4&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_position =&gt; 1,<br />&nbsp;&nbsp;5&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_value&nbsp; &nbsp; =&gt; 200);<br />&nbsp;&nbsp;6&nbsp; &nbsp; <br />&nbsp;&nbsp;7&nbsp; &nbsp; DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(<br />&nbsp;&nbsp;8&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; job_name&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; =&gt; 'TEST_JOB',<br />&nbsp;&nbsp;9&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_position =&gt; 2,<br />10&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_value&nbsp; &nbsp; =&gt; 'set new value first');<br />11&nbsp;&nbsp;end;<br />12&nbsp;&nbsp;/<br /><br />PL/SQL 过程已成功完成。<br /><br />SQL&gt; select * from sch_demo_log;<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;ARG_1 ARG_2&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;DEAL_DATE<br />---------- ------------------------ -------------------<br />&nbsp; &nbsp;&nbsp; &nbsp; 100 Thomaszhang Test&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;2007-11-12 14:35:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 200 set new value first&nbsp; &nbsp;&nbsp; &nbsp;2007-11-12 14:37:59可以看到，这个时候，记录的日志变成了新的参数。这个demo 说明，根据我们的需要，可以设置不同的运行期参数。SQL&gt; begin<br />&nbsp;&nbsp;2&nbsp; &nbsp; DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(<br />&nbsp;&nbsp;3&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; job_name&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; =&gt; 'TEST_JOB',<br />&nbsp;&nbsp;4&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_position =&gt; 1,<br />&nbsp;&nbsp;5&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_value&nbsp; &nbsp; =&gt; 300);<br />&nbsp;&nbsp;6&nbsp; &nbsp; <br />&nbsp;&nbsp;7&nbsp; &nbsp; DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(<br />&nbsp;&nbsp;8&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; job_name&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; =&gt; 'TEST_JOB',<br />&nbsp;&nbsp;9&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_position =&gt; 2,<br />10&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_value&nbsp; &nbsp; =&gt; 'set new value second');<br />11&nbsp;&nbsp;end;<br />12&nbsp;&nbsp;/<br /><br />PL/SQL 过程已成功完成。再换一个看看：<br /><br />SQL&gt; select * from sch_demo_log;<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;ARG_1 ARG_2&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; DEAL_DATE<br />---------- ----------------------- -------------------<br />&nbsp; &nbsp;&nbsp; &nbsp; 100 Thomaszhang Test&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;2007-11-12 14:35:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 200 set new value first&nbsp; &nbsp;&nbsp;&nbsp;2007-11-12 14:37:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 300 set new value second&nbsp; &nbsp; 2007-11-12 14:39:59<br />清除通过set_job_argument_value设置的参数：SQL&gt; begin<br />&nbsp;&nbsp;2&nbsp; &nbsp; DBMS_SCHEDULER.reset_job_argument_value('TEST_JOB',1);<br />&nbsp;&nbsp;3&nbsp; &nbsp; DBMS_SCHEDULER.reset_job_argument_value('TEST_JOB',2);<br />&nbsp;&nbsp;4&nbsp;&nbsp;end;<br />&nbsp;&nbsp;5&nbsp;&nbsp;/<br /><br />PL/SQL 过程已成功完成。<br /><br />SQL&gt; select * from sch_demo_log;<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;ARG_1 ARG_2&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;DEAL_DATE<br />---------- ------------------------ -------------------<br />&nbsp; &nbsp;&nbsp; &nbsp; 100 Thomaszhang Test&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;2007-11-12 14:35:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 200 set new value first&nbsp; &nbsp;&nbsp; &nbsp;2007-11-12 14:37:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 300 set new value second&nbsp; &nbsp;&nbsp;&nbsp;2007-11-12 14:39:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 100 Thomaszhang Test&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;2007-11-12 14:41:59可以看到又恢复到了我们前面定义的默认值。这个值，可以通过dba_scheduler_program_args视图看到。SQL&gt; begin<br />&nbsp;&nbsp;2&nbsp; &nbsp; DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(<br />&nbsp;&nbsp;3&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; job_name&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; =&gt; 'TEST_JOB',<br />&nbsp;&nbsp;4&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_position =&gt; 1,<br />&nbsp;&nbsp;5&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_value&nbsp; &nbsp; =&gt; 400);<br />&nbsp;&nbsp;6&nbsp; &nbsp; <br />&nbsp;&nbsp;7&nbsp; &nbsp; DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(<br />&nbsp;&nbsp;8&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; job_name&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; =&gt; 'TEST_JOB',<br />&nbsp;&nbsp;9&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_position =&gt; 2,<br />10&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; argument_value&nbsp; &nbsp; =&gt; 'set new value third');<br />11&nbsp;&nbsp;end;<br />12&nbsp;&nbsp;/<br /><br />PL/SQL 过程已成功完成。<br /><br />SQL&gt; select * from sch_demo_log;<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;ARG_1 ARG_2&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;DEAL_DATE<br />---------- ---------------------- -------------------<br />&nbsp; &nbsp;&nbsp; &nbsp; 100 Thomaszhang Test&nbsp; &nbsp;&nbsp; &nbsp; 2007-11-12 14:35:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 200 set new value first&nbsp; &nbsp; 2007-11-12 14:37:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 300 set new value second&nbsp; &nbsp;2007-11-12 14:39:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 100 Thomaszhang Test&nbsp; &nbsp;&nbsp; &nbsp; 2007-11-12 14:41:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 400 set new value third&nbsp; &nbsp; 2007-11-12 14:43:59<br /><br />SQL&gt; begin<br />&nbsp;&nbsp;2&nbsp; &nbsp; DBMS_SCHEDULER.reset_job_argument_value('TEST_JOB',1);<br />&nbsp;&nbsp;3&nbsp; &nbsp; DBMS_SCHEDULER.reset_job_argument_value('TEST_JOB',2);<br />&nbsp;&nbsp;4&nbsp;&nbsp;end;<br />&nbsp;&nbsp;5&nbsp;&nbsp;/<br /><br />PL/SQL 过程已成功完成。<br /><br />SQL&gt; select * from sch_demo_log;<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;ARG_1 ARG_2&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; DEAL_DATE<br />---------- ----------------------- -------------------<br />&nbsp; &nbsp;&nbsp; &nbsp; 100 Thomaszhang Test&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;2007-11-12 14:35:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 200 set new value first&nbsp; &nbsp;&nbsp;&nbsp;2007-11-12 14:37:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 300 set new value second&nbsp; &nbsp; 2007-11-12 14:39:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 100 Thomaszhang Test&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;2007-11-12 14:41:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 400 set new value third&nbsp; &nbsp;&nbsp;&nbsp;2007-11-12 14:43:59<br />&nbsp; &nbsp;&nbsp; &nbsp; 100 Thomaszhang Test&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;2007-11-12 14:45:59<br /><br />已选择6行。<br /><br /></div><img src ="http://www.blogjava.net/hwpok/aggbug/358598.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-09-14 13:16 <a href="http://www.blogjava.net/hwpok/archive/2011/09/14/358598.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle row_number over </title><link>http://www.blogjava.net/hwpok/archive/2011/08/25/357258.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Thu, 25 Aug 2011 06:08:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/25/357258.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/357258.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/25/357258.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/357258.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/357258.html</trackback:ping><description><![CDATA[<div>1.先创建表 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;employee&nbsp;(empid&nbsp;</span><span style="color: #000000; font-weight: bold">int</span><span style="color: #000000">&nbsp;,deptid&nbsp;</span><span style="color: #000000; font-weight: bold">int</span><span style="color: #000000">&nbsp;,salary&nbsp;</span><span style="color: #000000; font-weight: bold">decimal</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">10</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">2</span><span style="color: #000000">));</span></div><br />2.插入记录<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;employee&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">10</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">5500.00</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;employee&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">2</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">10</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">4500.00</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;employee&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">3</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">20</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">1900.00</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;employee&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">4</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">20</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">4800.00</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;employee&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">5</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">40</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">6500.00</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;employee&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">6</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">40</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">14500.00</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;employee&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">7</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">40</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">44500.00</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;employee&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">8</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">50</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">6500.00</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;employee&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">9</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">50</span><span style="color: #000000">,</span><span style="color: #800000; font-weight: bold">750 0.00</span><span style="color: #000000">);</span></div></div><br /><br />3.语句讲解<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000">row_number()&nbsp;</span><span style="color: #0000ff">over</span><span style="color: #000000">(</span><span style="color: #ff0000">[</span><span style="color: #ff0000">partition&nbsp;by&nbsp;col1</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">order</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;col2))&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;别名<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div><br />此语句表示,根据cole1分组,&nbsp; 在分组内部根据col2进行排序。<br />而这个别名表示,每个组内排序的顺序编号(组内连接唯一).<br /><br />4.具体看个例子 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><font color="#3366ff" size="4"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></font><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;empid,<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deptid,<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;salary,<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row_number()&nbsp;</span><span style="color: #0000ff">OVER</span><span style="color: #000000">(PARTITION&nbsp;</span><span style="color: #0000ff">BY</span><span style="color: #000000">&nbsp;deptid&nbsp;</span><span style="color: #0000ff">ORDER</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">BY</span><span style="color: #000000">&nbsp;salary&nbsp;</span><span style="color: #0000ff">DESC</span><span style="color: #000000">)&nbsp;salary_order&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;employee;</span></div>结果如下<br /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/hwpok/rownum_over.jpg" width="391" height="188" /><br />延伸一下,&nbsp;如果是按某个字段分组然后从每组取出最大的一条纪录,只需加一个条件,salary_order=1<br />sql代码如下:<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;t1.empid,<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;t1.deptid,<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;t1.salary<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;(<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;empid,<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deptid,<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;salary,<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row_number()&nbsp;</span><span style="color: #0000ff">OVER</span><span style="color: #000000">(PARTITION&nbsp;</span><span style="color: #0000ff">BY</span><span style="color: #000000">&nbsp;deptid&nbsp;</span><span style="color: #0000ff">ORDER</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">BY</span><span style="color: #000000">&nbsp;salary&nbsp;</span><span style="color: #0000ff">DESC</span><span style="color: #000000">)&nbsp;salary_order&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;employee<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;t1<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;t1.salary_order</span><span style="color: #808080">=</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">;</span></div><br />再延伸一下，根据部门分组，再按部门内的个人薪水排序，逐个累加。<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;empid,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;deptid,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;salary,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff00ff">sum</span><span style="color: #000000">(salary)&nbsp;</span><span style="color: #0000ff">OVER</span><span style="color: #000000">(PARTITION&nbsp;</span><span style="color: #0000ff">BY</span><span style="color: #000000">&nbsp;deptid&nbsp;</span><span style="color: #0000ff">ORDER</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">BY</span><span style="color: #000000">&nbsp;salary&nbsp;</span><span style="color: #0000ff">DESC</span><span style="color: #000000">)&nbsp;ts&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;employee</span></div><br />5.partition by 与 group by 的区别<br />&nbsp;&nbsp; 1).partition by能得到统计后的明细数据， group by 只能得到汇总数据。<br />&nbsp;&nbsp; 2).partition by在from前， group 在 where 后.<font color="#3366ff" size="4"><br /></font> <img src ="http://www.blogjava.net/hwpok/aggbug/357258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-25 14:08 <a href="http://www.blogjava.net/hwpok/archive/2011/08/25/357258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle md5小存储</title><link>http://www.blogjava.net/hwpok/archive/2011/08/22/357044.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Mon, 22 Aug 2011 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/22/357044.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/357044.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/22/357044.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/357044.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/357044.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">OR</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">REPLACE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">PROCEDURE</span><span style="color: #000000">&nbsp;pro_gen_md5<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">IS</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;update_sql_str&nbsp;</span><span style="color: #000000; font-weight: bold">VARCHAR2</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">1000</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;temp_info_str&nbsp;</span><span style="color: #000000; font-weight: bold">VARCHAR2</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">2000</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;md5_str&nbsp;</span><span style="color: #000000; font-weight: bold">VARCHAR2</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">1000</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;id_str&nbsp;</span><span style="color: #000000; font-weight: bold">NUMBER</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">BEGIN</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;update_sql_str&nbsp;:</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">UPDATE&nbsp;ower_temp&nbsp;SET&nbsp;md5_code=:1&nbsp;WHERE&nbsp;id=:2</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">FOR</span><span style="color: #000000">&nbsp;r&nbsp;</span><span style="color: #808080">IN</span><span style="color: #000000">(</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;ower_temp&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;md5_code&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">)<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;LOOP<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_info_str&nbsp;:</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;nvl(r.VEHICLE_CODE,</span><span style="color: #ff0000">''</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">IF</span><span style="color: #000000">&nbsp;length(temp_info_str)</span><span style="color: #808080">&gt;</span><span style="color: #800000; font-weight: bold">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">THEN</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_str&nbsp;:</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING&nbsp;</span><span style="color: #808080">=&gt;</span><span style="color: #000000">&nbsp;temp_info_str));&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id_str&nbsp;&nbsp;:</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;r.id;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">EXECUTE</span><span style="color: #000000">&nbsp;IMMEDIATE&nbsp;update_sql_str<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USING&nbsp;md5_str,id_str;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">COMMIT</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">END</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">IF</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">END</span><span style="color: #000000">&nbsp;LOOP;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">END</span><span style="color: #000000">;</span></div><img src ="http://www.blogjava.net/hwpok/aggbug/357044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-22 15:12 <a href="http://www.blogjava.net/hwpok/archive/2011/08/22/357044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转) oracle 正则表达式2</title><link>http://www.blogjava.net/hwpok/archive/2011/08/22/357019.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Mon, 22 Aug 2011 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/22/357019.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/357019.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/22/357019.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/357019.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/357019.html</trackback:ping><description><![CDATA[<p>就是由普通字符（例如字符a到z）以及特殊字符（称为元字符）组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板，将某个字符模式与所搜索的字符串进行匹配。</p>
<p>本文详细地列出了能在正则表达式中使用，以匹配文本的各种字符。当你需要解释一个现有的正则表达式时，可以作为一个快捷的参考。更多详细内容，请参 考：Francois Liger,Craig McQ?n,Pal Wilton[刘乐亭译] C#字符串和正则表达式参考手册北京：清华大学出版社2003.2</p>
<table border="0" width="97%" align="center">
<tbody>
<tr>
<td colspan="3"><br /></td></tr></tbody></table>
<p><strong>一</strong><strong>.</strong><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong><strong>匹配字符</strong></p>
<div>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="126">
<p align="center"><strong>字符类</strong></p></td>
<td valign="top" width="224">
<p align="center"><strong>匹配的字符</strong></p></td>
<td valign="top" width="218">
<p align="center"><strong>举</strong><strong> </strong><strong>例</strong></p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">\d</p></td>
<td valign="top" width="224">
<p>从０-９的任一数字</p></td>
<td valign="top" width="218">
<p>\d\d匹配72,但不匹配aa或7a</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">\D</p></td>
<td valign="top" width="224">
<p>任一非数字字符</p></td>
<td valign="top" width="218">
<p>\D\D\D匹配abc,但不匹配123</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">\w</p></td>
<td valign="top" width="224">
<p>任一单词字符，包括A-Z,a-z,0-9和下划线</p></td>
<td valign="top" width="218">
<p>\w\w\w\w匹配Ab-2，但不匹配&#8721;￡$%*或Ab_@</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">\W</p></td>
<td valign="top" width="224">
<p>任一非单词字符</p></td>
<td valign="top" width="218">
<p>\W匹配＠，但不匹配a</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">\s</p></td>
<td valign="top" width="224">
<p>任一空白字符，包括制表符，换行符，回车符，换页符和垂直制表符</p></td>
<td valign="top" width="218">
<p>匹配在HTML,XML和其他标准定义中的所有传统空白字符</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">\S</p></td>
<td valign="top" width="224">
<p>任一非空白字符</p></td>
<td valign="top" width="218">
<p>空白字符以外的任意字符,如A%&amp;g3;等</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">.</p></td>
<td valign="top" width="224">
<p>任一字符</p></td>
<td valign="top" width="218">
<p>匹配除换行符以外的任意字符除非设置了MultiLine先项</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">[&#8230;]</p></td>
<td valign="top" width="224">
<p>括号中的任一字符</p></td>
<td valign="top" width="218">
<p>[abc]将匹配一个单字符,a,b或c.</p>
<p>[a-z]将匹配从a到z的任一字符</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">[^&#8230;]</p></td>
<td valign="top" width="224">
<p>不在括号中的任一字符</p></td>
<td valign="top" width="218">
<p>[^abc]将匹配一个a、b、c之外的单字符,可以a,b或A、B、C</p>
<p>[a-z]将匹配不属于a-z的任一字符,但可以匹配所有的大写字母</p></td></tr></tbody></table></div>
<p><strong>二</strong><strong>.</strong><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong><strong>重复字符</strong></p>
<div>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="126">
<p align="center"><strong>重复字符</strong></p></td>
<td valign="top" width="217">
<p align="center"><strong>含</strong><strong> </strong><strong>义</strong></p></td>
<td valign="top" width="225">
<p align="center"><strong>举</strong><strong> </strong><strong>例</strong></p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">｛n｝</p></td>
<td valign="top" width="217">
<p>匹配前面的字符n次</p></td>
<td valign="top" width="225">
<p>x{2}匹配xx,但不匹配x或xxx</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">｛n,｝</p></td>
<td valign="top" width="217">
<p>匹配前面的字符至少n次</p></td>
<td valign="top" width="225">
<p>x{2}匹配2个或更多的x,如xxx,xxx..</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">｛n,m｝</p></td>
<td valign="top" width="217">
<p>匹配前面的字符至少n次,至多m次。如果n为0，此参数为可选参数</p></td>
<td valign="top" width="225">
<p>x{2,4}匹配xx,xxx,xxxx,但不匹配xxxxx</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">?</p></td>
<td valign="top" width="217">
<p>匹配前面的字符0次或1次，实质上也是可选的</p></td>
<td valign="top" width="225">
<p>x?匹配x或零个x</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">+</p></td>
<td valign="top" width="217">
<p>匹配前面的字符0次或多次</p></td>
<td valign="top" width="225">
<p>x+匹配x或xx或大于0的任意多个x</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">*</p></td>
<td valign="top" width="217">
<p>匹配前面的字符0次或更多次</p></td>
<td valign="top" width="225">
<p>x*匹配0,1或更多个x</p></td></tr></tbody></table></div>
<p><strong>三</strong><strong>.</strong><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong><strong>定位字符</strong></p>
<div>
<table style="width: 567px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="126">
<p align="center"><strong>定位字符</strong></p></td>
<td valign="top" width="441">
<p align="center"><strong>描</strong><strong> </strong><strong>述</strong></p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">^</p></td>
<td valign="top" width="441">
<p>随后的模式必须位于字符串的开始位置，如果是一个多行字符串，则必须位于行首。对于多行文本（包含回车符的一个字符串）来说，需要设置多行标志</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">$</p></td>
<td valign="top" width="441">
<p>前面的模式必须位于字符串的未端，如果是一个多行字符串，必须位于行尾</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">\A</p></td>
<td valign="top" width="441">
<p>前面的模式必须位于字符串的开始位置，忽略多行标志</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">\z</p></td>
<td valign="top" width="441">
<p>前面的模式必须位于字符串的未端，忽略多行标志</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">\Z</p></td>
<td valign="top" width="441">
<p>前面的模式必须位于字符串的未端，或者位于一个换行符前</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">\b</p></td>
<td valign="top" width="441">
<p>匹配一个单词边界，也就是一个单词字符和非单词字符中间的点。要记住一个单词字符是[a-zA-Z0-9]中的一个字符。位于一个单词的词首</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">\B</p></td>
<td valign="top" width="441">
<p>匹配一个非单词字符边界位置，不是一个单词的词首</p></td></tr></tbody></table></div>
<p>注：定位字符可以应用于字符或组合，放在字符串的左端或右端</p>
<p><strong>四</strong><strong>.</strong><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong><strong>分组字符</strong></p>
<div>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="125">
<p align="center"><strong>分组字符</strong></p></td>
<td valign="top" width="164">
<p align="center"><strong>定</strong><strong> </strong><strong>义</strong></p></td>
<td valign="top" width="279">
<p align="center"><strong>举</strong><strong> </strong><strong>例</strong></p></td></tr>
<tr>
<td valign="top" width="125">
<p align="center">（）</p></td>
<td valign="top" width="164">
<p>此字符可以组合括号内模式所匹配的字符，它是一个捕获组，也就是说模式匹配的字符作为最终设置了ExplicitCapture选项&#8213;&#8213;默认状态下字符不是匹配的一部分</p></td>
<td valign="top" width="279">
<p>输入字符串为：ABC1DEF2XY</p>
<p>匹配3个从A到Z的字符和1个数字的正则表达式：（[A-Z]{3}\d）</p>
<p>将产生两次匹配：Match 1=ABC1;Match 2=DEF2</p>
<p>每次匹配对应一个组：Match1的第一个组＝ABC;Match2的第1个组＝DEF</p>
<p>有了反向引用，就可以通过它在正则表达式中的编号以及C#和类Group,GroupCollection来访问组。如果设置了ExplicitCapture选项，就不能使用组所捕获的内容</p></td></tr>
<tr>
<td valign="top" width="125">
<p align="center">（?:）</p></td>
<td valign="top" width="164">
<p>此字符可以组合括号内模式所匹配的字符，它是一个非捕获组，这意味着模式所的字符将不作为一个组来捕获，但它构成了最终匹配结果的一部分。它基本上与上面的组类型相同，但设定了选项ExplicitCapture</p></td>
<td valign="top" width="279">
<p>输入字符串为：1A BB SA1 C</p>
<p>匹配一个数字或一个A到Z的字母，接着是任意单词字符的正则表达式为：（?:\d|[A-Z]\w）</p>
<p>它将产生3次匹配：每1次匹配＝1A；每2次匹配＝BB;每3次匹配＝SA</p>
<p>但是没有组被捕获</p></td></tr>
<tr>
<td valign="top" width="125">
<p align="center">（?&lt;name&gt;）</p></td>
<td valign="top" width="164">
<p>此选项组合括号内模式所匹配的字符，并用尖括号中指定的值为组命名。在正则表达式中，可以使用名称进行反向引用，而不必使用编号。即使不设置ExplicitCapture选项，它也是一个捕获组。这意味着反向引用可以利用组内匹配的字符，或者通过Group类访问</p></td>
<td valign="top" width="279">
<p>输入字符串为：Characters in Sienfeld incl? Jerry Seinfeld,Elaine Benes,Cosno Kramer and George Costanza能够匹配它们的姓名，并在一个组llastName中捕获姓的正则表达式为：\b[A-Z][a-z]+ (?&lt;lastName&gt;[A-Z][a-z]+)\b</p>
<p>它产生了4次匹配：First Match=Jerry Seinfeld; Second Match=Elaine Benes; Third Match=Cosmo Kramer; Fourth Match=George Costanza</p>
<p>每一次匹配都对应了一个lastName组：</p>
<p>第1次匹配：lastName group=Seinfeld</p>
<p>第2次匹配：lastName group=Benes</p>
<p>第3次匹配：lastName group=Kramer</p>
<p>第4次匹配：lastName group=Costanza</p>
<p>不管是否设置了选项ExplictCapture，组都将被捕获</p></td></tr>
<tr>
<td valign="top" width="125">
<p align="center">（?=）</p></td>
<td valign="top" width="164">
<p>正声明。声明的右侧必须是括号中指定的模式。此模式不构成最终匹配的一部分</p></td>
<td valign="top" width="279">
<p>正则表达式\S+(?=.NET)要匹配的输入字符串为：The lang ges were Java,C#.NET,VB.NET,C,Jscript.NET,Pascal</p>
<p>将产生如下匹配：〕</p>
<p>C#</p>
<p>VB</p>
<p>JScript.</p></td></tr>
<tr>
<td valign="top" width="125">
<p align="center">（?!）</p></td>
<td valign="top" width="164">
<p>负声明。它规定模式不能紧临着声明的右侧。此模式不构成最终匹配的一部分</p></td>
<td valign="top" width="279">
<p>\d{3}(?![A-Z])要匹配的输入字符串为：123A 456 789111C</p>
<p>将产生如下匹配：</p>
<p>456</p>
<p>789</p></td></tr>
<tr>
<td valign="top" width="125">
<p align="center">（?&lt;=）</p></td>
<td valign="top" width="164">
<p>反向正声明。声明的左侧必须为括号内的指定模式。此模式不构成最终匹配的一部分</p></td>
<td valign="top" width="279">
<p>正则表达式(?&lt;=New)([A-Z][a-z]+)要匹配的输入字符串为：The following states,New Mexico,West Virginia,Washington, New England</p>
<p>它将产生如下匹配：</p>
<p>Mexico</p>
<p>England</p></td></tr>
<tr>
<td valign="top" width="125">
<p align="center">（?&lt;!）</p></td>
<td valign="top" width="164">
<p>反向正声明。声明的左侧必须不能是括号内的指定模式。此模式不构成最终匹配的一部分</p></td>
<td valign="top" width="279">
<p>正则表达式(?&lt;!1)\d{2}([A-Z])要匹配的输入字符串如下：123A456F789C111A</p>
<p>它将实现如下匹配：</p>
<p>56F</p>
<p>89C</p></td></tr>
<tr>
<td valign="top" width="125">
<p align="center">（?&gt;）</p></td>
<td valign="top" width="164">
<p>非回溯组。防止Regex引擎回溯并且防止实现一次匹配</p></td>
<td valign="top" width="279">
<p>假设要匹配所有以&#8220;ing&#8221;结尾的单词。输入字符串如下：He was very trusing</p>
<p>正则表达式为：.*ing</p>
<p>它将实现一次匹配&#8213;&#8213;单词trusting。&#8220;.&#8221;匹配任意字符，当然也匹配&#8220;ing&#8221;。所以，Regex引擎回溯一位并在第2个&#8220;t&#8221;停止，然后匹配指定的模式&#8220;ing&#8221;。但是，如果禁用回溯操作：(?&gt;.*)ing</p>
<p>它将实现0次匹配。&#8220;.&#8221;能匹配所有的字符，包括&#8220;ing&#8221;&#8213;&#8213;不能匹配，从而匹配失败</p></td></tr></tbody></table></div>
<p><strong>五</strong><strong>.</strong><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong><strong>决策字符</strong></p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="154">
<p align="center"><strong>字</strong><strong> </strong><strong>符</strong><strong> </strong></p></td>
<td valign="top" width="231">
<p align="center"><strong>描</strong><strong> </strong><strong>述</strong></p></td>
<td valign="top" width="183">
<p align="center"><strong>举</strong><strong> </strong><strong>例</strong></p></td></tr>
<tr>
<td valign="top" width="154">
<p align="center">（?(regex)yes_regex|no_regex）</p></td>
<td valign="top" width="231">
<p>如果表达式regex匹配，那么将试图匹配表达式yes。否则匹配表达式no。正则表达式no是可先参数。注意，作出决策的模式宽度为0.这意味着表达式yes或no将从与regex表达式相同的位置开始匹配</p></td>
<td valign="top" width="183">
<p>正则表达式(?(\d)dA|A-Z)B)要匹配的输入字符串为：1A CB3A5C 3B</p>
<p>它实现的匹配是：</p>
<p>1A</p>
<p>CB</p>
<p>3A</p></td></tr>
<tr>
<td valign="top" width="154">
<p align="center">（?(group name or number)yes_regex|no_regex）</p></td>
<td valign="top" width="231">
<p>如果组中的正则表达式实现了匹配，那么试图匹配yes正则表达式。否则，试图匹配正则表达式no。no是可先的参数</p></td>
<td valign="top" width="183">
<p>正则表达式</p>
<p>(\d7)?-(?(1)\d\d[A-Z]|[A-Z][A-Z]要匹配的输入字符串为：</p>
<p>77-77A 69-AA 57-B</p>
<p>它实现的匹配为：</p>
<p>77-77A</p>
<p>－AA</p></td></tr></tbody></table>
<p>注：上面表中列出的字符强迫处理器执行一次if-else决策</p>
<p><strong>六</strong><strong>.</strong><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong><strong>替换字符</strong></p>
<div>
<table style="width: 567px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="126">
<p align="center"><strong>字</strong><strong> </strong><strong>符</strong></p></td>
<td valign="top" width="441">
<p align="center"><strong>描</strong><strong> </strong><strong>述</strong></p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">$group</p></td>
<td valign="top" width="441">
<p>用group指定的组号替换</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">${name}</p></td>
<td valign="top" width="441">
<p>替换被一个(?&lt;name&gt;)组匹配的最后子串</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">$$</p></td>
<td valign="top" width="441">
<p>替换一个字符$</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">$&amp;</p></td>
<td valign="top" width="441">
<p>替换整个的匹配</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">$^</p></td>
<td valign="top" width="441">
<p>替换输入字符串匹配之前的所有文本</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">$&#8217;</p></td>
<td valign="top" width="441">
<p>替换输入字符串匹配之后的所有文本</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">$+</p></td>
<td valign="top" width="441">
<p>替换最后捕获的组</p></td></tr>
<tr>
<td valign="top" width="126">
<p align="center">$_</p></td>
<td valign="top" width="441">
<p>替换整个的输入字符串</p></td></tr></tbody></table></div>
<p>注：以上为常用替换字符，不全</p>
<p><strong>七</strong><strong>.</strong><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong><strong>转义序列</strong></p>
<div>
<table style="width: 567px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="189">
<p align="center"><strong>字</strong><strong> </strong><strong>符</strong></p></td>
<td valign="top" width="379">
<p align="center"><strong>描</strong><strong> </strong><strong>述</strong></p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\\</p></td>
<td valign="top" width="379">
<p>匹配字符&#8220;\&#8221;</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\.</p></td>
<td valign="top" width="379">
<p>匹配字符&#8220;.&#8221;</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\*</p></td>
<td valign="top" width="379">
<p>匹配字符&#8220;*&#8221;</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\+</p></td>
<td valign="top" width="379">
<p>匹配字符&#8220;+&#8221;</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\?</p></td>
<td valign="top" width="379">
<p>匹配字符&#8220;?&#8221;</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\|</p></td>
<td valign="top" width="379">
<p>匹配字符&#8220;|&#8221;</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\(</p></td>
<td valign="top" width="379">
<p>匹配字符&#8220;(&#8221;</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\)</p></td>
<td valign="top" width="379">
<p>匹配字符&#8220;)&#8221;</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\{</p></td>
<td valign="top" width="379">
<p>匹配字符&#8220;{&#8221;</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\}</p></td>
<td valign="top" width="379">
<p>匹配字符&#8220;}&#8221;</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\^</p></td>
<td valign="top" width="379">
<p>匹配字符&#8220;^&#8221;</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\$</p></td>
<td valign="top" width="379">
<p>匹配字符&#8220;$&#8221;</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\n</p></td>
<td valign="top" width="379">
<p>匹配换行符</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\r</p></td>
<td valign="top" width="379">
<p>匹配回车符</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\t</p></td>
<td valign="top" width="379">
<p>匹配制表符</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\v</p></td>
<td valign="top" width="379">
<p>匹配垂直制表符</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\f</p></td>
<td valign="top" width="379">
<p>匹配换面符</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\nnn</p></td>
<td valign="top" width="379">
<p>匹配一个8进数字，nnn指定的ASCII字符。如\103匹配大写的C</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\xnn</p></td>
<td valign="top" width="379">
<p>匹配一个16进数字，nn指定的ASCII字符。如\x43匹配大写的C</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\unnnn</p></td>
<td valign="top" width="379">
<p>匹配由4位16进数字（由nnnn表示）指定的Unicode字符</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">\cV</p></td>
<td valign="top" width="379">
<p>匹配一个控制字符，如\cV匹配Ctrl-V</p></td></tr></tbody></table></div>
<p><strong>八</strong><strong>.</strong><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong><strong>选项标志</strong></p>
<div>
<table style="width: 567px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="189">
<p align="center"><strong>选项标志</strong></p></td>
<td valign="top" width="379">
<p align="center"><strong>名</strong><strong> </strong><strong>称</strong></p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">I</p></td>
<td valign="top" width="379">
<p>IgnoreCase</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">M</p></td>
<td valign="top" width="379">
<p>Multiline</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">N</p></td>
<td valign="top" width="379">
<p>ExplicitCapture</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">S</p></td>
<td valign="top" width="379">
<p>SingleLine</p></td></tr>
<tr>
<td valign="top" width="189">
<p align="center">X</p></td>
<td valign="top" width="379">
<p>IgnorePatternWhitespace</p></td></tr></tbody></table></div>
<p><strong>注：选项本身的信作含义如下表所示：</strong></p>
<table style="width: 567px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="182">
<p align="center"><strong>标</strong><strong> </strong><strong>志</strong></p></td>
<td valign="top" width="386">
<p align="center"><strong>名</strong><strong> </strong><strong>称</strong></p></td></tr>
<tr>
<td valign="top" width="182">
<p>IgnoreCase</p></td>
<td valign="top" width="386">
<p>使模式匹配不区分大小写。默认的选项是匹配区分大小写</p></td></tr>
<tr>
<td valign="top" width="182">
<p>RightToLeft</p></td>
<td valign="top" width="386">
<p>从右到左搜索输入字符串。默认是从左到右以符合英语等的阅读习惯，但不符合阿拉伯语或希伯来语的阅读习惯</p></td></tr>
<tr>
<td valign="top" width="182">
<p>None</p></td>
<td valign="top" width="386">
<p>不设置标志。这是默认选项</p></td></tr>
<tr>
<td valign="top" width="182">
<p>Multiline</p></td>
<td valign="top" width="386">
<p>指定^和$可以匹配行首和行尾，以及字符串的开始和结尾。这意味着可以匹配每个用换行符分隔的行。但是，字符&#8220;.&#8221;仍然不匹配换行符</p></td></tr>
<tr>
<td valign="top" width="182">
<p>SingleLine</p></td>
<td valign="top" width="386">
<p>规定特殊字符&#8220;.&#8221;匹配任意的字符，包括换行符。默认情况下，特殊字符&#8220;.&#8221;不匹配换行符。通常与MultiLine选项一起使用</p></td></tr>
<tr>
<td valign="top" width="182">
<p>ECMAScript.</p></td>
<td valign="top" width="386">
<p>ECMA(European Coputer Man?turer&#8217;s Association,欧洲计算机生产商协会)已经定义了正则表达式应该如何实现，而且已经在ECMAScript规范中实现，这是一个基于标准的 JavaScript。这个选项只能与IgnoreCase和MultiLine标志一起使用。与其它任何标志一起使用，ECMAScript都将产生异 常</p></td></tr>
<tr>
<td valign="top" width="182">
<p>IgnorePatternWhitespace</p></td>
<td valign="top" width="386">
<p>此选项从使用的正则表达式模式中删除所有非转义空白字符。它使表达式能跨越多行文本，但必须确保对模式中所有的空白进行转义。如果设置了此选项，还可以使用&#8220;#&#8221;字符来注释下则表达式</p></td></tr>
<tr>
<td valign="top" width="182">
<p>Complied</p></td>
<td valign="top" width="386">
<p>它把正则表达式编译为更接近机器代码的代码。这样速度快，但不允许对它进行任何修改</p></td></tr></tbody></table>
<div id="content">
<p>oracle的正则表达式(regular expression)简单介绍</p>
<p>目前，正则表达式已经在很多软件中得到广泛的应用，包括*nix（Linux, Unix等），HP等操作系统，PHP，C#，Java等开发环境。</p>
<p>Oracle 10g正则表达式提高了SQL灵活性。有效的解决了数据有效性， 重复词的辨认, 无关的空白检测，或者分解多个正则组成<br />的字符串等问题。</p>
<table border="0" width="97%" align="center">
<tbody>
<tr>
<td colspan="3"><br /></td></tr></tbody></table>
<p>Oracle 10g支持正则表达式的四个新函数分别是：REGEXP_LIKE、REGEXP_INSTR、REGEXP_S STR、和REGEXP_REPLACE。<br />它们使用POSIX 正则表达式代替了老的百分号（%）和通配符（_）字符。</p>
<p><br />REGEXP_REPLACE(source_string,pattern,replace_string,position,occurtence,match_parameter)函数(10g新函数)<br />描 述:字符串替换函数。相当于增强的replace函数。Source_string指定源字符表达式；pattern指定规则表达 式；replace_string指定用于替换的字符串；position指定起始搜索位置；occurtence指定替换出现的第n个字符 串；match_parameter指定默认匹配操作的文本串。<br />其中replace_string,position,occurtence,match_parameter参数都是可选的。</p>
<p><br />REGEXP_S STR(source_string, pattern[,position [, occurrence[, match_parameter]]])函数(10g新函数)<br />描 述：返回匹配模式的子字符串。相当于增强的s str函数。Source_string指定源字符表达式；pattern指定规则表达 式；position指定起始搜索位置；occurtence指定替换出现的第n个字符串；match_parameter指定默认匹配操作的文本串。<br />其中position,occurtence,match_parameter参数都是可选的</p>
<p>match_option的取值如下：<br />'c&#8217;&nbsp;&nbsp; 说明在进行匹配时区分大小写（缺省值）；<br />'i'&nbsp;&nbsp; 说明在进行匹配时不区分大小写；<br />'n'&nbsp;&nbsp; 允许使用可以匹配任意字符的操作符；<br />'m'&nbsp;&nbsp; 将x作为一个包含多行的字符串。</p>
<p>REGEXP_LIKE(source_string, pattern[, match_parameter])函数(10g新函数)<br />描述：返回满足匹配模式的字符串。相当于增强的like函数。Source_string指定源字符表达式；pattern指定规则表达式；match_parameter指定默认匹配操作的文本串。<br />其中position,occurtence,match_parameter参数都是可选的</p>
<p><br />REGEXP_INSTR(source_string, pattern[, start_position[, occurrence[, return_option[, match_parameter]]]])函数(10g新函数)<br />描 述: 该函数查找 pattern ，并返回该模式的第一个位置。您可以随意指定您想要开始搜索的 start_position。 occurrence 参数默认为 1，除非您指定您要查找接下来出现的一个模式。return_option 的默认值为 0，它返回该模式的起始位置；值为 1 则返回符合匹配条件的下一个字符的起始位置</p>
<p>特殊字符：<br />'^' 匹配输入字符串的开始位置，在方括号表达式中使用，此时它表示不接受该字符集合。<br />'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性，则 $ 也匹配 'n' 或 'r'。<br />'.' 匹配除换行符 n之外的任何单字符。<br />'?' 匹配前面的子表达式零次或一次。<br />'*' 匹配前面的子表达式零次或多次。<br />'+' 匹配前面的子表达式一次或多次。<br />'( )' 标记一个子表达式的开始和结束位置。<br />'[]' 标记一个中括号表达式。<br />'{m,n}' 一个精确地出现次数范围，m= &lt;出现次数 &lt;=n，'{m}'表示出现m次，'{m,}'表示至少出现m次。<br />' |' 指明两项之间的一个选择。例子'^([a-z]+ |[0-9]+)$'表示所有小写字母或数字组合成的字符串。<br />num 匹配 num，其中 num 是一个正整数。对所获取的匹配的引用。</p>
<p><br />正则表达式的一个很有用的特点是可以保存子表达式以后使用， 被称为Backreferencing. 允许复杂的替换能力。<br />如调整一个模式到新的位置或者指示被代替的字符或者单词的位置. 被匹配的子表达式存储在临时缓冲区中， 缓冲区从左到右编号, 通过数字符号访问。 下面的例子列出了把名字 aa bb cc 变成<br />cc, bb, aa.<br />Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '3, 2, 1') FROM d l；<br />REGEXP_REPLACE('ELLENHILDISMIT<br />cc, bb, aa</p>
<p>字符簇： <br />[[:alpha:]] 任何字母。<br />[[:digit:]] 任何数字。<br />[[:alnum:]] 任何字母和数字。<br />[[:space:]] 任何白字符。<br />[[:upper:]] 任何大写字母。<br />[[:lower:]] 任何小写字母。<br />[[:punct:]] 任何标点符号。<br />[[:xdigit:]] 任何16进制的数字，相当于[0-9a-fA-F]。</p>
<p>各种操作符的运算优先级<br />转义符<br />(), (?:), (?=), [] 圆括号和方括号<br />*, +, ?, {n}, {n,}, {n,m} 限定符<br />^, $, anymetacharacter 位置和顺序<br />| &#8220;或&#8221;操作</p>
<p>--测试数据<br />create table test(mc varchar2(60));</p>
<p>insert into test vals('112233445566778899');<br />insert into test vals('22113344 5566778899');<br />insert into testvals('33112244 5566778899');<br />insert into test vals('44112233 5566 778899');<br />insert into test vals('5511 2233 4466778899');<br />insert into test vals('661122334455778899');<br />insert into test vals('771122334455668899');<br />insert into test vals('881122334455667799');<br />insert into test vals('991122334455667788');<br />insert into test vals('aabbccddee');<br />insert into test vals('bbaaaccddee');<br />insert into test vals('ccabbddee');<br />insert into test vals('ddaabbccee');<br />insert into test vals('eeaabbccdd');<br />insert into test vals('ab123');<br />insert into test vals('123xy');<br />insert into test vals('007ab');<br />insert into test vals('abcxy');<br />insert into test vals('The final test is is is how to find duplicate words.');</p>
<p>commit;</p>
<p>一、REGEXP_LIKE </p>
<p>select * from test where regexp_like(mc,'^a{1,3}');<br />select * from test where regexp_like(mc,'a{1,3}');<br />select * from test where regexp_like(mc,'^a.*e$');<br />select * from test where regexp_like(mc,'^[[:lower:]] |[[:digit:]]');<br />select * from test where regexp_like(mc,'^[[:lower:]]');<br />Select mc FROM test Where REGEXP_LIKE(mc,'[^[:digit:]]');<br />Select mc FROM test Where REGEXP_LIKE(mc,'^[^[:digit:]]');</p>
<p>二、REGEXP_INSTR</p>
<p>Select REGEXP_INSTR(mc,'[[:digit:]]$') from test;<br />Select REGEXP_INSTR(mc,'[[:digit:]]+$') from test;<br />Select REGEXP_INSTR('The price is $400.','$[[:digit:]]+') FROM D L;<br />Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM D L;<br />Select REGEXP_INSTR(',,,,,','[^,]*') FROM D L;<br />Select REGEXP_INSTR(',,,,,','[^,]') FROM D L;</p>
<p>三、REGEXP_S STR</p>
<p>SELECT REGEXP_S STR(mc,'[a-z]+') FROM test;<br />SELECT REGEXP_S STR(mc,'[0-9]+') FROM test;<br />SELECT REGEXP_S STR('aababcde','^a.*b') FROM D L;</p>
<p>四、REGEXP_REPLACE</p>
<p>Select REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM d l;<br />Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '3, 2, 1') FROM d l；</p></div><img src ="http://www.blogjava.net/hwpok/aggbug/357019.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-22 10:38 <a href="http://www.blogjava.net/hwpok/archive/2011/08/22/357019.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)oracle  正则表达式</title><link>http://www.blogjava.net/hwpok/archive/2011/08/22/357018.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Mon, 22 Aug 2011 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/22/357018.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/357018.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/22/357018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/357018.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/357018.html</trackback:ping><description><![CDATA[环境: oracle 10g r2 <br />更多内容可以参考:<br /><font size="3"><span style="color: rgb(255,0,0); font-weight: bold">&lt;&lt;Oracle? Database Application Developer's Guide - Fundamentals 10g Release 2 (10.2)&gt;&gt;</span></font><br /><br />必须明白的是，oracle的正则表达式和其它的语言的并不是完全一样。<br />oracle支持以下标准的正则表达式:<br />
<ul><li>IEEE Portable Operating System Interface (POSIX) standard draft 1003.2/D11.2</li></ul>
<ul><li>Unicode Regular Expression Guidelines of the Unicode Consortium</li></ul>
<ul><li>Extends the matching capabilities for multilingual data beyond what is specified&nbsp; in the POSIX standard(即posix的多语言支持).<br /></li></ul>
<ul><li>Adds support for the common Perl regular expression extensions that are not</li></ul>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; included in the POSIX standard but do not conflict with it. Oracle Database<br />
<div style="margin-left: 40px">provides built-in support for some of the most heavily used Perl regular<br />expression operators, for example, character class shortcuts, the non-greedy<br />modifier, and so on(即部分perl标准,不包含在posix标准,但是又不与之冲突的)<br /></div><br /><br />---2008-09-08 做了个实验，关键的要点是三个,重复次数{},+,*,?&nbsp;&nbsp; <br />---以及匹配模式[...] ,[^...],(...),(...)<br />--以及转义符号 \d,\D,\\等。<br />------------------------------------------------------------------------------------------------------------------<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID VALUE<br />--------------------------------------- ----------------------------------------<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9 lzf is a chinese<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10 1231231231lzf<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11 perfect<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 13625061300<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 059183383335<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 13959029697<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4 13950323157<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5 who is your daddy?<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6 who are you?<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6 what is your name?<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6 I am 20 years old!<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7 股市下挫到2100点左右<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8 lzf ' is very happy 136ok<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8 do you know lzf,ok?<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8 ok,lzf is my brother<br />------------------------------------------------------------------------------------------------------------------<br /><br />select * from&nbsp; test_reg where regexp_like(value,'^1(.+)7$')&nbsp; --1开头，7结尾的内容<br />select * from&nbsp; test_reg where regexp_like(value,'\d+')&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --一个或者多个数字<br />select * from&nbsp; test_reg where regexp_like(value,'^[a-zA-Z]{1,}[a-zA-Z]+$')&nbsp; --全部字符的.[:digit:]<br />select * from&nbsp; test_reg where regexp_like(value,'^[0-9]{1,}[0-9]+$')&nbsp; --全部数字的.<br />select * from&nbsp; test_reg where regexp_like(value,'[y][o][u]') --包含you<br />select * from&nbsp; test_reg where regexp_like(value,'(you)') --包含you<br />select * from&nbsp; test_reg where regexp_like(value,'[you]')&nbsp;&nbsp;&nbsp;&nbsp; --包含y o u的,不分顺序<br />select * from&nbsp; test_reg where regexp_like(value,'(lzf){1,}(.){0,}(ok)') --包含lzf 和ok的.&nbsp; 但是也仅仅限制与lzf 在ok前<br />以上试验是在看了下文以及参考了OReilly.Oracle.PL.SQL.Programming.4th.Edition.Aug.2005.chs后作出的.<br />--------------<br /><font color="#ff0000"><strong>2010/08/04 增加以下例子</strong></font><br /><br />---<br />--以'POSIX('开头的串,以下几个表达式的结果都是一样的。<br />select&nbsp; 1 from dual where regexp_like('POSIX(ADDDDDD,Y,13)','^(POSIX\()([A-Z]+)(,)([RYN]{1})(,)\d{1,}?\)')<br /><br />select&nbsp; 1 from dual where regexp_like('POSIX(ADDDDDD,Y,13)','^(POSIX\()([A-Z]+)(,)([RYN]{1})(,)\d+\)')<br />select&nbsp; 1 from dual where regexp_like('POSIX(ADDDDDD,Y,13)','^(POSIX\()([A-Z]+)(,)([RYN]{1}),\d+\)')<br />select&nbsp; 1 from dual where regexp_like('POSIX(ADDDDDD,Y,13)','^(POSIX\()([A-Z]+),([RYN]{1}),\d+\)')<br />select&nbsp; 1 from dual where regexp_like('POSIX(ADDDDDD,Y,13)','^(POSIX\()([A-Z]+),([RYN]+),\d+\)')<br /><br />select&nbsp; 1 from dual where regexp_like('POSIX(ADDDDDD,Y,13)','^(POSIX\()([A-Z]+),[RYN]+,\d+\)')<br />select&nbsp; 1 from dual where regexp_like('POSIX(A,N,13)','^(POSIX\()([A-Z]+),[RYN]+,\d+\)')<br />----------<br />--位于字符串中的串<br />select&nbsp; 1 from dual where regexp_like('POSIX(A,N,13)','^(POSIX\()([A-Z]+),[RYN]+,\d+\)')<br />select&nbsp; 1 from dual where regexp_like('P_OSI_X(JYL_GP_R,N,13)','^[A-Z_]+\(([A-Z_]+),[RYN]+,\d+\)')<br /><br />--测试regexp_substr,基本的还是regexp_like<br />
<table border="1" cellspacing="1" cellpadding="1" width="708" height="238">
<tbody>
<tr>
<td>&nbsp;<font size="1">SQL&gt; select regexp_substr('P_OSI_X(JYL_GP_R,N,13)+AVG(JYL_JJ_R,Y,3)','^[A-Z_]+\(([A-Z_]+),[RYN]+,\d+\)') FROM DUAL<br />&nbsp; 2&nbsp; /<br />&nbsp;<br />REGEXP_SUBSTR('P_OSI_X(JYL_GP_<br />------------------------------<br />P_OSI_X(JYL_GP_R,N,13)<br />&nbsp;<br />SQL&gt; select regexp_substr('P_OSI_X(JYL_GP_R,N,13)+AVG(JYL_JJ_R,Y,3)','[A-Z_]+\(([A-Z_]+),[RYN]+,\d+\)',1,2) FROM DUAL<br />&nbsp; 2&nbsp; /<br />&nbsp;<br />REGEXP_SUBSTR('P_OSI_X(JYL_GP_<br />------------------------------<br />AVG(JYL_JJ_R,Y,3)</font></td></tr></tbody></table><br />2010/08/26 新增例子<br />
<table border="1" cellspacing="1" cellpadding="1" width="80%">
<tbody>
<tr>
<td>-- delete the first ()<br />&nbsp;select regexp_replace('dad(disc_id=50003118)add','(^([A-Z]{1,}\()|(\)[A-Z]{1,})$)','',1,0,'i') FROM DUAL<br />--<br />match pattern<br />using classes<br />select regexp_substr(upper('dad(ssdsd89\9 dd== (sddf(d)),sdsd)add'),'^([A-Z]{1,}\()[[:space:][:alnum:]\,\_\(\)\=]{1,}\)[A-Z]{1,}$',1,1,'i') FROM DUAL<br /><br /></td></tr></tbody></table>&nbsp;&nbsp; <br />
<hr style="width: 100%; height: 2px" />
<font style="color: rgb(255,0,0)" size="4">OReilly. 的参考内容</font><br />Section A.1.&nbsp; Metacharacters<br /><br />
<table style="font-family: 隶书" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td valign="top">
<h3><font size="2">A.1. Metacharacters</font></h3>
<p><font size="2">The R2 column in <a href="http://lzfhope.blog.163.com/#oraclep4-APP-A-TABLE-1"><font color="#5e8296">Tables A-1</font></a> through <a href="http://lzfhope.blog.163.com/#oraclep4-APP-A-TABLE-3"><font color="#5e8296">A-3</font></a> indicates which metacharacters were introduced in Oracle Database 10<span>g</span> Release 2. All others were introduced in Release 1.</font></p>
<p>&nbsp;</p>
<table rules="all" cellspacing="0" cellpadding="4" width="100%" frame="hsides">
<caption>
<h5><font size="2">Table A-1. Character-matching metacharacters</font></h5></caption>
<colgroup>
<col>
<col>
<col>
<thead>
<tr>
<th scope="col" align="left">
<p><font size="2">Syntax</font></p></th>
<th scope="col" align="left">
<p><font size="2">R2?</font></p></th>
<th scope="col" align="left">
<p><font size="2">Description</font></p></th></tr></thead>
<tbody>
<tr>
<td align="left">
<p><font size="2">.</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">Matches any single character except for newline. Will match newline when the n flag is set. On Windows, Linux, and Unix platforms, chr(10) is recognized as the newline.</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[ ... ]</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">Defines a <span>matching list</span> that matches any character listed between the brackets. You may specify ranges of characters, as in a-z. These ranges are interpreted based on the NLS_SORT setting.</font></p>
<p><font size="2">A dash (-) is a literal when it occurs first or last in the list (e.g., [abc-]). A closing-bracket (]) is a literal when it occurs first in the list (e.g., []abc]). A caret (^) in the first position makes the list a <span>nonmatching list</span> (see the next entry).</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[^ ... ]</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">Matches any character not listed between the brackets. Referred to as a "nonmatching list."</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[:<span>class</span>:]</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">Matches any character that belongs to the specified character class. May only be used within a matching list: [[:class:]abc] is a valid expression, [:class:]abc is not. <a href="http://lzfhope.blog.163.com/#oraclep4-APP-A-TABLE-5"><font color="#5e8296">Table A-5</font></a> lists the valid character class names.</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[.<span>coll</span>.]</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">Matches the specified collation element, which may be one or more characters. May only be used within a matching list. For example, the expression [[.ch.]] matches the Spanish letter "ch". <a href="http://lzfhope.blog.163.com/#oraclep4-APP-A-TABLE-4"><font color="#5e8296">Table A-4</font></a> lists the valid collation elements.</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[=<span>char</span>=]</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">Matches all characters that share the same base character as char. May be used only within a matching list. For example, [[=e=]] matches any of: "e&#233;?&#232;???E".</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">\d</font></p></td>
<td align="left">
<p><font size="2"><br /></font></p></td>
<td align="left">
<p><font size="2">Matches any digit. Equivalent to [[:digit:]].</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">\D</font></p></td>
<td align="left">
<p><font size="2"><br /></font></p></td>
<td align="left">
<p><font size="2">Matches any nondigit. Equivalent to [^[:digit:]]</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">\w</font></p></td>
<td align="left">
<p><font size="2"><br /></font></p></td>
<td align="left">
<p><font size="2">Matches any "word character." Word characters are defined to be alphabetic characters, numeric characters, and the underscore.</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">\W</font></p></td>
<td align="left">
<p><font size="2"><br /></font></p></td>
<td align="left">
<p><font size="2">Matches any nonword character.</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">\s</font></p></td>
<td align="left">
<p><font size="2"><br /></font></p></td>
<td align="left">
<p><font size="2">Matches any whitespace character. Equivalent to [[:space:]].</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">\S</font></p></td>
<td align="left">
<p><font size="2"><br /></font></p></td>
<td align="left">
<p><font size="2">Matches nonwhitespace characters. Equivalent to [^[:space:]].</font></p></td></tr></tbody></table>
<p>&nbsp;</p><font size="2"><br /></font>
<p>&nbsp;</p>
<table rules="all" cellspacing="0" cellpadding="4" width="100%" frame="hsides">
<caption>
<h5><font size="2">Table A-2. Quantifiers</font></h5></caption>
<colgroup>
<col>
<col>
<col>
<thead>
<tr>
<th scope="col" align="left">
<p><font size="2">Syntax</font></p></th>
<th scope="col" align="left">
<p><font size="2">R2?</font></p></th>
<th scope="col" align="left">
<p><font size="2">Description</font></p></th></tr></thead>
<tbody>
<tr>
<td align="left">
<p><font size="2">+</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">One or more</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">?</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">Zero or one</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">*</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">Zero or more</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">{<span>m</span>}</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">Exactly <span>m</span> occurrences</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">{<span>m</span>,}</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">At least <span>m</span> occurrences</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">{<span>m</span>,<span>n</span>}</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">At least <span>m</span>, and at most <span>n</span> occurrences</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">+?</font></p></td>
<td align="left">
<p><font size="2"><br /></font></p></td>
<td align="left">
<p><font size="2">One or more, but nongreedy</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">??</font></p></td>
<td align="left">
<p><font size="2"><br /></font></p></td>
<td align="left">
<p><font size="2">Zero or one, but nongreedy</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">{<span>m</span>}?</font></p></td>
<td align="left">
<p><font size="2"><br /></font></p></td>
<td align="left">
<p><font size="2">The same as {<span>m</span>}</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">{<span>m</span>,}?</font></p></td>
<td align="left"><font size="2"><br /></font></td>
<td align="left">
<p><font size="2">At least <span>m</span> occurrences, but nongreedy and stops as soon as <span>m</span> occurrences are reached</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">{<span>m</span>,<span>n</span>}?</font></p></td>
<td align="left">
<p><font size="2"><br /></font></p></td>
<td align="left">
<p><font size="2">At least <span>m</span>, and at most <span>n</span> occurrences, but nongreedy; when possible, <span>m</span></font> occurrences are matched</p></td></tr></tbody></table>
<p>&nbsp;</p><font size="2"><br /></font>
<p>&nbsp;</p>
<table rules="all" cellspacing="0" cellpadding="4" width="100%" frame="hsides">
<caption>
<h5><font size="2">Table A-3. Other metacharacters</font></h5></caption>
<colgroup>
<col>
<col>
<col>
<thead>
<tr>
<th scope="col" align="left">
<p><font size="2">Syntax</font></p></th>
<th scope="col" align="left">
<p><font size="2">R2?</font></p></th>
<th scope="col" align="left">
<p><font size="2">Description</font></p></th></tr></thead>
<tbody>
<tr>
<td align="left">
<p><font size="2">|</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">Specifies an alternation. An alternation within a subexpression doesn't extend beyond the subexpression.</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">( ...)</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">Defines a subexpresson.</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">\<span>n</span></font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">References the text matched by the <span>n</span>th subexpression. Backreferences may range from \1 through \9.</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">\</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">When not followed by a digit, the \ is an escape character. For example, use the pattern \\1 to look for a single backslash followed by the digit 1, use \( to look for an opening-parentheses (rather than begin a subexpression), etc.</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">^</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">Anchors an expression to the beginning of the string (in multiline mode, to the beginning of a line).</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">$</font></p></td>
<td><font size="2">&nbsp;</font></td>
<td align="left">
<p><font size="2">Anchors an expression to the end of the string (in multiline mode, to the end of a line).</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">\A</font></p></td>
<td align="left">
<p><font size="2"><br /></font></p></td>
<td align="left">
<p><font size="2">Anchors an expression to the beginning of the string regardless of whether multiline mode is specified.</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">\Z</font></p></td>
<td align="left">
<p><font size="2"><br /></font></p></td>
<td align="left">
<p><font size="2">Anchors an expression to the end of the string, or the a newline that happens to be ending a string, regardless of whether multiline mode is specified.</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">\z</font></p></td>
<td align="left">
<p><font size="2"><br /></font></p></td>
<td align="left">
<p><font size="2">Anchors an expression to the end of the string regardless of whether multiline mode is specified.</font></p></td></tr></tbody></table>
<p>&nbsp;</p><font size="2"><br /></font>
<p>&nbsp;</p>
<table rules="all" cellspacing="0" cellpadding="4" width="100%" frame="hsides">
<caption>
<h5><font size="2">Table A-4. Collation elements</font></h5></caption>
<colgroup>
<col>
<col>
<col>
<col>
<thead>
<tr>
<th scope="col" align="left">
<p><font size="2">NLS_SORT</font></p></th>
<th colspan="4" scope="col" align="left">
<p><font size="2">Multicharacter collation elements</font></p></th></tr></thead>
<tbody>
<tr>
<td align="left">
<p><font size="2">XDANISH</font></p></td>
<td align="left">
<p><font size="2">aa</font></p>
<p><font size="2">oe</font></p></td>
<td align="left">
<p><font size="2">AA</font></p>
<p><font size="2">OE</font></p></td>
<td align="left">
<p><font size="2">Aa</font></p>
<p><font size="2">Oe</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">XSPANISH</font></p></td>
<td align="left">
<p><font size="2">ch</font></p>
<p><font size="2">ll</font></p></td>
<td align="left">
<p><font size="2">CH</font></p>
<p><font size="2">LL</font></p></td>
<td align="left">
<p><font size="2">Ch</font></p>
<p><font size="2">Ll</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">XHUNGARIAN</font></p></td>
<td align="left">
<p><font size="2">cs</font></p>
<p><font size="2">gy</font></p>
<p><font size="2">ly</font></p>
<p><font size="2">ny</font></p>
<p><font size="2">sz</font></p>
<p><font size="2">ty</font></p>
<p><font size="2">zs</font></p></td>
<td align="left">
<p><font size="2">CS</font></p>
<p><font size="2">GY</font></p>
<p><font size="2">LY</font></p>
<p><font size="2">NY</font></p>
<p><font size="2">SZ</font></p>
<p><font size="2">TY</font></p>
<p><font size="2">ZS</font></p></td>
<td align="left">
<p><font size="2">Cs</font></p>
<p><font size="2">Gy</font></p>
<p><font size="2">Ly</font></p>
<p><font size="2">Ny</font></p>
<p><font size="2">Sz</font></p>
<p><font size="2">Ty</font></p>
<p><font size="2">Zs</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">XCZECH</font></p></td>
<td align="left">
<p><font size="2">ch</font></p></td>
<td align="left">
<p><font size="2">CH</font></p></td>
<td align="left">
<p><font size="2">Ch</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">XCZECH_PUNCTUATION</font></p></td>
<td align="left">
<p><font size="2">ch</font></p></td>
<td align="left">
<p><font size="2">CH</font></p></td>
<td align="left">
<p><font size="2">Ch</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">XSLOVAK</font></p></td>
<td align="left">
<p><font size="2">dz</font></p>
<p><font size="2">d_</font></p>
<p><font size="2">ch</font></p></td>
<td align="left">
<p><font size="2">DZ</font></p>
<p><font size="2">D_</font></p>
<p><font size="2">CH</font></p></td>
<td align="left">
<p><font size="2">Dz</font></p>
<p><font size="2">D_</font></p>
<p><font size="2">Ch</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">XCROATIAN</font></p></td>
<td align="left">
<p><font size="2">d_</font></p>
<p><font size="2">lj</font></p>
<p><font size="2">nj</font></p></td>
<td align="left">
<p><font size="2">D_</font></p>
<p><font size="2">LJ</font></p>
<p><font size="2">Nj</font></p></td>
<td align="left">
<p><font size="2">D_</font></p>
<p><font size="2">Lj</font></p>
<p><font size="2">NJ</font></p></td></tr></tbody></table>
<p>&nbsp;</p><font size="2"><br /></font>
<p>&nbsp;</p>
<table rules="all" cellspacing="0" cellpadding="4" width="100%" frame="hsides">
<caption>
<h5><font size="2">Table A-5. Supported character classes</font></h5></caption>
<colgroup>
<col>
<col>
<thead>
<tr>
<th scope="col" align="left">
<p><font size="2">Class</font></p></th>
<th scope="col" align="left">
<p><font size="2">Description</font></p></th></tr></thead>
<tbody>
<tr>
<td align="left">
<p><font size="2">[:alnum:]</font></p></td>
<td align="left">
<p><font size="2">Alphanumeric characters (same as [:alpha:] + [:digit:])</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[:alpha:]</font></p></td>
<td align="left">
<p><font size="2">Alphabetic characters only</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[:blank:]</font></p></td>
<td align="left">
<p><font size="2">Blank space characters, such as space and tab</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[:cntrl:]</font></p></td>
<td align="left">
<p><font size="2">Nonprinting, or control characters</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[:digit:]</font></p></td>
<td align="left">
<p><font size="2">Numeric digits</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[:graph:]</font></p></td>
<td align="left">
<p><font size="2">Graphical characters (same as [:punct:] + [:upper:] + [:lower:] + [:digit:])</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[:lower:]</font></p></td>
<td align="left">
<p><font size="2">Lowercase letters</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[:print:]</font></p></td>
<td align="left">
<p><font size="2">Printable characters</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[:punct:]</font></p></td>
<td align="left">
<p><font size="2">Punctuation characters</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[:space:]</font></p></td>
<td align="left">
<p><font size="2">Whitespace characters such as space, formfeed, newline, carriage return, horizontal tab, and vertical tab</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[:upper:]</font></p></td>
<td align="left">
<p><font size="2">Uppercase letters</font></p></td></tr>
<tr>
<td align="left">
<p><font size="2">[:xdigit:]</font></p></td>
<td align="left">
<p><font size="2">Hexadecimal characters</font></p></td></tr></tbody></table>
</td></tr></tbody></table><br />对于类的使用，要特别注意点，因为基本上要包含在一对中括号中。<br /><span style="font-weight: bold">例一：检验非汉字的函数</span><br />例如可以定义一个检验非汉字的函数，不考虑其它UNICODE<br />CREATE OR REPLACE Function func_existNormalChar(chars In Varchar2) Return Pls_Integer<br />Is<br />&nbsp; vResult Pls_Integer;<br />Begin<br />&nbsp; Select 1<br />&nbsp;&nbsp;&nbsp;&nbsp; Into vresult From dual<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Where regexp_like(chars,'[!-~ ，。、？&#8217;&#8220;；：『』【】＋＝－&#8212;&#8212;～！&#9678;＃￥％&#8230;&#8230;&#8251;&#215;（）]+')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Or&nbsp;&nbsp;&nbsp; regexp_like(chars,'[[:space:]+]')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Or&nbsp;&nbsp;&nbsp; regexp_like(chars,'[[:blank:]+]')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Or&nbsp;&nbsp;&nbsp; regexp_like(chars,'[[:cntrl:]+]');<br />&nbsp; Return vresult;<br />Exception<br />&nbsp; When Others Then<br />&nbsp;&nbsp;&nbsp; Return 0;<br />End;<br /><br /><span style="font-weight: bold">例二：出现次数的检验</span><br />
<table style="border-bottom: 1px solid; border-left: 1px solid; border-top: 1px solid; border-right: 1px solid" border="1" cellspacing="1" cellpadding="1" width="100%">
<tbody>
<tr>
<td>&nbsp;<font size="2">序号</font></td>
<td><font size="2">&nbsp;例子</font></td>
<td><font size="2">&nbsp;结果</font></td>
<td><font size="2">&nbsp;说明</font></td></tr>
<tr>
<td><font size="2">&nbsp;1</font></td>
<td><font size="2">regexp_replace('a12c','[[:digit:]]+','*')</font></td>
<td><font size="2">&nbsp;a*c</font></td>
<td><font size="2">&nbsp;测试"+",即出现一次或者更多次的.由于采取的是连续的匹配,所以结果上是把多个数字合并为一个替代字符串,为了理解连续匹配的意思,看序号9更能够明白.这是总体偏少的模式</font></td></tr>
<tr>
<td><font size="2">&nbsp;2</font></td>
<td><font size="2">regexp_replace('a12c','[[:digit:]]?','*')</font></td>
<td><font size="2">&nbsp;*a***c*</font></td>
<td><font size="2">&nbsp;测试"?",即0或者一次.这个符号,会在任意一个其它字符边上插入一个假设出现的匹配类型符号,如例子,a的左边本来是没有,但是表达式认为数字字符在a的左边出现了0次(这个是成立的).然后还要逐个替换过去,这是总体偏多的模式,过于匹配和逐个匹配结合<br /></font></td></tr>
<tr>
<td><font size="2">&nbsp;3</font></td>
<td><font size="2">regexp_replace('a12c','[[:digit:]]*','*') <br /></font></td>
<td><font size="2">&nbsp;*a**c*</font></td>
<td><font size="2">&nbsp;测试"*",即0或者更多次数,这个模式类似与?类似,采取连续匹配+多余匹配</font></td></tr>
<tr>
<td><font size="2">&nbsp;4</font></td>
<td><font size="2">regexp_replace('a12c','[[:digit:]]+?','*') <br /></font></td>
<td><font size="2">&nbsp;a**c</font></td>
<td><font size="2">&nbsp;测试"+?",匹配在前面一次或者多次的串,采取的是逐个匹配的策略(如果有连续的情况出现),这个是通常最希望使用的模式.</font></td></tr>
<tr>
<td><font size="2">&nbsp;5</font></td>
<td><font size="2">regexp_replace('a12c','[[:digit:]]*?','*')</font></td>
<td><font size="2">&nbsp;*a*1*2*c*</font></td>
<td><font size="2">&nbsp;测试"*?",匹配0或者更多次,<span style="color: rgb(255,0,0)">难于理解! 但可以简单地理解为为在各个字符中以及两边插入替代串.</span><br /></font></td></tr>
<tr>
<td><font size="2">&nbsp;6</font></td>
<td><font size="2">regexp_replace('a12c','[[:digit:]]??','*')</font></td>
<td><font size="2">&nbsp;*a*1*2*c*</font></td>
<td><font size="2">&nbsp;测试"??",匹配0或者1次,<span style="color: rgb(255,0,0)">难于理解啊! </span></font><font style="color: rgb(255,0,0)" size="2">但可以简单地理解为为在各个字符中以及两边插入替代串.</font></td></tr>
<tr>
<td><font size="2">&nbsp;7</font></td>
<td><font size="2">regexp_replace('a12c','[[:digit:]]{1,}','*') <br /></font></td>
<td><font size="2">&nbsp;a*c</font></td>
<td><font size="2">&nbsp;测试{1,},同+,结果已经说明</font></td></tr>
<tr>
<td><font size="2">&nbsp;8</font></td>
<td><font size="2">&nbsp;</font></td>
<td><font size="2">&nbsp;</font></td>
<td><font size="2">&nbsp;</font></td></tr>
<tr>
<td><font size="2">&nbsp;9</font></td>
<td><font size="2">regexp_replace('a1x2c','[[:digit:]]+','*')</font></td>
<td><font size="2">&nbsp;a*x*c</font></td>
<td><font size="2">测试"+",这个例子说明,如果被检测的字符串中特定的匹配串如果不是连续的(多次),那么替代的还是属于正常的范围.</font></td></tr></tbody></table>
<p><br />其它的次数模式暂时没有测试,对于 *,?,+ ,*?,+?,??,基本有其对应的模式 {n,m}? 或者是{n,}? ,除了*,*?之外,因为此二者表示的都是0或者多次(大于1),无法用{n,m}的方式表示.<br /><br /><span style="font-weight: bold">例三:多个类的并用</span><br />很多时候使用类还是很方便的,<font size="2">例如[:digit:]</font>表示数字.[:space:]表示空格,换行,回车等等.<br />如果希望把特定串中的数字和回车空格等都替换为'-',则可以使用 "|"(替代操作符,其实就是类似一般高级语言中的或操作符号).<br />select&nbsp; regexp_replace('adfa jkjk jk<br />jk','([[:digit:]]+?)|([[:space:]]+?)','-')&nbsp; from dual;<br />结果如下:<br />adfa-jkjk-jk-jk<br />已经把空格和回车符号都替换为'-'了.<br />又例如:<br />Select regexp_replace('a1b c1d jk<br />jk','([[:digit:]]+?)|([[:space:]]+?)','-') From dual<br />结果如下:<br />a-b-c-d-jk-jk<br /><br />例四:迭代替换<br />例如希望把以下串替换掉<br />'&lt;xxxx&nbsp;&nbsp; &lt;often&gt;&nbsp; &lt;common&gt; &nbsp; &lt;fat&gt; &nbsp; &gt;'<br /><br /></p>
<hr id="null" />
<strong>关于范围操作符号 <font color="#0000ff">-</font></strong> 
<p>发音：横杆或者减号</p>
<p>在列表匹配操作情况下，如果没有特别的设置，就是表示匹配一个范围：</p>
<p>&nbsp;</p>
<table border="1" cellspacing="1" cellpadding="1" width="80%">
<tbody>
<tr>
<td>
<p><font size="2">例子：把字符串中非数字+-()的符号替换为空</font></p>
<p><font size="2">这是一个不成功的匹配</font></p>
<p><font size="2">SQL&gt; select regexp_replace('1+[2c- 3([ad]km,4','[^0-9\+\-\(\)]','',1) from dual;<br />&nbsp;<br />REGEXP_REPLACE('1+[2C-3([AD]KM<br />------------------------------<br />1+23(4</font></p>
<p><font size="2">这也是一个错误的匹配，因为减号这个时候表示一个范围<br />SQL&gt; select regexp_replace('1+[2c- 3([ad]km,4','[^0-9\+-\(\)]','',1) from dual;<br />&nbsp;<br />REGEXP_REPLACE('1+[2C-3([AD]KM<br />------------------------------<br />1+[2-3([,4</font></p>
<p><font size="2">二者的区别在于单独的一个减号，如果前面没有跟上斜杠\，那么就是表示范围，否则就是减号本身。</font></p>
<p><font size="2">但即使如此，依然没有达到目的，第一个把减号还是给去除了，虽然排除了其它的需要排除的符号，</font></p>
<p><font size="2">第二个，则是当作范围符号，大部分的没有排除掉。</font></p>
<p><font size="2">但是不太明白的是，按照oracle文档的约定，在范围匹配中形如[\-]表示匹配一个减号，为何依然匹配补上了，尤其是当夹着其它需要匹配的模式的时候。</font></p>
<p><font size="2">现在只能尝试着把这个模式放在最后：</font></p>
<p><font size="2">SQL&gt; select regexp_replace('1+[2c- 3([ad4','[^0-9\(+\)\-]','',1) from dual<br />&nbsp; 2&nbsp; /<br />&nbsp;<br />REGEXP_REPLACE('1+[2C-3([AD4',<br />------------------------------<br />1+2-3(4</font></p>
<p><font size="2">结果是可以，因为模式"\-"被放到了范围中的尾巴。</font></p>
<p><font size="2">那是文档不全，还是理解不透彻了，</font></p>
<p><font size="2">看来以后遇到这样的问题还是先把减号放到尾巴去吧。</font></p></td></tr></tbody></table><img src ="http://www.blogjava.net/hwpok/aggbug/357018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-22 10:34 <a href="http://www.blogjava.net/hwpok/archive/2011/08/22/357018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle  创建dblink(1)</title><link>http://www.blogjava.net/hwpok/archive/2011/08/16/356606.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Tue, 16 Aug 2011 01:47:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/16/356606.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/356606.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/16/356606.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/356606.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/356606.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当用户要跨本地数据库，访问另外一个数据库表中的数据时，本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。下面讲介绍如何在本地数据库中创建dblink.</p>
<p>　　创建dblink一般有两种方式，不过在创建dblink之前用户必须有创建dblink的权限。想知道有关dblink的权限，以sys用户登录到本地数据库：&nbsp;&nbsp;&nbsp; </p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;user_sys_privs&nbsp;t&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;t.privilege&nbsp;</span><span style="color: #808080">like</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">upper</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">%link%</span><span style="color: #ff0000">'</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 结果如下:<br />&nbsp;&nbsp;&nbsp; <img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/hwpok/dblink_p.jpg" width="505" height="79" /><br />　　可以看出在数据库中dblink有三种权限:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1).CREATE DATABASE LINK（所创建的dblink只能是创建者能使用，别的用户使用不了）<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2).CREATE PUBLIC DATABASE LINK（public表示所创建的dblink所有用户都可以使用）<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3).DROP PUBLIC DATABASE LINK<br /></p>
<p>　　在sys用户下，把CREATE PUBLIC DATABASE LINK，DROP PUBLIC DATABASE LINK权限授予给你的用户</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">grant</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">PUBLIC</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">DATABASE</span><span style="color: #000000">&nbsp;LINK，</span><span style="color: #0000ff">DROP</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">PUBLIC</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">DATABASE</span><span style="color: #000000">&nbsp;LINK&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;scott;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div>
<p><br />　　然后以scott用户登录本地数据库</p>
<p>　　1.创建dblink的第一种方式，是在本地数据库tnsnames.ora文件中配置了要远程访问的数据库。</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">database</span><span style="color: #000000">&nbsp;link&nbsp;to_bylw&nbsp;connect&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;scott&nbsp;identified&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;tiger&nbsp;using&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">bylw</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div>
<p><br />　　其中to_bylw是你创建的dblink名字，bylw是远程数据库的实例名，scott/tiger是登录到远程数据库的用户/密码。然后在本地数据库中通过dblink访问远程数据库'bylw'中scott.tb_test表,sql语句如下所示</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;scott.tb_test</span><span style="color: #008000">@to_bylw</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>&nbsp;</p>
<p>　　2.创建dblink的第二种方式，是在本地数据库tnsnames.ora文件中没有配置要访问的远程数据库，</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">database</span><span style="color: #000000">&nbsp;link&nbsp;link_em<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />　　&nbsp;connect&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;mydata&nbsp;identified&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;mydata##<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />　　&nbsp;using&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">(DESCRIPTION&nbsp;=<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ADDRESS&nbsp;=&nbsp;(PROTOCOL&nbsp;=&nbsp;TCP)(HOST&nbsp;=&nbsp;192.168.1.139)(PORT&nbsp;=&nbsp;1521))<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(CONNECT_DATA&nbsp;=<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SERVER&nbsp;=&nbsp;DEDICATED)<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SERVICE_NAME&nbsp;=&nbsp;ORCL)<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</span><span style="color: #ff0000">'</span><span style="color: #000000">;</span></div>&nbsp;&nbsp; 个人比较喜欢第二种创建方式. <img src ="http://www.blogjava.net/hwpok/aggbug/356606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-16 09:47 <a href="http://www.blogjava.net/hwpok/archive/2011/08/16/356606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle  外连接</title><link>http://www.blogjava.net/hwpok/archive/2011/07/14/354339.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Thu, 14 Jul 2011 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/14/354339.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/354339.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/14/354339.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/354339.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/354339.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; "><br /></span><span style="color: #008080; ">--</span><span style="color: #008080; ">用户表</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">CREATE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;t_user<br />(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID&nbsp;</span><span style="color: #000000; font-weight: bold; ">NUMBER</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">PRIMARY</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">KEY</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NAME&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">32</span><span style="color: #000000; ">)<br />);<br /><br /></span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t_user(ID,NAME)&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">1</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">小赵</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t_user(ID,NAME)&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">2</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">小钱</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t_user(ID,NAME)&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">3</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">小孙</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t_user(ID,NAME)&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">4</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">小李</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t_user(ID,NAME)&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">5</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">小周</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t_user(ID,NAME)&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">6</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">小吴</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t_user(ID,NAME)&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">7</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">小郑</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t_user(ID,NAME)&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">8</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">小王</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br /><br /></span><span style="color: #008080; ">--</span><span style="color: #008080; ">角色表</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">CREATE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;t_role<br />(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID&nbsp;</span><span style="color: #000000; font-weight: bold; ">NUMBER</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">PRIMARY</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">KEY</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NAME&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">32</span><span style="color: #000000; ">)<br />);<br /><br /></span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t_role(ID,NAME)&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">1</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">赵燕</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t_role(ID,NAME)&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">2</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">钱颖</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t_role(ID,NAME)&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">3</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">孙丽</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t_role(ID,NAME)&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">4</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">李平</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br /><br /></span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;t_user;<br /></span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;t_role;<br /><br /></span><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;自然连接</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;t1.id,&nbsp;t1.name,&nbsp;t2.id,t2.name&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;t_user&nbsp;t1,&nbsp;t_role&nbsp;t2;<br /><br /></span><span style="color: #008080; ">--</span><span style="color: #008080; ">相等连接</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;t1.id,&nbsp;t1.name,&nbsp;t2.id,t2.name&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;t_user&nbsp;t1,&nbsp;t_role&nbsp;t2&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;t1.id</span><span style="color: #808080; ">=</span><span style="color: #000000; ">t2.id(</span><span style="color: #808080; ">+</span><span style="color: #000000; ">);<br /><br /></span><span style="color: #008080; ">--</span><span style="color: #008080; ">外连接(是由加号所在另一侧的表,链接到加号所在的一侧)</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;t1.id,&nbsp;t1.name,&nbsp;t2.id,t2.name&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;t_user&nbsp;t1,&nbsp;t_role&nbsp;t2&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;t2.id(</span><span style="color: #808080; ">+</span><span style="color: #000000; ">)</span><span style="color: #808080; ">=</span><span style="color: #000000; ">t1.id&nbsp;</span><span style="color: #808080; ">AND</span><span style="color: #000000; ">&nbsp;t2.id(</span><span style="color: #808080; ">+</span><span style="color: #000000; ">)</span><span style="color: #808080; ">=</span><span style="color: #800000; font-weight: bold; ">4</span><span style="color: #000000; ">;</span></div><img src ="http://www.blogjava.net/hwpok/aggbug/354339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-14 17:54 <a href="http://www.blogjava.net/hwpok/archive/2011/07/14/354339.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle  对象类型(二) 简单对象</title><link>http://www.blogjava.net/hwpok/archive/2011/07/14/354321.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Thu, 14 Jul 2011 06:17:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/14/354321.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/354321.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/14/354321.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/354321.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/354321.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;建立对象类型</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">CREATE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">OR</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">REPLACE</span><span style="color: #000000; ">&nbsp;TYPE&nbsp;person_type2&nbsp;</span><span style="color: #0000FF; ">AS</span><span style="color: #000000; ">&nbsp;OBJECT<br />(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID&nbsp;</span><span style="color: #000000; font-weight: bold; ">NUMBER</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NAME&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; ">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phone&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; ">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;address&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">64</span><span style="color: #000000; ">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CONSTRUCTOR&nbsp;</span><span style="color: #0000FF; ">FUNCTION</span><span style="color: #000000; ">&nbsp;person_type2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID&nbsp;</span><span style="color: #000000; font-weight: bold; ">NUMBER</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NAME&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;</span><span style="color: #0000FF; ">RETURN</span><span style="color: #000000; ">&nbsp;SELF&nbsp;</span><span style="color: #0000FF; ">AS</span><span style="color: #000000; ">&nbsp;RESULT,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MEMBER&nbsp;</span><span style="color: #0000FF; ">PROCEDURE</span><span style="color: #000000; ">&nbsp;change_address(addr&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; ">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MEMBER&nbsp;</span><span style="color: #0000FF; ">FUNCTION</span><span style="color: #000000; ">&nbsp;get_info&nbsp;</span><span style="color: #0000FF; ">RETURN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; "><br />);<br /><br /></span><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;建立对象类型</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">CREATE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">OR</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">REPLACE</span><span style="color: #000000; ">&nbsp;TYPE&nbsp;BODY&nbsp;person_type2&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080; ">--</span><span style="color: #008080; ">构造方法</span><span style="color: #008080; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CONSTRUCTOR&nbsp;</span><span style="color: #0000FF; ">FUNCTION</span><span style="color: #000000; ">&nbsp;person_type2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID&nbsp;</span><span style="color: #000000; font-weight: bold; ">NUMBER</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NAME&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;</span><span style="color: #0000FF; ">RETURN</span><span style="color: #000000; ">&nbsp;SELF&nbsp;</span><span style="color: #0000FF; ">AS</span><span style="color: #000000; ">&nbsp;RESULT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.id:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">ID;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.name:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">NAME;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">RETURN</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;更改address的值</span><span style="color: #008080; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MEMBER&nbsp;</span><span style="color: #0000FF; ">PROCEDURE</span><span style="color: #000000; ">&nbsp;change_address(addr&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;address&nbsp;:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;addr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;返回信息</span><span style="color: #008080; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MEMBER&nbsp;</span><span style="color: #0000FF; ">FUNCTION</span><span style="color: #000000; ">&nbsp;get_info&nbsp;</span><span style="color: #0000FF; ">RETURN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">RETURN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">id:</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">||</span><span style="color: #000000; ">ID</span><span style="color: #808080; ">||</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">,name:</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">||</span><span style="color: #000000; ">NAME</span><span style="color: #808080; ">||</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">,phone:</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">||</span><span style="color: #000000; ">phone</span><span style="color: #808080; ">||</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">,address:</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">||</span><span style="color: #000000; ">address;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">;<br /><br /></span><span style="color: #0000FF; ">DROP</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;worker;<br /><br /></span><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;创建包含对象类型的表</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">CREATE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;worker(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID&nbsp;</span><span style="color: #000000; font-weight: bold; ">NUMBER</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">PRIMARY</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">KEY</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person&nbsp;person_type2,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;create_time&nbsp;DATE&nbsp;</span><span style="color: #0000FF; ">DEFAULT</span><span style="color: #000000; ">&nbsp;SYSDATE,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remark&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">256</span><span style="color: #000000; ">)<br />)<br /><br /></span><span style="color: #008080; ">--</span><span style="color: #008080; ">查询包含对象的表</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;worker;<br /><br /></span><span style="color: #008080; ">--</span><span style="color: #008080; ">测试对象</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">DECLARE</span><span style="color: #000000; "><br />&nbsp;&nbsp;pt2&nbsp;person_type2;<br /></span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;pt2&nbsp;:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;person_type2(</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">huiwanpeng</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;dbms_output.put_line(pt2.get_info());<br />&nbsp;&nbsp;pt2.change_address(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">成都</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;dbms_output.put_line(pt2.get_info());<br /></span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">;</span></div><img src ="http://www.blogjava.net/hwpok/aggbug/354321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-14 14:17 <a href="http://www.blogjava.net/hwpok/archive/2011/07/14/354321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle  对象类型(一) 简单对象</title><link>http://www.blogjava.net/hwpok/archive/2011/07/14/354320.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Thu, 14 Jul 2011 05:15:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/14/354320.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/354320.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/14/354320.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/354320.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/354320.html</trackback:ping><description><![CDATA[对象类型是用户自定义的复合数据类型.<br />它个包有点类似,它也包含两个部份:<br />对象类型规范和对象类型体.<br />对象类型包含五种方法:<br />1.构造方法,使用constructor function<br />2.成员方法,使用menber<br />3.靜态方法,使用static<br />4.排序方法,使用map,一个对象类型只能定义一个.<br />5.排充方法2.使用order,一个对象类型只能定义一个.<br /><br />下面我们看一下简单对象类型:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;建立对象类型</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">CREATE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">OR</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">REPLACE</span><span style="color: #000000; ">&nbsp;TYPE&nbsp;person_type&nbsp;</span><span style="color: #0000FF; ">AS</span><span style="color: #000000; ">&nbsp;OBJECT(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID&nbsp;</span><span style="color: #000000; font-weight: bold; ">NUMBER</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NAME&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">32</span><span style="color: #000000; ">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gender&nbsp;</span><span style="color: #000000; font-weight: bold; ">NUMBER</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;birthday&nbsp;DATE<br />);<br /><br /></span><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;建立行对象</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">CREATE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;t_person&nbsp;</span><span style="color: #0000FF; ">OF</span><span style="color: #000000; ">&nbsp;person_type;<br /><br /></span><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;查询行</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;t_person;<br /><br /></span><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;对行插入数据</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t_person&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">(person_type(</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">huiwanpeng</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">0</span><span style="color: #000000; ">,SYSDATE));</span></div><img src ="http://www.blogjava.net/hwpok/aggbug/354320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-14 13:15 <a href="http://www.blogjava.net/hwpok/archive/2011/07/14/354320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle  包</title><link>http://www.blogjava.net/hwpok/archive/2011/07/14/354317.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Thu, 14 Jul 2011 04:32:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/14/354317.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/354317.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/14/354317.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/354317.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/354317.html</trackback:ping><description><![CDATA[oracle 是用于逻辑组合多个过程或函数.<br />一个oracle包包含两部份:<br />1.包规范<br />&nbsp;&nbsp; 相当于java里的接口.<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;包规范</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">CREATE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">OR</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">REPLACE</span><span style="color: #000000; ">&nbsp;PACKAGE&nbsp;pkg_edm<br /></span><span style="color: #0000FF; ">IS</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;age&nbsp;</span><span style="color: #000000; font-weight: bold; ">NUMBER</span><span style="color: #000000; ">&nbsp;:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">30</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">PROCEDURE</span><span style="color: #000000; ">&nbsp;&nbsp;add_test_hui(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in_id&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; font-weight: bold; ">NUMBER</span><span style="color: #000000; ">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in_value&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">FUNCTION</span><span style="color: #000000; ">&nbsp;getValueById(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in_id&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; font-weight: bold; ">NUMBER</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">RETURN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">END</span><span style="color: #000000;">&nbsp;pkg_edm;</span></div>2.包体<br />&nbsp;&nbsp; 相当于java里的接口实现类.<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;包体</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">CREATE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">OR</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">REPLACE</span><span style="color: #000000; ">&nbsp;PACKAGE&nbsp;BODY&nbsp;pkg_edm<br /></span><span style="color: #0000FF; ">IS</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;查询函数</span><span style="color: #008080; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">FUNCTION</span><span style="color: #000000; ">&nbsp;getValueById(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in_id&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; font-weight: bold; ">NUMBER</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">RETURN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rtn_value&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">64</span><span style="color: #000000; ">)&nbsp;:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF0000; ">''</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;VALUE&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;rtn_value&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;test_hui&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;ID</span><span style="color: #808080; ">=</span><span style="color: #000000; ">in_id;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">RETURN</span><span style="color: #000000; ">&nbsp;rtn_value;<br />&nbsp;&nbsp;&nbsp;&nbsp;EXCEPTION<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">WHEN</span><span style="color: #000000; ">&nbsp;OTHERS&nbsp;</span><span style="color: #0000FF; ">THEN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">RETURN</span><span style="color: #000000; ">&nbsp;rtn_value;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">&nbsp;getValueById;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;插入记录过程</span><span style="color: #008080; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">PROCEDURE</span><span style="color: #000000; ">&nbsp;&nbsp;add_test_hui(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in_id&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; font-weight: bold; ">NUMBER</span><span style="color: #000000; ">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in_value&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;test_hui&nbsp;(ID,VALUE)&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">(in_id,in_value);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">COMMIT</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">&nbsp;add_test_hui;<br /></span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">&nbsp;pkg_edm;</span></div><br />包的调用:<br />1.测试调用包过程<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">--</span><span style="color: #008080; ">测试调用包过程</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;pkg_edm.add_test_hui(</span><span style="color: #800000; font-weight: bold; ">99999</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">asdfasdf</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">;</span></div><br />2.测试调用包函数<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">--</span><span style="color: #008080; ">测试调用包函数</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">DECLARE</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;temp_value&nbsp;</span><span style="color: #000000; font-weight: bold; ">VARCHAR2</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">64</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;temp_value&nbsp;:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;pkg_edm.getValueById(</span><span style="color: #800000; font-weight: bold; ">8713</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;dbms_output.put_line(temp_value);<br /></span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">;</span></div><br /><img src ="http://www.blogjava.net/hwpok/aggbug/354317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-14 12:32 <a href="http://www.blogjava.net/hwpok/archive/2011/07/14/354317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle  参照游标</title><link>http://www.blogjava.net/hwpok/archive/2011/07/13/354245.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 13 Jul 2011 04:32:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/13/354245.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/354245.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/13/354245.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/354245.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/354245.html</trackback:ping><description><![CDATA[<div>oracle中的参照变量有两种，ref cursor和ref obj_type。是指用于存放数值指针的变量。通过使用参照变量，可以使得应用程序共享相同对象，从而降低占用空间。</div><div><strong>Ref cursor</strong><strong>：</strong>使用游标变量时不需要在定义时就指定相应的select语句，从而实现动态的游标操作。</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">DECLARE</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;TYPE&nbsp;cur&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; ">&nbsp;REF&nbsp;</span><span style="color: #0000FF; ">CURSOR</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;test_cur&nbsp;cur;<br />&nbsp;&nbsp;&nbsp;&nbsp;t_record&nbsp;test_forall</span><span style="color: #808080; ">%</span><span style="color: #000000; ">ROWTYPE;<br /></span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">OPEN</span><span style="color: #000000; ">&nbsp;test_cur&nbsp;</span><span style="color: #0000FF; ">FOR</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;test_forall;<br />&nbsp;&nbsp;&nbsp;&nbsp;LOOP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">FETCH</span><span style="color: #000000; ">&nbsp;test_cur&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t_record;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">EXIT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHEN</span><span style="color: #000000; ">&nbsp;test_cur</span><span style="color: #808080; ">%</span><span style="color: #000000; ">NOTFOUND;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(t_record.</span><span style="color: #FF00FF; ">user_id</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">&nbsp;LOOP;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">CLOSE</span><span style="color: #000000; ">&nbsp;test_cur;<br /></span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">;</span></div><img src ="http://www.blogjava.net/hwpok/aggbug/354245.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-13 12:32 <a href="http://www.blogjava.net/hwpok/archive/2011/07/13/354245.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 10g 集合的高级特性</title><link>http://www.blogjava.net/hwpok/archive/2011/07/13/354242.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 13 Jul 2011 03:43:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/13/354242.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/354242.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/13/354242.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/354242.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/354242.html</trackback:ping><description><![CDATA[1.使用集合赋值<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">DECLARE</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;TYPE&nbsp;t_user_id&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">OF</span><span style="color: #000000; ">&nbsp;test_forall.</span><span style="color: #FF00FF; ">user_id</span><span style="color: #808080; ">%</span><span style="color: #000000; ">TYPE;<br />&nbsp;&nbsp;&nbsp;&nbsp;t1&nbsp;t_user_id;<br /></span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;t1&nbsp;:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;t_user_id(</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">2</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">3</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">FOR</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">..t1.</span><span style="color: #FF00FF; ">count</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOOP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(t1(i));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">&nbsp;LOOP;<br /></span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">;</span></div><br />2.set 集合去重<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">DECLARE</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;TYPE&nbsp;t_user_id&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">OF</span><span style="color: #000000; ">&nbsp;test_forall.</span><span style="color: #FF00FF; ">user_id</span><span style="color: #808080; ">%</span><span style="color: #000000; ">TYPE;<br />&nbsp;&nbsp;&nbsp;&nbsp;t1&nbsp;t_user_id;<br />&nbsp;&nbsp;&nbsp;&nbsp;t2&nbsp;t_user_id;<br /></span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;t1&nbsp;:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;t_user_id(</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">2</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">2</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">3</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">3</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;t2&nbsp;:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">SET</span><span style="color: #000000; ">(t1);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">FOR</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">..t2.</span><span style="color: #FF00FF; ">count</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOOP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">t2:</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">||</span><span style="color: #000000; ">t2(i));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">&nbsp;LOOP;<br /></span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">;</span></div><br />3.multiset union 合并包含重复值 /multiset union distinct 合并去重复值<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">DECLARE</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;TYPE&nbsp;t_user_id&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">OF</span><span style="color: #000000; ">&nbsp;test_forall.</span><span style="color: #FF00FF; ">user_id</span><span style="color: #808080; ">%</span><span style="color: #000000; ">TYPE;<br />&nbsp;&nbsp;&nbsp;&nbsp;t1&nbsp;t_user_id&nbsp;:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;t_user_id(</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">2</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">3</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;t2&nbsp;t_user_id&nbsp;:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;t_user_id(</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">2</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">3</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">4</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;t2&nbsp;:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;t2&nbsp;MULTISET&nbsp;</span><span style="color: #0000FF; ">UNION</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">DISTINCT</span><span style="color: #000000; ">&nbsp;t1;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">FOR</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">..t2.</span><span style="color: #FF00FF; ">count</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOOP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">t2:</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">||</span><span style="color: #000000; ">t2(i));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">&nbsp;LOOP;<br /></span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">;</span></div><br />4.集合求差<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">DECLARE</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;TYPE&nbsp;t_user_id&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">OF</span><span style="color: #000000; ">&nbsp;test_forall.</span><span style="color: #FF00FF; ">user_id</span><span style="color: #808080; ">%</span><span style="color: #000000; ">TYPE;<br />&nbsp;&nbsp;&nbsp;&nbsp;t1&nbsp;t_user_id&nbsp;:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;t_user_id(</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">2</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">3</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;t2&nbsp;t_user_id&nbsp;:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;t_user_id(</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">2</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">3</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">4</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;t2&nbsp;:</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;t2&nbsp;MULTISET&nbsp;</span><span style="color: #0000FF; ">EXCEPT</span><span style="color: #000000; ">&nbsp;t1;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">FOR</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">..t2.</span><span style="color: #FF00FF; ">count</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOOP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">t2:</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">||</span><span style="color: #000000; ">t2(i));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">&nbsp;LOOP;<br /></span><span style="color: #0000FF; ">END</span><span style="color: #000000;">;</span></div><br />5.检测集合是否为空 if arr is null then 初始化 end if;<br /><br /><img src ="http://www.blogjava.net/hwpok/aggbug/354242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-13 11:43 <a href="http://www.blogjava.net/hwpok/archive/2011/07/13/354242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FORALL与BULK COLLECT的使用方法</title><link>http://www.blogjava.net/hwpok/archive/2011/07/13/354241.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 13 Jul 2011 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/13/354241.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/354241.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/13/354241.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/354241.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/354241.html</trackback:ping><description><![CDATA[<div>FORALL与BULK COLLECT的使用方法: <br />1．使用FORALL比FOR效率高，因为前者只切换一次上下文，而后者将是在循环次数一样多个上下文间切换。  <br />2．使用BLUK COLLECT一次取出一个数据集合，比用游标条取数据效率高，尤其是在网络不大好的情况下。但BLUK COLLECT需要大量内存。<br /><br />1).在select into 中使用 forall bulk collect;<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">create</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">table</span><span style="color: #000000; ">&nbsp;test_forall&nbsp;(&nbsp;</span><span style="color: #FF00FF; ">user_id</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; font-weight: bold; ">number</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">10</span><span style="color: #000000; ">),&nbsp;</span><span style="color: #FF00FF; ">user_name</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; font-weight: bold; ">varchar2</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; ">));&nbsp;<br /></span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;ex_edm_esp;&nbsp;<br /></span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;test_forall;<br /></span><span style="color: #0000FF; ">DECLARE</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;TYPE&nbsp;forall_table&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">OF</span><span style="color: #000000; ">&nbsp;test_forall</span><span style="color: #808080; ">%</span><span style="color: #000000; ">ROWTYPE;<br />&nbsp;&nbsp;&nbsp;&nbsp;test_table&nbsp;forall_table;<br /></span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;ID,esp_name&nbsp;</span><span style="color: #0000FF; ">BULK</span><span style="color: #000000; ">&nbsp;COLLECT&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;test_table&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;ex_edm_esp;<br />&nbsp;&nbsp;&nbsp;&nbsp;FORALL&nbsp;idx&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;test_table.first..test_table.last<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;test_forall&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">&nbsp;test_table(idx);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">COMMIT</span><span style="color: #000000; ">;<br />EXCEPTION<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">WHEN</span><span style="color: #000000; ">&nbsp;OTHERS&nbsp;</span><span style="color: #0000FF; ">THEN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">ROLLBACK</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">;</span></div><br />for all 的另一种写法:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">FORALL&nbsp;idx&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;VALUE&nbsp;</span><span style="color: #0000FF; ">OF</span><span style="color: #000000; ">&nbsp;test&nbsp;</span><span style="color: #0000FF; ">table</span><span style="color: #000000; "><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span></div><br />2).在fetch into中使用 forall, indices of, bulk collect;</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">DECLARE</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;TYPE&nbsp;forall_table&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">OF</span><span style="color: #000000; ">&nbsp;test_forall</span><span style="color: #808080; ">%</span><span style="color: #000000; ">ROWTYPE;<br />&nbsp;&nbsp;&nbsp;&nbsp;test_table&nbsp;forall_table;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">CURSOR</span><span style="color: #000000; ">&nbsp;test_cur&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;ID,esp_name&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;ex_edm_esp;<br /></span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">OPEN</span><span style="color: #000000; ">&nbsp;test_cur;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">FETCH</span><span style="color: #000000; ">&nbsp;test_cur&nbsp;</span><span style="color: #0000FF; ">BULK</span><span style="color: #000000; ">&nbsp;COLLECT&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;test_table;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">CLOSE</span><span style="color: #000000; ">&nbsp;test_cur;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;跳过集合中的null元素</span><span style="color: #008080; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;FORALL&nbsp;idx&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;INDICES&nbsp;</span><span style="color: #0000FF; ">OF</span><span style="color: #000000; ">&nbsp;test_table<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;test_forall&nbsp;</span><span style="color: #0000FF; ">VALUES</span><span style="color: #000000; ">&nbsp;test_table(idx);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">COMMIT</span><span style="color: #000000; ">;<br />EXCEPTION<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">WHEN</span><span style="color: #000000; ">&nbsp;OTHERS&nbsp;</span><span style="color: #0000FF; ">THEN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">ROLLBACK</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">;</span></div><br />3).在returning into 之中使用 forall in, value of, bulk collect;<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">DECLARE</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;TYPE&nbsp;t_user_id&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">OF</span><span style="color: #000000; ">&nbsp;test_forall.</span><span style="color: #FF00FF; ">user_id</span><span style="color: #808080; ">%</span><span style="color: #000000; ">TYPE;<br />&nbsp;&nbsp;&nbsp;&nbsp;t1&nbsp;t_user_id;<br />&nbsp;&nbsp;&nbsp;&nbsp;TYPE&nbsp;t_user_name&nbsp;</span><span style="color: #0000FF; ">IS</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">OF</span><span style="color: #000000; ">&nbsp;test_forall.</span><span style="color: #FF00FF; ">user_name</span><span style="color: #808080; ">%</span><span style="color: #000000; ">TYPE;<br />&nbsp;&nbsp;&nbsp;&nbsp;t2&nbsp;t_user_name;<br /></span><span style="color: #0000FF; ">BEGIN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">DELETE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;test_forall&nbsp;RETURNING&nbsp;</span><span style="color: #FF00FF; ">user_id</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #FF00FF; ">user_name</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">BULK</span><span style="color: #000000; ">&nbsp;COLLECT&nbsp;</span><span style="color: #0000FF; ">INTO</span><span style="color: #000000; ">&nbsp;t1,t2;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">FOR</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;t1.first..t1.last<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOOP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(t1(i));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(t2(i));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">&nbsp;LOOP;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">ROLLBACK</span><span style="color: #000000; ">;<br />EXCEPTION<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">WHEN</span><span style="color: #000000; ">&nbsp;OTHERS&nbsp;</span><span style="color: #0000FF; ">THEN</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">ROLLBACK</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">END</span><span style="color: #000000; ">;</span></div><br /><br /><br /><img src ="http://www.blogjava.net/hwpok/aggbug/354241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-13 11:19 <a href="http://www.blogjava.net/hwpok/archive/2011/07/13/354241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>