﻿<?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-庄周梦蝶-随笔分类-数据库技术</title><link>http://www.blogjava.net/killme2008/category/19801.html</link><description>天行健，君子以自强不息</description><language>zh-cn</language><lastBuildDate>Sat, 05 Jun 2010 02:36:00 GMT</lastBuildDate><pubDate>Sat, 05 Jun 2010 02:36:00 GMT</pubDate><ttl>60</ttl><item><title>缓存的分代</title><link>http://www.blogjava.net/killme2008/archive/2010/06/05/322822.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Sat, 05 Jun 2010 02:13:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2010/06/05/322822.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/322822.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2010/06/05/322822.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/322822.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/322822.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; Java的垃圾收集算法是分代的，因为根据2/8原则，80%的Java对象都是速生速灭的，因此将Java Heap划分为new和old，对两个区域采用不同的垃圾回收算法，在new代存活下来的对象转移到old区，这样一来大大提高了Java GC的效率。<br />
&nbsp;&nbsp;&nbsp; 类似分代的思想在很多地方可以用到，分代的本质是根据对象生命周期的不同做区别处理，而不是采取一刀切的方式来提高系统的处理效率。推而广之，比如缓存的使用，现在很多web应用都采用了类似memcached这样的缓存挡在数据库前面分担负载，那么你可以将memcached理解成new代，而数据库是old代。memcached中存储的是查询的热点数据，新鲜火热，但是易失，并且在数据更新的时候被移除；而数据库保存了所有的数据，当缓存没有命中的时候才去查询数据库并存储到缓存。new和old这只是简单的二代划分，事实上现在越来越多的系统是多级缓存，页面缓存、memcached缓存、JVM内部缓存、查询缓存等等直到数据库，从web页面到后端是一个越来越old的过程，缓存对象持续的生命周期逐渐增长直到persist状态。<br />
&nbsp;&nbsp;&nbsp; 具体到JVM内部缓存，我们通常使用LRU算法来实现一个安全有限的缓存，如直接继承LinkedHashMap将可以实现一个简单的LRUMap。基于内存使用上的考虑，我们会给LRUMap设定一个最大的capacity，当数据量超过这个capacity的时候将最近最少访问的元素移除来容纳新的元素。这样处理产生的问题是这个capactity不能设置得太大，因为怕内存不够用，但是不够大的结果可能是命中率没有那么高（跟你的场景相关），那么如何在保存内存安全的前提下更进一步缓存更多的对象呢？答案也是分代。LRUMap默认存储的都是对象的强引用，我们知道Java还有其他3种引用类：soft,weak和<span id="ArticleContent1_ArticleContent1_lblContent"><span style="font-size: 9pt; color: black; font-family: 宋体;"><span lang="EN-US">phantom</span></span></span>。其中Soft引用是在jvm内存不够的时候进行回收，weak引用是在垃圾回收碰到的时候会被回收，显然weak-&gt;soft-&gt;strong三类引用的生命周期可以划分为3个代，我们将可以实现一个可以容纳更多对象的LRUMap：LRUMap设置两个阀值，一个是强引用的最大阀值，这个不能太大，一个是软引用的最大数目，当超过第一个阀值的时候，不是将LRU替换出来的对象移除，而是替代转换为软引用存储；如果软引用的数目也超过阀值，那么可以将软引用这个Map里的对象LRU替换成Weak引用存储或者简单移除。处理元素查询的时候，多了一个步骤，在查询强引用未果的情况下，需要再去查询软引用集合，不过都是O(1)复杂度的查询，不会成为明显的瓶颈。通过将缓存对象分代，我们实现了容难更多缓存对象的目标，大部分对象以强引用的形式存储，被LRU替换出去最近最少访问的元素以软引用存储，它们在内存不够的时候被垃圾回收，保证了内存使用上的安全性。我们在系统中采用了类似这样的缓存，缓存的命中率有了明显的提高。<br />
&nbsp;&nbsp;&nbsp; 题目是《缓存的分代》，其实谈的是分代这种常见的设计或者说技巧，在需要处理大量对象的场景中，不采用一刀切的方式，而是根据对象的特点进行适当的分代处理，带来的效率提升可能是惊人的。<br />
<br />
&nbsp;&nbsp;&nbsp; PS.关于这个<a href="http://www.blogjava.net/killme2008/archive/2010/06/03/322630.html">招聘</a>罗嗦两句，我是这个小组的成员，有人质疑我的目的是为了赚推荐费，这个不能说没有，不过主要目的还是招人，我们很缺人。那么多要求可以归结为一句话：我们找Java基础良好、对并发通信有丰富实践经验、写代码相对靠谱、为人相对靠谱的人。那些要求并非硬性，如果你觉的合适，尽管投简历，谢谢。我们小组做的东西我认为还是有价值的，也很有挑战，淘宝内部的很多应用都在使用，如果你希望你做的产品被成千上万的人每天使用，欢迎加入。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp; <br />
<br /><img src ="http://www.blogjava.net/killme2008/aggbug/322822.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2010-06-05 10:13 <a href="http://www.blogjava.net/killme2008/archive/2010/06/05/322822.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>db2和oracle中的树查询（递归查询）语句-</title><link>http://www.blogjava.net/killme2008/archive/2007/03/20/104895.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Tue, 20 Mar 2007 02:40:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2007/03/20/104895.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/104895.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2007/03/20/104895.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/104895.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/104895.html</trackback:ping><description><![CDATA[在db2和oracle中的对树的递归查询语句。<br /><p>表结构：</p><p><font>create table  MAIN_NODE ( </font></p><p><font>MLA_ID               INTEGER     not null        ,   //</font>节点<font>ID </font></p><p><font>MLA_ROOTID          INTEGER,                      //</font>根节点<font>ID</font></p><p><font>MLA_PARENTID        INTEGER,                      //</font>父节点<font>ID</font></p><p><font>MLA_NAME            VARCHAR2(50),                //</font>节点名称</p><p><font>constraint P_mlaid primary key (MLA_ID) );</font></p><p><font><font><font>MLA_ID   MLA_PARENTID  MLA_ROOTID   MLA_NAME</font></font></font></p><p><font><font><font>1           0                   0             </font>父节点<font>1      </font></font></font></p><p><font><font><font>2           1                   0            </font>（父节点<font>1</font>的<font>/</font>）子节点<font>1    </font></font></font></p><p><font><font><font>3            2                   0            </font>（父节点<font>1</font>的<font>/</font>子节点<font>1</font>的<font>/</font>）孙子节点<font>1</font></font></font></p><p><font><font><font>4           0                   0             </font>父节点<font>2      </font></font></font></p><p><font><font><font>5           4                   0            </font>（父节点<font>2</font>的<font>/</font>）子节点<font>1    </font></font></font></p><p><font><font>树结构直观图：</font></font></p><p><font><font><font>根节点（<font>0</font>）<br /></font><font>     父节点<font>1</font>（<font>1</font>）<br /></font><font>           （父节点<font>1</font>的<font>/</font>）子节点<font>1</font>（<font>2</font>）<font>  <br /></font></font><font><font>                     </font>（父节点<font>1</font>的<font>/</font>子节点<font>1</font>的<font>/</font>）孙子节点<font>1</font>（<font>3</font>）<br /></font><font>     父节点<font>2</font>（<font>4</font>）<br /></font><font>           （父节点<font>2</font>的<font>/</font>）子节点<font>1</font>（<font>5</font>）</font></font></font></p><font><font><font>语句要求的功能：实现给出一个父节点<font>id</font>然后得到该父节点下的所有子节点的信息</font><font><strong><font>Db2 </font></strong><strong>的查询语句：<br /></strong></font><font><strong></strong></font></font></font><p><font><font><font><strong><font>WITH  RPL (mla_parentid, mla_id, mla_name) AS </font></strong></font></font></font></p><p><font><font><font><strong><font>( </font></strong></font></font></font></p><p><font><font><font><strong><font>SELECT ROOT.mla_parentid, ROOT.mla_id, ROOT.mla_name FROM main_node ROOT WHERE ROOT.mla_id = ? </font></strong></font></font></font></p><p><font><font><font><strong><font>UNION  ALL </font></strong></font></font></font></p><p><font><font><font><strong><font>SELECT
CHILD.mla_parentid, CHILD.mla_id, CHILD.mla_name FROM RPL PARENT,
main_node CHILD WHERE PARENT.mla_parentid = CHILD.mla_id</font></strong></font></font></font></p><p><font><font><font><strong><font> ) </font></strong></font></font></font></p><p><font><font><font><strong><font>SELECT DISTINCT mla_parentid, mla_id, mla_name FROM RPL ORDER BY mla_parentid, mla_id, mla_name</font></strong></font></font></font></p><font><font><font><strong><font><font>让我们研究这个查询语句：<br /><ul><li>RPL 作为一个具有以下三列的虚拟表：<font>mla_parentid, mla_id</font> 和 <font>mla_name</font>。 <br /></li><li>WITH 子句内的第一个 SELECT 语句是初始化表。它只执行一次。它的结果形成虚拟表的初始内容以作为递归的种子。在上面的示例中，种子是 <font>mla_id</font> 为 任意传进去的参数 的一行或多行。 <br /></li><li>第
二个 SELECT 语句执行多次。将种子作为输入（JOIN 中的辅助表）传递给第二个 SELECT 语句以产生下一个行集合。将 JOIN
的结果添加（UNION ALL）到虚拟表的当前内容中，并放回到其中以形成用于下一次传递的输入。只要有行产生，这个过程就会继续。 <br /></li><li>如果期望，虚拟表上最后的 SELECT 允许我们选择递归查询所产生的所有行或仅部分行。<br /></li></ul><p><strong><font>Oracle</font></strong><strong>的查询语句：<br /></strong></p><p><font>   select mla_parentid, mla_id, mla_name from main_node </font></p><p><font>start with mla_id=? connect by prior mla_id=mla_parentid</font></p>让我们研究这个查询语句：<br /><ul><li>  本语句实际上是 start with ...connect by 的用法， start with 后面所跟的就是就是递归的种子。在上面的示例中，种子是 <font>mla_id</font> 为 任意传进去的参数<br /></li><li><font>connect by </font>后面的"<font>prior</font>"<font></font>如果缺省：则只能查询到符合条件的起始行，并不进行递归查询；<br /></li><li><font>connect by prior </font>后面所放的字段是有关系的，它指明了查询的方向。如果后面放的是<font> mla_id=mla_parentid </font>则表明从本节点查向叶子节点；如果后面放的是<font> mla_parentid = mla_id</font>则表明从根节点查向本节点；</li></ul></font></font></strong></font></font></font><img src ="http://www.blogjava.net/killme2008/aggbug/104895.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2007-03-20 10:40 <a href="http://www.blogjava.net/killme2008/archive/2007/03/20/104895.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle table-lock的5种模式</title><link>http://www.blogjava.net/killme2008/archive/2007/03/05/101911.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Mon, 05 Mar 2007 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2007/03/05/101911.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/101911.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2007/03/05/101911.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/101911.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/101911.html</trackback:ping><description><![CDATA[Oracle中的锁定可以分为几类：DML lock（data lock），DDL lock（dictionary lock)和internal lock/latch。<br />DML lock又可以分为row lock和table lock。row lock在select.. for update/insert/update/delete时隐式自动产生，而table lock除了隐式产生，也可以调用lock table <table_name> in </table_name>name来显示锁定。 <p>如果不希望别的session lock/insert/update/delete表中任意一行，只允许查询，可以用lock table table_name in exclusive mode。(X)这个锁定模式级别最高，并发度最小。<br /><br />如果允许别的session查询或用select for update锁定记录，不允许insert/update/delete，可以用lock table table_name in share row exclusive mode。(SRX)<br /><br />如
果允许别的session查询或select for update以及lock table table_name in share
mode，只是不允许insert/update/delete，可以用lock table table_name in share
mode。(share mode和share row exclusive mode的区别在于一个是非抢占式的而另一个是抢占式的。进入share
row exclusive mode后其他session不能阻止你insert/update/delete，而进入share
mode后其他session也同样可以进入share mode，进而阻止你对表的修改。(S)<br /><br />还有两种锁定模式，row share(RS)和row exclusive(RX)。他们允许的并发操作更多，一般直接用DML语句自动获得，而不用lock语句。</p> 详细参考concepts文档中的"Type Of Locks"：<a href="http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96524/c21cnsis.htm#2937">http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96524/c21cnsis.htm#2937</a><img src ="http://www.blogjava.net/killme2008/aggbug/101911.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2007-03-05 14:34 <a href="http://www.blogjava.net/killme2008/archive/2007/03/05/101911.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>彻底卸载oracle</title><link>http://www.blogjava.net/killme2008/archive/2007/03/02/101491.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Fri, 02 Mar 2007 08:11:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2007/03/02/101491.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/101491.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2007/03/02/101491.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/101491.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/101491.html</trackback:ping><description><![CDATA[		oracle的卸载是一个比较麻烦的事，如果没有成功卸载或者卸载的不干净，往往会影响下次的安装。正确的步骤如下：<br /><br /><ol><li>关闭所有oracle的服务和程序</li><li>选择开始| 程序|oracle Installation Products命令，运行Universal Installer，弹出欢迎对话框</li><li>单机 卸载产品 按钮，弹出Inventory对话框</li><li>选中Inventroy对话框中的所有节点，点击删除，确认即可</li><li>选
择 开始|运行
输入regedit并按ENTER键，选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE，删除此象，然后选择
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services，滚动此列表，删除与oracle有关的所
有选项。</li><li>从桌面上、STARTUP和程序菜单中删除所有ORACLE的组和图标。</li><li>重启系统。</li><li>删除包括文件在内的安装目录。至此ORACLE的全部卸载完成。</li></ol><img src ="http://www.blogjava.net/killme2008/aggbug/101491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2007-03-02 16:11 <a href="http://www.blogjava.net/killme2008/archive/2007/03/02/101491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle sql语句优化（转载）</title><link>http://www.blogjava.net/killme2008/archive/2007/03/02/101434.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Fri, 02 Mar 2007 03:57:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2007/03/02/101434.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/101434.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2007/03/02/101434.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/101434.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/101434.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: oracle sql语句优化的常见原则&nbsp;&nbsp;<a href='http://www.blogjava.net/killme2008/archive/2007/03/02/101434.html'>阅读全文</a><img src ="http://www.blogjava.net/killme2008/aggbug/101434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2007-03-02 11:57 <a href="http://www.blogjava.net/killme2008/archive/2007/03/02/101434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle数据库的ORA-00257故障解决过程(转载）</title><link>http://www.blogjava.net/killme2008/archive/2007/03/02/101407.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Fri, 02 Mar 2007 03:09:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2007/03/02/101407.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/101407.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2007/03/02/101407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/101407.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/101407.html</trackback:ping><description><![CDATA[在导入一个2G的备份文件时，数据库报ORA-00257故障，找到这篇文章。转自http://dev.yesky.com/438/2525938.shtml<br /><br /><b>概述</b>：<br /><br />　　Oracle数据库是目前业界最常用的大型数据库系统，我在实际项目中遇到出现ORA-00257错误（空间不足错误），通过查找资料，绝大部分说这是由于归档日志太多，占用了全部的<a href="http://diy.yesky.com/harddisk/" class="bluekey" target="_blank">硬盘</a>剩余空间导致的，通过简单删除日志或加大存储空间就能够解决。但是我在Oracle 10g上发现，存储空间还有很大，却也报这个错误。原来是Oracle 10g中新的特性，对Flash Recovery的管理导致的。 <br /><br />　　<b>1、软硬件环境</b><br /><br />　　<a href="http://server.chinabyte.com/" class="bluekey" target="_blank">服务器</a>HP Proliant DL580G4（Intel Xeon 3.16GHz/4GB/ 72.8*4/RAID4)<br /><br />　　操作系统Red Flag DC Server release 5.0 (Trinity) for x86-64 Linux<br /><br />　　数据库Oracle 10.2.0.1.0<br /><br />　　<b>2、问题现象</b><br /><br />　　数据库系统已经试运行了半个多月，在7月24日晚上连接数据库后做数据更新时出现ORA-00257错误，如下图。<br /><br /><table align="center" width="90%"><tbody><tr><td><div align="center"><img style="border-color: rgb(0, 0, 0);" src="http://dev.yesky.com/imagelist/06/32/04e4v180a835.png" border="1" /></div></td></tr></tbody></table><br />　　提示归档错误，通过查找ORACLE错误代码，解释为硬盘空间不足，需要删除归档日志增加空间，但是服务器可用空间200GB，目前只用了10GB左右，这是为什么呢？<br /><br />　　<b>3、诊断过程</b>：<br /><br />　　1）查看ORACLE数据库归档日志情况<br /><br /><table align="center" bgcolor="#e7e9e9" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>[root@hrmsdb /]# cd /oracle/flash_recovery_area/HKCHR/archivelog<br /><br />[root@hrmsdb archivelog]# ls<br /><br />2006_07_04 2006_07_13 2006_07_17 2006_07_20 2006_07_23<br /><br />2006_07_11 2006_07_14 2006_07_18 2006_07_21 2006_07_24<br /><br />2006_07_12 2006_07_15 2006_07_19 2006_07_22 2006_07_25<br /><br />[root@hrmsdb archivelog]# cd 2006_07_25<br /><br />[root@hrmsdb 2006_07_25]# ls<br /><br />[root@hrmsdb 2006_07_25]# cd ../2006_07_24<br /><br />[root@hrmsdb 2006_07_24]# ls<br /><br />o1_mf_1_92_2d933vgb_.arc o1_mf_1_96_2d954ns7_.arc o1_mf_1_98_2d969d5h_.arc<br /><br />o1_mf_1_95_2d9537cs_.arc o1_mf_1_97_2d956km0_.arc</td></tr></tbody></table><br />　　说明在出现问题之前数据库归档处理一直是正常的。<br /><br />　　2）查看数据库REDOLOG情况<br /><br /><table align="center" bgcolor="#e7e9e9" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>[oracle@hrmsdb ~]$ sqlplus /nolog<br /><br />SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 7月 25 10:44:18 2006<br /><br />Copyright (c) 1982, 2005, Oracle. All rights reserved.<br /><br />SQL&gt; connect / as sysdba<br /><br />已连接。<br /><br />SQL&gt; select * from v$log;<br /><br />GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME<br /><br />---------- ---------- ---------- ---------- ---------- --- --------------------------------------- --------------<br /><br />1 1 101 52428800 1 NO CURRENT 3621973 24-7月 -06<br /><br />2 1 99 52428800 1 NO INACTIVE 3600145 24-7月 -06<br /><br />3 1 100 52428800 1 NO INACTIVE 3611932 24-7月 -06</td></tr></tbody></table><br />　　发现ARC状态为NO，表示系统没法自动做归档。<br /><br />　　3）手工切换日志<br /><br /><table align="center" bgcolor="#e7e9e9" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>SQL&gt; alter system switch logfile;<br /><br />alter system switch logfile<br /><br />*<br />第 1 行出现错误:</td></tr></tbody></table><br />　　ORA-01013: 用户请求取消当前的操作<br /><br />　　在等待长时间没反应后，中断操作，手工切换日志没有成功。<br /><br />　　4）查看Oracle数据库后台归档服务进程<br /><br /><table align="center" bgcolor="#e7e9e9" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>[oracle@hrmsdb ~]$ ps -ef|grep oracle<br /><br />oracle 4601 1 0 Jul11 ? 00:00:04 /oracle/product/10.2.0/db_1/bin/<br /><br />tnslsnr LISTENER -inherit<br /><br />oracle 5025 1 0 Jul11 ? 00:00:00 /usr/bin/ssh-agent -s<br /><br />oracle 20923 1 0 Jul24 ? 00:00:01 ora_pmon_hkchr<br /><br />oracle 20925 1 0 Jul24 ? 00:00:00 ora_psp0_hkchr<br /><br />oracle 20927 1 0 Jul24 ? 00:00:00 ora_mman_hkchr<br /><br />oracle 20929 1 0 Jul24 ? 00:00:01 ora_dbw0_hkchr<br /><br />oracle 20931 1 0 Jul24 ? 00:01:07 ora_lgwr_hkchr<br /><br />oracle 20933 1 0 Jul24 ? 00:00:05 ora_ckpt_hkchr<br /><br />oracle 20935 1 0 Jul24 ? 00:00:01 ora_smon_hkchr<br /><br />oracle 20937 1 0 Jul24 ? 00:00:00 ora_reco_hkchr<br /><br />oracle 20939 1 0 Jul24 ? 00:00:00 ora_cjq0_hkchr<br /><br />oracle 20941 1 0 Jul24 ? 00:00:01 ora_mmon_hkchr<br /><br />oracle 20943 1 0 Jul24 ? 00:00:05 ora_mmnl_hkchr<br /><br />oracle 20945 1 0 Jul24 ? 00:00:00 ora_d000_hkchr<br /><br />oracle 20947 1 0 Jul24 ? 00:00:00 ora_s000_hkchr<br /><br />oracle 20953 1 0 Jul24 ? 00:09:41 ora_arc0_hkchr<br /><br />oracle 20955 1 1 Jul24 ? 00:10:29 ora_arc1_hkchr<br /><br />oracle 20959 1 0 Jul24 ? 00:00:00 ora_qmnc_hkchr<br /><br />oracle 20967 1 0 Jul24 ? 00:00:00 ora_q000_hkchr<br /><br />oracle 20969 1 0 Jul24 ? 00:00:00 ora_q001_hkchr<br /><br />oracle 21715 1 0 Jul24 ? 00:00:19 oraclehkchr (LOCAL=NO)<br /><br />oracle 21765 1 0 Jul24 ? 00:00:00 ora_j000_hkchr<br /><br />oracle 21816 1 0 Jul24 ? 00:00:00 ora_j001_hkchr<br /><br />oracle 21832 1 0 Jul24 ? 00:00:00 ora_j002_hkchr<br /><br />oracle 21839 1 0 Jul24 ? 00:00:00 ora_j003_hkchr<br /><br />oracle 21859 1 0 Jul24 ? 00:00:00 ora_j004_hkchr<br /><br />oracle 21861 1 0 Jul24 ? 00:00:00 ora_j005_hkchr<br /><br />oracle 21886 1 0 Jul24 ? 00:00:00 ora_j006_hkchr<br /><br />oracle 21888 1 0 Jul24 ? 00:00:00 ora_j007_hkchr<br /><br />root 23187 23186 0 10:39 ? 00:00:00 login -- oracle<br /><br />oracle 23188 23187 0 10:39 pts/0 00:00:00 -bash<br /><br />oracle 23216 23188 0 10:39 pts/0 00:00:00 sqlplus<br /><br />oracle 23217 23216 0 10:39 ? 00:00:00 oraclehkchr (DESCRIPTION=(LOCAL=<br /><br />YES)(ADDRESS=(PROTOCOL=beq)))<br /><br />root 23224 23223 0 10:40 ? 00:00:00 login -- oracle<br /><br />oracle 23225 23224 0 10:40 pts/1 00:00:00 -bash<br /><br />oracle 23310 23225 0 10:46 pts/1 00:00:00 ps -ef<br /><br />oracle 23311 23225 0 10:46 pts/1 00:00:00 grep oracle<br /><br />[oracle@hrmsdb ~]$<br /><br />后台进程都正常运行。</td></tr></tbody></table><br />　　5）查看FLASH_RECOVERY_AREA空间使用情况<br /><br /><table align="center" bgcolor="#e7e9e9" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>[root@hrmsdb /]# cd /oracle<br /><br />[root@hrmsdb oracle]# ls<br /><br />admin flash_recovery_area oraInventory product<br /><br />[root@hrmsdb oracle]# du -a -k flash_recovery_area<br /><br />4 flash_recovery_area/HKCHR/onlinelog<br /><br />42456 flash_recovery_area/HKCHR/archivelog/2006_07_15/o1_mf_1_74_2cj1h1jz_.arc<br /><br />……………….<br /><br />42448 flash_recovery_area/HKCHR/archivelog/2006_07_14/o1_mf_1_68_2cfzwwvt_.arc<br /><br />512560 flash_recovery_area/HKCHR/archivelog/2006_07_14<br /><br />1469224 flash_recovery_area/HKCHR/archivelog<br /><br />6988 flash_recovery_area/HKCHR/backupset/2006_07_04/o1_mf_ncsnf_TAG20060704T1<br /><br />74229_2bng1o0b_.bkp<br /><br />876916 flash_recovery_area/HKCHR/backupset/2006_07_04/o1_mf_nnndf_TAG20060704T1<br /><br />74229_2bng0cx4_.bkp<br /><br />883908 flash_recovery_area/HKCHR/backupset/2006_07_04<br /><br />883912 flash_recovery_area/HKCHR/backupset<br /><br />2353144 flash_recovery_area/HKCHR<br /><br />2353148 flash_recovery_area<br /><br />[root@hrmsdb oracle]#<br /><br /><br />FLASH_RECOVERY_AREA空间使用了2.35GB</td></tr></tbody></table><br />　　6）查看FLASH_RECOVERY_AREA空间中各部分使用情况<br /><br /><table align="center" bgcolor="#e7e9e9" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>SQL&gt; select * from v$recovery_file_dest;<br /><br />NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES<br /><br />------------------------------------------------------------------------------------------------------------------<br /><br />/oracle/flash_recovery_area 2147483648 2134212608 0 35<br /><br />SQL&gt; select * from v$flash_recovery_area_usage;<br /><br />FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES<br /><br />------------ ------------------ ------------------------- ---------------- -------------- -------------- -------------<br /><br />CONTROLFILE 0 0 0<br /><br />ONLINELOG 0 0 0<br /><br />ARCHIVELOG 69.97 0 40<br /><br />BACKUPPIECE 30.01 0 2<br /><br />IMAGECOPY 0 0 0<br /><br />FLASHBACKLOG 0 0 0<br /><br />已选择6行。</td></tr></tbody></table><br />　　发现ARCHIVELOG占近70％，BACKUPPIRCR占了30％，这样FLASH_RECOVERY_AREA空间的空间已经被完全占据了。<br /><b>4、解决过程</b><br /><br />　　根据数据库目前可用存储空间为200GB、FLASH_RECOVERY_AREA空间为2GB的实际情况，把FLASH_RECOVERY_AREA的空间修改为20GB。<br /><br /><table align="center" bgcolor="#e7e9e9" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>SQL&gt; alter system set DB_RECOVERY_FILE_DEST_SIZE=20g;<br /><br />系统已更改。<br /><br />SQL&gt; select * from v$recovery_file_dest;<br /><br />------------------------------------------------------- ---------- -----------------------------------<br /><br />NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES<br /><br />----------- ---------- ----------------- ------------- -------------- ---------- ---------- ------------<br /><br />/oracle/flash_recovery_area 2.1475E+10 2264587776 0 38</td></tr></tbody></table><br />　　这时再查看日志的状态，发现REDO LOG处于正常的归档状态。<br /><br /><table align="center" bgcolor="#e7e9e9" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>SQL&gt; select * from v$log;<br /><br />GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME <br /><br />---------- ---------- ---------- ---------- ---------- --- -------------------------------------------- --------------<br /><br />1 1 101 52428800 1 YES ACTIVE 3621973 24-7月 -06<br /><br />2 1 102 52428800 1 NO CURRENT 3650399 25-7月 -06<br /><br />3 1 100 52428800 1 YES INACTIVE 3611932 24-7月 -06<br /><br />SQL&gt; select * from v$flash_recovery_area_usage;<br /><br />FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES<br /><br />------------ ------------------ ------------------------- ---------------<br /><br />CONTROLFILE 0 0 0<br /><br />ONLINELOG 0 0 0<br /><br />ARCHIVELOG 7.6 0 43<br /><br />BACKUPPIECE 4.21 0 2<br /><br />IMAGECOPY 0 0 0<br /><br />FLASHBACKLOG 0 0 0<br /><br />已选择6行。<br /><br />SQL&gt;</td></tr></tbody></table><br />　　<strong>5、小结</strong><br /><br />　　造成本次故障的原因由两方面同时发生所造成的：<br /><br />　　·其一是Flash_Recovery_Area空间缺省安装时比较小，只有2GB，容易用完；<br /><br />　　·其二是由于采用归档方式通过Veritas备份，由于备份软件没有运行，造成归档日志没有及时删除。<br /><br />　　从本次故障解决处理中，我们可以得出经验教训：<br /><br />　　·Oracle 10g数据库物理空间管理方式与以前Oracle发生了变化，对归档日志所在的Flash_Recovery_Area空间进行了另外限制；<br />　<br />　　·对数据库系统管理员要对Oracle数据库归档日志、备份软件运行状况定期检查，提前发现、处理可能发生的故障。<br /><img src ="http://www.blogjava.net/killme2008/aggbug/101407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2007-03-02 11:09 <a href="http://www.blogjava.net/killme2008/archive/2007/03/02/101407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle错误备忘（ORA-00354，ORA-00353和ORA-00312的处理方法）</title><link>http://www.blogjava.net/killme2008/archive/2007/03/02/101401.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Fri, 02 Mar 2007 02:51:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2007/03/02/101401.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/101401.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2007/03/02/101401.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/101401.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/101401.html</trackback:ping><description><![CDATA[    昨天根据客户要求，增加了一个jasperreport实现的报表打印功能，然后在测试服务器上测试通过，因为看到测试数据库上的数据都太“旧”了，我就从正式环境下导出了OA系统的数据，导出操作一切顺利，在导入过程中却由于网络问题中断（因为我是远程导入，备份文件在我的机器上）。再次连接数据库，一直报错，说什么只允许内部连接。远程重启了下oracle服务，登录数据库还是不行，发现数据库根本没打开，通过sqlplus执行<br />    <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">alter</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">database</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">open</span><span style="color: rgb(0, 0, 0);">;</span></div>命令，报错：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">ORA</span><span style="color: rgb(128, 128, 128);">-</span><span style="color: rgb(128, 0, 0); font-weight: bold;">16014</span><span style="color: rgb(0, 0, 0);">: 日志 </span><span style="color: rgb(128, 0, 0); font-weight: bold;">1</span><span style="color: rgb(0, 0, 0);"> 的序列号 </span><span style="color: rgb(128, 0, 0); font-weight: bold;">680</span><span style="color: rgb(0, 0, 0);"> 未归档, 没有可用的目的地<br />ORA</span><span style="color: rgb(128, 128, 128);">-</span><span style="color: rgb(128, 0, 0); font-weight: bold;">00312</span><span style="color: rgb(0, 0, 0);">: 联机日志 </span><span style="color: rgb(128, 0, 0); font-weight: bold;">1</span><span style="color: rgb(0, 0, 0);"> 线程 </span><span style="color: rgb(128, 0, 0); font-weight: bold;">1</span><span style="color: rgb(0, 0, 0);">: </span><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">alter</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">database</span><span style="color: rgb(0, 0, 0);"> clear unarchived logfile </span><span style="color: rgb(255, 0, 0);">'</span><span style="color: rgb(255, 0, 0);">D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG</span><span style="color: rgb(255, 0, 0);">'</span></div><span style="color: rgb(255, 0, 0);"></span></div><br />看情况是日志文件出错，幸好是测试服务器，把我这个对oracle管理一窍不通的家伙急坏了。马上baidu了下错误代码，找到一篇文章：<br /><br /><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;"><font size="3">在日志文件损坏或者<span lang="EN-US">dump</span>这些损坏的日志文件的时候，通常回收到类似下面的错误：<span lang="EN-US"><o:p></o:p></span></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">ORA-00354: corrupt redo log block header<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">ORA-00353: log corruption near block 3740 change 0 time 04/11/2006 13:49:56<span style="">   </span><o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;" lang="PT-BR"><font size="3">ORA-00312: online log 1 thread 1: '/oracle/oradata/TSMISC02/redo01.log'<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;"><font size="3">或者：<span lang="PT-BR"><o:p></o:p></span></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="PT-BR"><font size="3">sys@TSMISC02&gt; ALTER SYSTEM DUMP LOGFILE '/oracle/oradata/TSMISC02/redo01.log'; <o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="PT-BR"><font size="3">ALTER SYSTEM DUMP LOGFILE '/oracle/oradata/TSMISC02/redo01.log'<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">*<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">ERROR at line 1:<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">ORA-00354: corrupt redo log block header<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">ORA-00353: log corruption near block 3740 change 6918597 time 04/10/2006 23:53:24<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="PT-BR"><font size="3">ORA-00334: archived log: '/oracle/oradata/TSMISC02/redo01.log'<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">Elapsed: 00:00:03.36<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><font size="3"><span style="font-family: 宋体;" lang="EN-US">sys@TSMISC02&gt;</span><span style="font-size: 9pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">这里首先介绍一下<span lang="EN-US">oracle</span>使用日志文件的策略。</span><span style="font-family: 宋体;">每一个数据库至少有两个或多个日志文件组（</span><span lang="EN-US"><font face="Times New Roman">redo log group</font></span><span style="font-family: 宋体;">），每个组中至少有一个日志成员（</span><span lang="EN-US"><font face="Times New Roman">redo log member</font></span><span style="font-family: 宋体;">）。日志文件的主要功能是真实完整的记录对数据库作的全部修改。在出现故障时，如果不能将修改数据永久地写入数据文件，则系统将利用日志前滚来恢复数据库数据文件。日志文件主要是保护数据库以防止故障。</span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">如果</span><span lang="EN-US"><font face="Times New Roman">LGWR </font></span><span style="font-family: 宋体;">至少能够访问一个组内的某一个成员，那么</span><span lang="EN-US"><font face="Times New Roman">oracle</font></span><span style="font-family: 宋体;">就会对这个组内的可访问成员继续照常进行读写操作，也就是说，</span><span lang="EN-US"><font face="Times New Roman">LGWR </font></span><span style="font-family: 宋体;">将忽略组内的不可用成员。如果在日志切换时</span><span lang="EN-US"><font face="Times New Roman">LGWR </font></span><span style="font-family: 宋体;">无法访问下一个组的所有成员或者损坏的日志文件时改组中日志成员，数据库的正常操作就无法进行了。这也就是</span><span lang="EN-US"><font face="Times New Roman">oracle</font></span><span style="font-family: 宋体;">常说的，为了防止日志文件的故障或丢失，强烈建议镜象日志</span><span lang="EN-US"><font face="Times New Roman">(mirrored redo log)</font></span><span style="font-family: 宋体;">，即，在不同磁盘上维护至少两个或多个日志文件（</span><span lang="EN-US"><font face="Times New Roman">redo log member</font></span><span style="font-family: 宋体;">）副本的作用——只要组内有一个可用的成员，</span><span lang="EN-US"><font face="Times New Roman">oracle</font></span><span style="font-family: 宋体;">就会继续“正常”操作。</span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;"><font size="3">回到这里，如果数据库发生日志文件的上述损坏，不管是哪种原因造成的，解决方法无外乎是使用完好的文件恢复已经损坏的文件，或者初始化损坏的文件组等等（日志文件的故障处理不做这里的重点介绍，我将会在其他的文章中逐一说明和举例）。<span lang="PT-BR"><o:p></o:p></span></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><font size="3"><span style="font-family: 宋体;">我们这里主要是使用了</span><span style="font-family: 宋体;" lang="EN-US">_disable_logging</span><span style="font-family: 宋体;">＝<span lang="EN-US">true</span>这个隐含参数（实际性能故障诊断时，你可以通过<span lang="EN-US">alert.log</span>找到相关信息）造成了归档数据库中，所有日志不能归档，最终数据库不能继续操作的问题，因此解决方法就是：<span lang="EN-US"><o:p></o:p></span></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 20pt;"><span style="font-family: 宋体;"><font size="3">（<span lang="EN-US">a</span>）如果是使用了隐含参数，那么去掉这个隐含参数：<span lang="EN-US"><o:p></o:p></span></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3"><span style="">    </span>alter system set "_disable_logging"=false scope=both;<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 20pt;"><span style="font-family: 宋体;"><font size="3">（<span lang="EN-US">b</span>）然后，初始化损坏的<span lang="EN-US">redo log</span>：<span lang="EN-US"><o:p></o:p></span></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: 21pt; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">alter database clear unarchived logfile '&lt;logilename&gt;';<span style="">  </span><o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;"><font size="3">例如：<span lang="EN-US"><o:p></o:p></span></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">sys@TSMISC02&gt; <span style="color: blue;">alter system set "_disable_logging"=false scope=both;<o:p></o:p></span></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">System altered.<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">Elapsed: 00:00:00.01<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">sys@TSMISC02&gt;<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">sys@TSMISC02&gt; alter database<span style="color: blue;"> clear unarchived logfile </span>'/oracle/oradata/TSMISC02/redo02.log';<span style="">  </span><o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">Database altered.<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">Elapsed: 00:00:00.18<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">sys@TSMISC02&gt; alter database <span style="color: blue;">clear unarchived logfile </span>'/oracle/oradata/TSMISC02/redo03.log';<span style="">  </span><o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">Database altered.<o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; background: rgb(204, 204, 204) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20pt;"><span style="font-family: 宋体;" lang="EN-US"><font size="3">Elapsed: 00:00:00.17<o:p></o:p></font></span></p><font size="3"><span style="font-family: 宋体;" lang="EN-US">sys@TSMISC02&gt;<br /><br />OK,马上执行命令：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">alter</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">database</span><span style="color: rgb(0, 0, 0);"> clear unarchived logfile </span><span style="color: rgb(255, 0, 0);">'</span><span style="color: rgb(255, 0, 0);">D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG</span><span style="color: rgb(255, 0, 0);">'<br /><br /></span></div>再打开数据库，一切正常，重新导入，问题解决。<br /><br />我需要加强下对oracle基本故障处理方面知识的学习了。<br /><br /></span></font><img src ="http://www.blogjava.net/killme2008/aggbug/101401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2007-03-02 10:51 <a href="http://www.blogjava.net/killme2008/archive/2007/03/02/101401.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle中使用SQL递归语句 </title><link>http://www.blogjava.net/killme2008/archive/2007/02/11/99289.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Sun, 11 Feb 2007 12:02:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2007/02/11/99289.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/99289.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2007/02/11/99289.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/99289.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/99289.html</trackback:ping><description><![CDATA[场景：常见的领导关系树结构，知道某一节点ID，要查出此节点的所有下级（直接下级和间接下级），此时需要使用SQL递归语句。<br /><br />oracle中的递归语句：  
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">start   </span><span style="COLOR: #0000ff">with</span><span style="COLOR: #000000">   <img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" />  connect   </span><span style="COLOR: #0000ff">by</span><span style="COLOR: #000000">   prior  <img src="http://www.blogjava.net/images/dot.gif" />.</span></div><br /><br />例子：<br /><br /><span style="FONT-WEIGHT: bold"> pid  id</span><br />  a   b   <br />  a   c     <br />  a   e   <br />  b   b1   <br />  b   b2   <br />  c   c1   <br />  e   e1   <br />  e   e3   <br />  d   d1   <br />    <br />  指定<span style="FONT-WEIGHT: bold">pid</span>=a，选出   <br />  a   b   <br />  a   c     <br />  a   e   <br />  b   b1   <br />  b   b2   <br />  c   c1   <br />  e   e1   <br />  e   e3  <br />SQL语句：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">  </span><span style="COLOR: #0000ff">select</span><span style="COLOR: #000000">   parent,child   </span><span style="COLOR: #0000ff">from</span><span style="COLOR: #000000">   test   start   </span><span style="COLOR: #0000ff">with</span><span style="COLOR: #000000">   pid</span><span style="COLOR: #808080">=</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">a</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">   <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  connect   </span><span style="COLOR: #0000ff">by</span><span style="COLOR: #000000">   prior   id</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">pid </span></div><br /><img src ="http://www.blogjava.net/killme2008/aggbug/99289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2007-02-11 20:02 <a href="http://www.blogjava.net/killme2008/archive/2007/02/11/99289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle中的合并查询 </title><link>http://www.blogjava.net/killme2008/archive/2007/02/11/99287.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Sun, 11 Feb 2007 12:01:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2007/02/11/99287.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/99287.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2007/02/11/99287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/99287.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/99287.html</trackback:ping><description><![CDATA[
		<p>为了合并多个select语句的查询结果,可以使用集合操作符UNION,UNION ALL,INTERSECT和MINUS.语法如下:</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">SELECT语句1 </span>
				<span style="COLOR: #ff0000">[</span>
				<span style="COLOR: #ff0000">UNION | UNION ALL | INTERSECT | MINUS</span>
				<span style="COLOR: #ff0000">]</span>
				<span style="COLOR: #000000"> SELECT语句2</span>
		</div>
		<p> </p>
		<p>使用集合操作符有以下一些限制:</p>
		<p>.对于LOB,VARRAY,嵌套表类来说，集合操作符无效</p>
		<p>.对于LONG型,UNION ALL,INTERSECT和MINUS无效</p>
		<p>.如果选择列表包含了表达式,必须指定别名</p>
		<p>1。UNION，用于获取两个结果集的并集，会自动去掉结果集中的重复行，并会以第一列的结果进行排序，例：</p>
		<p>  </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> employee </span>
				<span style="COLOR: #0000ff">union</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> employee;</span>
		</div>
		<p> </p>
		<p>2。UNION ALL，与UNION相似，不同的是UNION ALL不会自动去处重复行，也不会以任何列排序</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">  </span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> employee </span>
				<span style="COLOR: #0000ff">union</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">all</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> employee;</span>
		</div>
		<p> </p>
		<p>3。INTERSECT，用于获取两个结果集的交集，并且以第一列排序，如：</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> employee </span>
				<span style="COLOR: #0000ff">intersect</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> employee </span>
				<span style="COLOR: #0000ff">where</span>
				<span style="COLOR: #000000"> id</span>
				<span style="COLOR: #808080">=</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #ff0000">1</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #000000">;</span>
		</div>
		<p> </p>
		<p>4。MINUS，用于获取结果集的差集（或者说补集），显示第一个结果集存在的，第2个结果集不存在的数据：</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> employee minus </span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> employee </span>
				<span style="COLOR: #0000ff">where</span>
				<span style="COLOR: #000000"> id</span>
				<span style="COLOR: #808080">=</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #ff0000">1</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #000000">;</span>
		</div>
		<p> </p>
		<p>注意事项：</p>
		<p>1。两个选择列表必须完全一致</p>
		<p>2。可以连续使用集合操作符，这些操作符拥有相同优先级，多个操作符存在时，从左向右执行，如：</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">SQL</span>
				<span style="COLOR: #808080">&gt;</span>
				<span style="COLOR: #000000">  </span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> employee minus </span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> employee </span>
				<span style="COLOR: #0000ff">where</span>
				<span style="COLOR: #000000"> id</span>
				<span style="COLOR: #808080">=</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: #0000ff">union</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> employee </span>
				<span style="COLOR: #0000ff">where</span>
				<span style="COLOR: #000000"> id</span>
				<span style="COLOR: #808080">=</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #ff0000">1</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        ID NAME           SALARY EMAIL<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008080">--</span>
				<span style="COLOR: #008080">-------- ---------- ---------- ------------------------------</span>
				<span style="COLOR: #008080">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">         </span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">1</span>
				<span style="COLOR: #000000"> love             </span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">3100</span>
				<span style="COLOR: #000000"> fasda<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">2</span>
				<span style="COLOR: #000000"> love             </span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">4100</span>
				<span style="COLOR: #000000"> killme2008</span>
				<span style="COLOR: #008000">@gmail</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>
				<br /> </p>
<img src ="http://www.blogjava.net/killme2008/aggbug/99287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2007-02-11 20:01 <a href="http://www.blogjava.net/killme2008/archive/2007/02/11/99287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PL/SQL学习笔记（五） </title><link>http://www.blogjava.net/killme2008/archive/2007/02/11/99286.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Sun, 11 Feb 2007 11:59:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2007/02/11/99286.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/99286.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2007/02/11/99286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/99286.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/99286.html</trackback:ping><description><![CDATA[
		<div class="item-content">
				<p>编写控制结构：顺序结构，条件结构，循环结构</p>
				<p>一。条件语句：</p>
				<p>1。与delphi或者java，或者其他任何语言的条件语句基本一样咯：</p>
				<p>单条件：</p>
				<p>IF condition THEN</p>
				<p>  ......</p>
				<p>END IF;</p>
				<p>双条件：</p>
				<p>IF condition THEN</p>
				<p>  ......</p>
				<p>ELSE</p>
				<p>  ...</p>
				<p>END IF;</p>
				<p>多条件：</p>
				<p>IF condition THEN</p>
				<p>   ...</p>
				<p>ELSEIF conditon THEN</p>
				<p>   ....</p>
				<p>ELSEIF conditon THEN</p>
				<p>   ....</p>
				<p>ELSE</p>
				<p>   ....</p>
				<p>END IF;</p>
				<p> </p>
				<p>举例：</p>
				<p>
				</p>
				<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #0000ff">DECLARE</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  v_sal </span>
						<span style="FONT-WEIGHT: bold; COLOR: #000000">NUMBER</span>
						<span style="COLOR: #000000">(</span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">6</span>
						<span style="COLOR: #000000">,</span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">2</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  v_id </span>
						<span style="FONT-WEIGHT: bold; COLOR: #000000">NUMBER</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #0000ff">BEGIN</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  v_id:</span>
						<span style="COLOR: #808080">=</span>
						<span style="COLOR: #ff0000">'</span>
						<span style="COLOR: #ff0000">&amp;id</span>
						<span style="COLOR: #ff0000">'</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">SELECT</span>
						<span style="COLOR: #000000"> salary </span>
						<span style="COLOR: #0000ff">into</span>
						<span style="COLOR: #000000"> v_sal </span>
						<span style="COLOR: #0000ff">FROM</span>
						<span style="COLOR: #000000"> employee<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">WHERE</span>
						<span style="COLOR: #000000"> id</span>
						<span style="COLOR: #808080">=</span>
						<span style="COLOR: #000000">v_id;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">IF</span>
						<span style="COLOR: #000000"> v_sal</span>
						<span style="COLOR: #808080">&lt;</span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">4000</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">THEN</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
						<span style="COLOR: #0000ff">update</span>
						<span style="COLOR: #000000"> employee </span>
						<span style="COLOR: #0000ff">set</span>
						<span style="COLOR: #000000"> salary</span>
						<span style="COLOR: #808080">=</span>
						<span style="COLOR: #000000">(v_sal</span>
						<span style="COLOR: #808080">+</span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">100</span>
						<span style="COLOR: #000000">) </span>
						<span style="COLOR: #0000ff">where</span>
						<span style="COLOR: #000000"> id</span>
						<span style="COLOR: #808080">=</span>
						<span style="COLOR: #000000">v_id;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">ELSE</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
						<span style="COLOR: #0000ff">update</span>
						<span style="COLOR: #000000"> employee </span>
						<span style="COLOR: #0000ff">set</span>
						<span style="COLOR: #000000"> salary</span>
						<span style="COLOR: #808080">=</span>
						<span style="COLOR: #000000">(v_sal</span>
						<span style="COLOR: #808080">-</span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">900</span>
						<span style="COLOR: #000000">) </span>
						<span style="COLOR: #0000ff">where</span>
						<span style="COLOR: #000000"> id</span>
						<span style="COLOR: #808080">=</span>
						<span style="COLOR: #000000">v_id;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">END</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">IF</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #0000ff">END</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				</div>
				<p>
						<br />二。CASE语句：</p>
				<p>各种语言的switch ...case语句相同，只不过没有switch关键字。</p>
				<p>1。使用单一选择符进行比较：</p>
				<p> </p>
				<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #ff00ff">CASE</span>
						<span style="COLOR: #000000"> selector<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">WHEN</span>
						<span style="COLOR: #000000"> expression1 </span>
						<span style="COLOR: #0000ff">THEN</span>
						<span style="COLOR: #000000"> <img src="http://www.blogjava.net/images/dot.gif" />;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">WHEN</span>
						<span style="COLOR: #000000"> expression </span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">2</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">THEN</span>
						<span style="COLOR: #000000"> <img src="http://www.blogjava.net/images/dot.gif" />;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  <img src="http://www.blogjava.net/images/dot.gif" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				</div>
				<p> </p>
				<p>END CASE;</p>
				<p>2。多种条件比较：</p>
				<p> </p>
				<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #ff00ff">CASE</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">WHEN</span>
						<span style="COLOR: #000000"> condition1 </span>
						<span style="COLOR: #0000ff">THEN</span>
						<span style="COLOR: #000000"> <img src="http://www.blogjava.net/images/dot.gif" />;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">WHEN</span>
						<span style="COLOR: #000000"> condition2 </span>
						<span style="COLOR: #0000ff">THEN</span>
						<span style="COLOR: #000000"> <img src="http://www.blogjava.net/images/dot.gif" />;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">WHEN</span>
						<span style="COLOR: #000000"> condition3 </span>
						<span style="COLOR: #0000ff">THEN</span>
						<span style="COLOR: #000000"> <img src="http://www.blogjava.net/images/dot.gif" />;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />END CASE;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  <img src="http://www.blogjava.net/images/dot.gif" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				</div>
				<p> </p>
				<p> </p>
				<p>（三）循环语句：</p>
				<p>3种循环：</p>
				<p>1。基本循环，至少执行一次：</p>
				<p>LOOP </p>
				<p>   statement1;</p>
				<p>   ...</p>
				<p>   EXIT WHEN 退出循环条件;</p>
				<p>END LOOP1;</p>
				<p>例如：</p>
				<p> </p>
				<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #000000">LOOP<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">insert</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">into</span>
						<span style="COLOR: #000000"> employee(id,name) </span>
						<span style="COLOR: #0000ff">values</span>
						<span style="COLOR: #000000">(i,</span>
						<span style="COLOR: #ff0000">'</span>
						<span style="COLOR: #ff0000">dennis</span>
						<span style="COLOR: #ff0000">'</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  i:</span>
						<span style="COLOR: #808080">=</span>
						<span style="COLOR: #000000">i</span>
						<span style="COLOR: #808080">+</span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">1</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">EXIT</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">WHEN</span>
						<span style="COLOR: #000000"> i</span>
						<span style="COLOR: #808080">&gt;</span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">10</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #0000ff">END</span>
						<span style="COLOR: #000000"> LOOP;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				</div>
				<p> </p>
				<p>2。while循环：</p>
				<p>WHILE conditon1 LOOP</p>
				<p>   statement1;</p>
				<p>   ...</p>
				<p>END LOOP;</p>
				<p>比如上面的例子改写为：</p>
				<p> </p>
				<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #0000ff">WHILE</span>
						<span style="COLOR: #000000"> i</span>
						<span style="COLOR: #808080">&lt;=</span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">10</span>
						<span style="COLOR: #000000"> LOOP<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
						<span style="COLOR: #0000ff">insert</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">into</span>
						<span style="COLOR: #000000"> employee(id,name) </span>
						<span style="COLOR: #0000ff">values</span>
						<span style="COLOR: #000000">(i,</span>
						<span style="COLOR: #ff0000">'</span>
						<span style="COLOR: #ff0000">dennis</span>
						<span style="COLOR: #ff0000">'</span>
						<span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   i:</span>
						<span style="COLOR: #808080">=</span>
						<span style="COLOR: #000000">i</span>
						<span style="COLOR: #808080">+</span>
						<span style="FONT-WEIGHT: bold; COLOR: #800000">1</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #0000ff">END</span>
						<span style="COLOR: #000000"> LOOP;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				</div>
				<p> </p>
				<p>3。FOR循环，类似于ruby的FOR循环：</p>
				<p>FOR counter IN [REVERSE] 下限..上限 LOOP</p>
				<p>  statement1;</p>
				<p>  ...</p>
				<p>END LOOP;</p>
				<p>REVERSE参数可选，有的话表示从上限往下限递减。</p>
				<p> </p>
				<p>（四）顺序控制语句</p>
				<p>PL/SQL也提供了GOTO和NULL语句用于控制语句执行顺序，GOTO语句与JAVA的机制相似，通过label来实现跳转，尽量不要使用。NULL语句不会执行任何操作，它的存在主要是为了提高程序的可读性。 </p>
				<div class="clear">
				</div>
		</div>
<img src ="http://www.blogjava.net/killme2008/aggbug/99286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2007-02-11 19:59 <a href="http://www.blogjava.net/killme2008/archive/2007/02/11/99286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PL/SQL学习笔记(四) </title><link>http://www.blogjava.net/killme2008/archive/2007/02/11/99284.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Sun, 11 Feb 2007 11:57:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2007/02/11/99284.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/99284.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2007/02/11/99284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/99284.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/99284.html</trackback:ping><description><![CDATA[
		<p>这部分主要讲述在PL/SQL中如何访问oracle</p>
		<p>(一)检索单行数据</p>
		<p>在PL/SQL嵌入select语句,使用方法:</p>
		<p>SELECT select_list <strong>INTO </strong>variable_name1,variable_name2,variable_name3... FROM TABLE WHRE condition</p>
		<p>例:</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">DECLARE</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  v_sal </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">NUMBER</span>
				<span style="COLOR: #000000">(</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">6</span>
				<span style="COLOR: #000000">,</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">2</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  v_id </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">NUMBER</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">BEGIN</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  v_id:</span>
				<span style="COLOR: #808080">=</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #ff0000">&amp;id</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">SELECT</span>
				<span style="COLOR: #000000"> salary </span>
				<span style="COLOR: #0000ff">into</span>
				<span style="COLOR: #000000"> v_sal </span>
				<span style="COLOR: #0000ff">FROM</span>
				<span style="COLOR: #000000"> employee<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">WHERE</span>
				<span style="COLOR: #000000"> id</span>
				<span style="COLOR: #808080">=</span>
				<span style="COLOR: #000000">v_id;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  <img src="http://www.blogjava.net/images/dot.gif" />.<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p> </p>
		<p>需要注意事项:</p>
		<p>1.不仅可以使用普通标量接受数据，也可以使用Record接受数据</p>
		<p>2.使用的SELECT语句必须返回一条记录,并且只能返回一条记录,否则会触发PL/SQL异常,或者显示错误信息</p>
		<p>(1)NO_DATA_FOUND异常,当没有数据返回时抛出此异常</p>
		<p>(2)TOO_MANY_ROWS异常,返回多条数据时抛出此异常</p>
		<p>(3)在WHERE子句中使用变量时必须注意,变量名不能字段名相同,否则会触发TOO_MANY_ROWS异常</p>
		<p>(二)使用DML语句</p>
		<p>1.在PL/SQL中使用DML语句(insert,update,delete)语句与直接在sqlplus使用没什么不同,只不过可以使用变量代替具体的值,不再举例</p>
		<p>2.SQL游标:</p>
		<p>（1）在执行SELECT,INSERT,UPDATE,DELETE语句时,Oracle Server会为这些SQL语句分配相应的Context Area,并且Oracle使用此Context Area解析并执行相应的SQL语句,而游标就是指向Context Area的指针。在oracle中，游标又分为显式和隐式两种，其中隐式游标又被成为SQL游标，专门用于处理SELECT INTO，INSERT，DELETE，UPDATE语句。而显式游标多用于处理多行的SELECT语句。</p>
		<p>（2）SQL游标的四种属性：</p>
		<p>(A) SQL%ISOPEN</p>
		<p>用于确定SQL游标是否打开。因为oracle在执行SELECT INTO，INSERT，UPDATE，DELETE语句时会隐含着打开游标，并在执行结束后关闭。所以此值对于开发人员来说一直是false，实际开发中不需要此属性</p>
		<p>（B） SQL%FOUND</p>
		<p>用于确定SQL语句是否执行成功，当SQL语句有作用行时，它为TRUE，否则为FALSE，如：</p>
		<p>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">DECLARE</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  v_dept emp.deptno</span>
				<span style="COLOR: #808080">%</span>
				<span style="COLOR: #000000">TYPE;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">BEGIN</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">UPDATE</span>
				<span style="COLOR: #000000"> emp </span>
				<span style="COLOR: #0000ff">SET</span>
				<span style="COLOR: #000000"> sal</span>
				<span style="COLOR: #808080">=</span>
				<span style="COLOR: #000000">sal</span>
				<span style="COLOR: #808080">*</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">1.1</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">WHERE</span>
				<span style="COLOR: #000000"> deptno</span>
				<span style="COLOR: #808080">=&amp;</span>
				<span style="COLOR: #000000">no;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> SQL</span>
				<span style="COLOR: #808080">%</span>
				<span style="COLOR: #000000">FOUND </span>
				<span style="COLOR: #0000ff">then</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      dbms_output.put_line(</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #ff0000">语句执行成功</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">else</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      dbms_output.put_line(</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #ff0000">语句执行失败</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">end</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">END</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p>
				<br />（C）与SQL%FOUND相反的就是SQL%NOTFOUND</p>
		<p>（D）SQL%ROWCOUNT ，用于返回SQL语句作用的行数</p>
		<p>（三）事务控制语句</p>
		<p>在PL/SQL中同样可以使用COMMIT，ROLLBACK，SAVEPOINT等事务控制语句，与直接使用没有什么不同。</p>
<img src ="http://www.blogjava.net/killme2008/aggbug/99284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2007-02-11 19:57 <a href="http://www.blogjava.net/killme2008/archive/2007/02/11/99284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> PL/SQL学习笔记(三) ——PL/SQL代码编写规则</title><link>http://www.blogjava.net/killme2008/archive/2007/02/11/99283.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Sun, 11 Feb 2007 11:56:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2007/02/11/99283.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/99283.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2007/02/11/99283.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/99283.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/99283.html</trackback:ping><description><![CDATA[
		<div class="item-content">
				<p>养成良好的代码编写习惯,PL/SQL代码编写规则:</p>
				<p>1.标识符命名规则</p>
				<p>1)定义变量时以v_作为前缀,如v_sal</p>
				<p>2)定义常量时以c_作为前缀,如c_rate</p>
				<p>3)定义游标时,建议使用_cursor作为后缀,如emp_cursor</p>
				<p>4)定义异常时,以e_作为前缀，如e_integrity_error</p>
				<p>5)定义PL/SQL表类型时,使用_table_type作为后缀,如sal_table_type.</p>
				<p>6)定义表变量时,以_table作为后缀,如sal_table</p>
				<p>7)同样，定义PL/SQL记录型时以_record_type作为后缀</p>
				<p>8)定义PL/SQL记录变量时以_record作为后缀</p>
				<p> </p>
				<p>2.大小写规则:</p>
				<p>1)SQL关键字采用大写，比如SELECT,DELETE等</p>
				<p>2)PL/SQL关键字也用大写,比如DECLARE,BEGIN,END等</p>
				<p>3)数据类型也采用大写，比如VARCHA2</p>
				<p>4)标识符和参数采用小写，如v_sal</p>
				<p>5)数据库对象和列以及别名也才用小写</p>
				<p>3.合适的代码缩进风格</p>
				<div class="clear">
				</div>
		</div>
<img src ="http://www.blogjava.net/killme2008/aggbug/99283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2007-02-11 19:56 <a href="http://www.blogjava.net/killme2008/archive/2007/02/11/99283.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PL/SQL学习笔记(二) </title><link>http://www.blogjava.net/killme2008/archive/2007/02/11/99282.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Sun, 11 Feb 2007 11:55:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2007/02/11/99282.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/99282.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2007/02/11/99282.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/99282.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/99282.html</trackback:ping><description><![CDATA[
		<p>
				<strong>定义并使用变量</strong>
		</p>
		<p>PL/SQL有四种类型:标量类型,复合类型,引用类型(reference),LOB(Large Obejct)类型</p>
		<p>一.标量类型</p>
		<p>最常用的就是标量类型，是指只能存放单个数值的变量,包括数字类型、字符类型、日期类型和布尔类型，每种类型又包含相应的子类型。</p>
		<p>常量标量类型如下：</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="FONT-WEIGHT: bold; COLOR: #000000">VARCHAR2</span>
				<span style="COLOR: #000000">(n) ,</span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">CHAR</span>
				<span style="COLOR: #000000">(n),</span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">NUMBER</span>
				<span style="COLOR: #000000">(p,s),DATE,</span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">TIMESTAMP</span>
				<span style="COLOR: #000000">,</span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">LONG</span>
				<span style="COLOR: #000000">,</span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">LONG</span>
				<span style="COLOR: #000000"> </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">RAW</span>
				<span style="COLOR: #000000">,BOOLEAN,BINARY_INTEGER(仅PL</span>
				<span style="COLOR: #808080">/</span>
				<span style="COLOR: #000000">SQL使用），BINARY_FLOAT和BINARY_DOUBLE(10g新引入的）</span>
		</div>
		<p> </p>
		<p>定义标量：</p>
		<p>identifier [CONSTANT] datatype [NOT NULL] [:=| DEFAULT expr]</p>
		<p>使用标量需要注意的是=号被:=取代，与delphi一样的赋值符号@_@</p>
		<p>例子：</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">v_name </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">VARCHAR2</span>
				<span style="COLOR: #000000">(</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">10</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />v_rate CONSTANTS </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">NUMBER</span>
				<span style="COLOR: #000000">(</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">4</span>
				<span style="COLOR: #000000">,</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">2</span>
				<span style="COLOR: #000000">) :</span>
				<span style="COLOR: #808080">=</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">3.04</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p> </p>
		<p>为了防止定义的变量类型与表中的字段类型不一致，可以使用%TYPE来定义：</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">v_name employee.name</span>
				<span style="COLOR: #808080">%</span>
				<span style="COLOR: #000000">TYPE;</span>
		</div>
		<p> </p>
		<p>如上面所示，v_name的类型就与表employee中的name字段类型一样！！</p>
		<p>二。复合变量：</p>
		<p>用于存放多个值的变量称为复合变量，包括PL/SQL记录，PL/SQL表，嵌套表和VARRAY四种类型</p>
		<p>1。PL/SQL记录</p>
		<p>类似于C/C++中的结构概念：</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">declare</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   TYPE employee_record </span>
				<span style="COLOR: #0000ff">is</span>
				<span style="COLOR: #000000"> RECORD(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     id employee.id</span>
				<span style="COLOR: #808080">%</span>
				<span style="COLOR: #000000">TYPE,<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     name employee.name</span>
				<span style="COLOR: #808080">%</span>
				<span style="COLOR: #000000">TYPE,<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     email employee.email</span>
				<span style="COLOR: #808080">%</span>
				<span style="COLOR: #000000">TYPE);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   em_record employee_record;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">begin</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> id,name,email </span>
				<span style="COLOR: #0000ff">into</span>
				<span style="COLOR: #000000"> em_record </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> employee </span>
				<span style="COLOR: #0000ff">where</span>
				<span style="COLOR: #000000"> name</span>
				<span style="COLOR: #808080">=&amp;</span>
				<span style="COLOR: #000000">name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   dbms_output.put_line(</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">em_record.name</span>
				<span style="COLOR: #808080">||</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">em_record.id);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">end</span>
				<span style="COLOR: #000000">; </span>
		</div>
		<p> </p>
		<p>2。PL/SQL表，类似于数组概念，不同的是PL/SQL表允许负值下标，而且没有上下限，如：</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">declare</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   TYPE employee_table </span>
				<span style="COLOR: #0000ff">is</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">table</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">of</span>
				<span style="COLOR: #000000"> employee.name</span>
				<span style="COLOR: #808080">%</span>
				<span style="COLOR: #000000">TYPE </span>
				<span style="COLOR: #0000ff">index</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">by</span>
				<span style="COLOR: #000000"> BINaRY_INTEGER;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   em_table employee_table;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">begin</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> name </span>
				<span style="COLOR: #0000ff">into</span>
				<span style="COLOR: #000000"> em_table(</span>
				<span style="COLOR: #808080">-</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">1</span>
				<span style="COLOR: #000000">) </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> employee </span>
				<span style="COLOR: #0000ff">where</span>
				<span style="COLOR: #000000"> name</span>
				<span style="COLOR: #808080">=&amp;</span>
				<span style="COLOR: #000000">name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   dbms_output.put_line(</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">em_table(</span>
				<span style="COLOR: #808080">-</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">1</span>
				<span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">end</span>
				<span style="COLOR: #000000">; </span>
		</div>
		<p> </p>
		<p>3。嵌套表，与PL/SQL表相似，不同的是嵌套表可以做表列的数据类型，而PL/SQL表不能，使用嵌套表作为表列时，必须为其指定专门的存储表，如：</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">create</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">or</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #ff00ff">replace</span>
				<span style="COLOR: #000000"> TYPE emp_type  </span>
				<span style="COLOR: #0000ff">as</span>
				<span style="COLOR: #000000"> OBJECT(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  name </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">VARCHAR2</span>
				<span style="COLOR: #000000">(</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">10</span>
				<span style="COLOR: #000000">),salary </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">NUMBER</span>
				<span style="COLOR: #000000">(</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">6</span>
				<span style="COLOR: #000000">,</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">2</span>
				<span style="COLOR: #000000">),hiredate DATE);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">CREATE</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">OR</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #ff00ff">REPLACE</span>
				<span style="COLOR: #000000"> TYPE emp_array </span>
				<span style="COLOR: #0000ff">IS</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">TABLE</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">OF</span>
				<span style="COLOR: #000000"> emp_type；<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">CREATE</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">TABLE</span>
				<span style="COLOR: #000000"> department(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    deptno </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">NUMBER</span>
				<span style="COLOR: #000000">(</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">2</span>
				<span style="COLOR: #000000">),dname </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">VARCHAR2</span>
				<span style="COLOR: #000000">(</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">10</span>
				<span style="COLOR: #000000">),<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    employee emp_array)NESTED </span>
				<span style="COLOR: #0000ff">TABLE</span>
				<span style="COLOR: #000000"> employee STORE </span>
				<span style="COLOR: #0000ff">as</span>
				<span style="COLOR: #000000"> employee_dept;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p> </p>
		<p>4。VARRAY(变长数组），与嵌套表相似，也可以做为表列的数据类型，但是嵌套表没有个数限制，而VARRAY有个数限制，如：</p>
		<p>CREATE TYPE TEST_ARRAY IS <strong>VARRAY(20) </strong>OF emp_type;</p>
		<p>三。引用变量（reference）</p>
		<p>类似于C++中的指针或者JAVA中引用的概念，用于存放数值指针的变量，使用此变量，可以使得应用程序共享相同对象，降低占用空间。此类有两种类型：游标（REF CURSOR）和对象类型（REF OBJECT）</p>
		<p>1。REF CURSOR，定义时同时指定SELECT语句的游标称为显式或者静态游标，在打开时才指定SELECT语句的游标称为动态游标，如：</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">DECLARE</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     TYPE c1 </span>
				<span style="COLOR: #0000ff">IS</span>
				<span style="COLOR: #000000"> REF </span>
				<span style="COLOR: #0000ff">CURSOR</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     emp_cursor c1;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     v_name employee.name</span>
				<span style="COLOR: #808080">%</span>
				<span style="COLOR: #000000">TYPE;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     v_sal employee.salary</span>
				<span style="COLOR: #808080">%</span>
				<span style="COLOR: #000000">TYPE;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">begin</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">open</span>
				<span style="COLOR: #000000"> emp_cursor </span>
				<span style="COLOR: #0000ff">for</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       </span>
				<span style="COLOR: #0000ff">SELECT</span>
				<span style="COLOR: #000000"> name,salary </span>
				<span style="COLOR: #0000ff">FROM</span>
				<span style="COLOR: #000000"> EMPLOYEE ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     LOOP<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       </span>
				<span style="COLOR: #0000ff">FETCH</span>
				<span style="COLOR: #000000"> emp_cursor </span>
				<span style="COLOR: #0000ff">INTO</span>
				<span style="COLOR: #000000"> v_name,v_sal;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       </span>
				<span style="COLOR: #0000ff">EXIT</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">WHEN</span>
				<span style="COLOR: #000000"> emp_cursor</span>
				<span style="COLOR: #808080">%</span>
				<span style="COLOR: #000000">NOTFOUND;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       dbms_output.put_line(v_name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">END</span>
				<span style="COLOR: #000000"> LOOP;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">close</span>
				<span style="COLOR: #000000"> emp_cursor;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">end</span>
				<span style="COLOR: #000000">;  </span>
		</div>
		<p>   </p>
		<p>2。REF OBJECT，与JAVA的引用概念相同，存储的是指向对象的指针</p>
		<p> </p>
		<p>四。LOB类型</p>
		<p>LOB类型是指用于存储大批量数据的变量，包括内部的3种（CLOB，BLOB，NCLOB）和外部LOB（BFILE）。</p>
		<p>CLOB，NCLOB用于存储大量的字符数据。</p>
		<p>BLOB用于存储大批量二进制数据（如图象）。</p>
		<p>BFILE则存储指向OS文件的指针。</p>
<img src ="http://www.blogjava.net/killme2008/aggbug/99282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2007-02-11 19:55 <a href="http://www.blogjava.net/killme2008/archive/2007/02/11/99282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PL/SQL学习笔记(一) </title><link>http://www.blogjava.net/killme2008/archive/2007/02/11/99281.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Sun, 11 Feb 2007 11:52:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2007/02/11/99281.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/99281.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2007/02/11/99281.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/99281.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/99281.html</trackback:ping><description><![CDATA[
		<p>断断续续学过，这次系统地来读读。</p>
		<p>（一）</p>
		<p>PL/SQL是oracle在标准SQL语言上的过程性扩展,它不仅允许嵌入SQL语句,而且允许定义变量和常量,允许过程语言结构(条件语句和循环语句),允许使用异常处理oracle错误等。通过使用PL/SQL，可以在一个PL/SQL块中包含多条SQL语句和PL/SQL语句。PL/SQL具有以下优点：</p>
		<p>1。提高应用系统的运行性能。</p>
		<p>通过使用PL/SQL块包含多条SQL语句，从而减少了SQL语句的发送次数，降低了网络开销，提高了应用程序性能</p>
		<p>2。提供模块化的程序设计功能。</p>
		<p>将企业规则和商业逻辑集成到PL/SQL子程序当中，提供给客户端调用，简化了客户端应用程序的开发和维护工作，降低了耦合度</p>
		<p>3。允许定义标识符，允许定义变量、常量、游标和异常等标识符</p>
		<p>4。具有过程语言控制结构，允许使用条件分支语句和循环语句</p>
		<p>5。具有良好的兼容性，在允许运行oracle的任何平台上执行，不仅在数据库服务端执行，也可以在oracle提供的工具中开发PL/SQL</p>
		<p>6。处理运行错误，使用PL/SQL提供的EXCEPTION，开发人员可以集中处理各种oracle错误和PL/SQL错误，简化了错误处理。</p>
		<p>（二）</p>
		<p>PL/SQL块的概念：</p>
		<p>Block是PL/SQL的基本单元，编写PL/SQL本质上就是编写PL/SQL块，块的嵌套层次没有限制。</p>
		<p>1。块的结构：块由3部分组成</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">DECLARE</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  定义部分——定义常量，变量，游标，异常，复杂数据类型等<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">BEGIN</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  执行部分<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />EXCEPTION<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  异常处理部分<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_82_90_Open_Image" onclick="this.style.display='none'; Codehighlighter1_82_90_Open_Text.style.display='none'; Codehighlighter1_82_90_Closed_Image.style.display='inline'; Codehighlighter1_82_90_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_82_90_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_82_90_Closed_Text.style.display='none'; Codehighlighter1_82_90_Open_Image.style.display='inline'; Codehighlighter1_82_90_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">END</span>
				<span style="COLOR: #000000">; </span>
				<span id="Codehighlighter1_82_90_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
				<span id="Codehighlighter1_82_90_Open_Text">
						<span style="COLOR: #008080">/*</span>
						<span style="COLOR: #008080">块结束标志</span>
						<span style="COLOR: #008080">*/</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p> </p>
		<p>其中只有执行部分是必须的！</p>
		<p>2。分类：</p>
		<p>1）匿名块，匿名块是指没有名称的PL/SQL块，可以内嵌到应用程序中，如：</p>
		<p>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">declare</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    v_name </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">VARCHAR2</span>
				<span style="COLOR: #000000">(</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">10</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">BEGIN</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> name </span>
				<span style="COLOR: #0000ff">into</span>
				<span style="COLOR: #000000"> v_name </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> test </span>
				<span style="COLOR: #0000ff">where</span>
				<span style="COLOR: #000000"> name</span>
				<span style="COLOR: #808080">=&amp;</span>
				<span style="COLOR: #000000">no;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    dbms_output.put_line(</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">v_name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    EXCEPTION<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">WHEN</span>
				<span style="COLOR: #000000"> NO_DATA_FOUND </span>
				<span style="COLOR: #0000ff">THEN</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    dbms_output.put_line(</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #ff0000">找不到该名字</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">end</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p>
				<br />2）命名块：与匿名块相似，使用命名块主要是为了区分多级嵌套关系，如：</p>
		<p>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #808080">&lt;&lt;</span>
				<span style="COLOR: #000000">out</span>
				<span style="COLOR: #808080">&gt;&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">declare</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    v_name </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">VARCHAR2</span>
				<span style="COLOR: #000000">(</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">10</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">BEGIN</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #808080">&lt;&lt;</span>
				<span style="COLOR: #0000ff">inner</span>
				<span style="COLOR: #808080">&gt;&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">begin</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />           </span>
				<span style="COLOR: #0000ff">null</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">end</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #008080">--</span>
				<span style="COLOR: #008080">&lt;&lt;inner&gt;&gt;</span>
				<span style="COLOR: #008080">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> name </span>
				<span style="COLOR: #0000ff">into</span>
				<span style="COLOR: #000000"> v_name </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> test </span>
				<span style="COLOR: #0000ff">where</span>
				<span style="COLOR: #000000"> name</span>
				<span style="COLOR: #808080">=&amp;</span>
				<span style="COLOR: #000000">no;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    dbms_output.put_line(</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">v_name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    EXCEPTION<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">WHEN</span>
				<span style="COLOR: #000000"> NO_DATA_FOUND </span>
				<span style="COLOR: #0000ff">THEN</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    dbms_output.put_line(</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #ff0000">找不到该名字</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">end</span>
				<span style="COLOR: #000000">; </span>
				<span style="COLOR: #008080">--</span>
				<span style="COLOR: #008080">&lt;&lt;outer&gt;&gt;</span>
				<span style="COLOR: #008080">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>
				<br />3）子程序，又可以分成3种：过程、函数和包</p>
		<p>A。过程用于执行特定操作，当建立过程时既可以指定输入参数，也可以指定输出参数，从而在应用环境和程序间传递数据，使用CREATE PROCEDURE语句，如：</p>
		<p>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">create</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">or</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #ff00ff">replace</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">PROCEDURE</span>
				<span style="COLOR: #000000"> update_test(id2 </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">NUMBER</span>
				<span style="COLOR: #000000">,money2 </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">LONG</span>
				<span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">is</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    e_no_row EXCEPTION;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">begin</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">update</span>
				<span style="COLOR: #000000"> test </span>
				<span style="COLOR: #0000ff">set</span>
				<span style="COLOR: #000000"> </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">money</span>
				<span style="COLOR: #808080">=</span>
				<span style="COLOR: #000000">money2 </span>
				<span style="COLOR: #0000ff">where</span>
				<span style="COLOR: #000000"> id</span>
				<span style="COLOR: #808080">=</span>
				<span style="COLOR: #000000">id2;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> SQL</span>
				<span style="COLOR: #808080">%</span>
				<span style="COLOR: #000000">NOTFOUND </span>
				<span style="COLOR: #0000ff">THEN</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      RAISE e_no_row;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">end</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> EXCEPTION<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">WHEN</span>
				<span style="COLOR: #000000">  e_no_row </span>
				<span style="COLOR: #0000ff">THEN</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      raise_application_error(</span>
				<span style="COLOR: #808080">-</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">20004</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #ff0000">该test不存在</span>
				<span style="COLOR: #ff0000">'</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">end</span>
				<span style="COLOR: #000000"> update_test;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p>
				<br />B）函数，与过程主要不同是函数需要返回数据，在函数头和函数体都必须有RETURN语句，如：</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">create</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">or</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #ff00ff">replace</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">FUNCTION</span>
				<span style="COLOR: #000000"> get_long(name2 </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">VARCHAR2</span>
				<span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">RETURN</span>
				<span style="COLOR: #000000"> </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">LONG</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">IS</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  avg_money </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">NUMBER</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">begin</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="FONT-WEIGHT: bold; COLOR: #000000">money</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">into</span>
				<span style="COLOR: #000000"> avg_money </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> test </span>
				<span style="COLOR: #0000ff">where</span>
				<span style="COLOR: #000000"> name</span>
				<span style="COLOR: #808080">=</span>
				<span style="COLOR: #000000">name2;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">RETURN</span>
				<span style="COLOR: #000000"> avg_money;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">end</span>
				<span style="COLOR: #000000">;  </span>
		</div>
		<p> </p>
		<p>C）包，类似JAVA包的概念，包含两部分，包规范和包体，包规范相当于C++中的头文件声明子程序，而包体包含这些子程序的具体实现。调用包中的子程序时，需要 ‘包名.子程序名’ 这样的形式调用</p>
		<p>4。触发器是指隐含执行的存储过程，定义触发器需要指定触发事件和触发操作，常见触发事件如insert,update,delete等，使用CREATE TRIGGER命令建立<br /></p>
<img src ="http://www.blogjava.net/killme2008/aggbug/99281.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2007-02-11 19:52 <a href="http://www.blogjava.net/killme2008/archive/2007/02/11/99281.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>