﻿<?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/tbest/category/30112.html</link><description>java先（我应该为它写点什么了！）</description><language>zh-cn</language><lastBuildDate>Fri, 21 Oct 2011 22:45:53 GMT</lastBuildDate><pubDate>Fri, 21 Oct 2011 22:45:53 GMT</pubDate><ttl>60</ttl><item><title>(转)pl/sql developer 中文字段显示乱码</title><link>http://www.blogjava.net/tbest/articles/361660.html</link><dc:creator>liujg</dc:creator><author>liujg</author><pubDate>Thu, 20 Oct 2011 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/tbest/articles/361660.html</guid><wfw:comment>http://www.blogjava.net/tbest/comments/361660.html</wfw:comment><comments>http://www.blogjava.net/tbest/articles/361660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tbest/comments/commentRss/361660.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tbest/services/trackbacks/361660.html</trackback:ping><description><![CDATA[<div id="app-share-content">
<p><font style="font-size: 14px"><font style="font-size: 12px"><span style="font-size: 12px">在windows中创建一个名为&#8220;NLS_LANG&#8221;的系统环境变量，设置其值为&#8220;SIMPLIFIED CHINESE_CHINA.ZHS16GBK&#8221;，然后重新启动 pl/sql developer，这样检索出来的中文内容就不会是乱码了。如果想转换为UTF8字符集，可以赋予&#8220;NLS_LANG&#8221;为 &#8220;AMERICAN_AMERICA.UTF8&#8221;，然后重新启动 pl/sql developer。其它字符集设置同上。</span><br />NLS_LANG格式：<br /></font><font style="font-size: 12px">NLS_LANG = language_territory.charset<br />有三个组成部分（语言、地域和字符集），每个成分控制了NLS子集的特性。其中：language 指定服务器消息的语言。territory 指定服务器的日期和数字格式。charset 指定字符集。<br /></font></font></p>
<p><font style="font-size: 12px">如何设置客户端字符集与服务器端字符集一致:</font></p>
<p><font style="font-size: 12px">运行REGEDIT,第一步选HKEY_LOCAL_MACHINE,第二步选择SOFTWARE，第三步选择 Oracle，第四步选择 NLS_LANG，键入与服务器端相同的字符集。</font></p>
<p><font style="font-size: 14px"><font style="font-size: 12px"><font style="font-size: 12px">例如:<font size="2">AMERICAN_AMERICA.UTF8或者SIMPLIFIED CHINESE_CHINA.ZHS16GBK</font></font></font></font></p>
<p><font style="font-size: 12px">oracle 10g装上后,建了个表写入中文数据,发现通过工具PL/SQL Developer中文不能正常显示.</font></p>
<p><font style="font-size: 12px">要正常显示中文,就必须得服务器和客户端编码一致才行。于是检查：</font></p>
<p><font style="font-size: 12px">1.检查服务器编码:</font></p>
<p><font style="font-size: 12px">执行SQL语法:</font></p>
<p><font style="font-size: 12px">select * from v$nls_parameters;</font><font style="font-size: 14px"><font style="font-size: 12px"> <wbr></wbr></font><font style="font-size: 12px"><img style="width: 580px; height: 300px" title="pl/sql&nbsp;<wbr  alt="" />developer&nbsp;<wbr>中文字段显示乱码(&nbsp;<wbr>转载)" border=0 alt="PL/SQL Developer 乱码" src="http://hiphotos.baidu.com/%CE%D2%BA%DC%B0%AE%D5%C5%B2%AE%C2%D7/pic/item/35bff655c4e32667d00906ee.jpg" width=580 height=300 real_src="http://xok.la/wp-content/uploads/2008/11/nlslang_0.gif"></font></font></p>
<p><font style="font-size: 12px">也可以参照/home/oracle/.bash_profile 相关语言设置.<br />可以看到我的相关设置是:</font></p>
<p><font style="font-size: 12px"><font style="font-size: 12px"><font style="font-size: 14px">LANG=zh_CN.GBK<br />NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"</font><font style="font-size: 14px"> <wbr></wbr></font></font></font></p>
<p><font style="font-size: 12px">2.设置本地客户端编码:</font></p>
<p><font style="font-size: 12px">进入我的电脑,属性,高级,环境变量,添加2项:</font></p>
<p><font style="font-size: 12px"><font style="font-size: 12px">LANG=zh_CN.GBK<br />NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"</font><font style="font-size: 14px"> <wbr></wbr></font></font></p>
<p><font style="font-size: 12px">如图:</font></p>
<p><a><font style="font-size: 14px"><img title="pl/sql&nbsp;<wbr  alt="" />developer&nbsp;<wbr>中文字段显示乱码(&nbsp;<wbr>转载)" border=0 alt="PL/SQL Developer 乱码" src="http://hiphotos.baidu.com/%CE%D2%BA%DC%B0%AE%D5%C5%B2%AE%C2%D7/pic/item/6ad2b95945a407e19d8204ee.jpg" real_src="http://xok.la/wp-content/uploads/2008/11/nlslang_1.gif"></font></a></p>
<p><font style="font-size: 14px">3.重新连接sqlplus,查看数据:</font></p>
<p><font style="font-size: 14px"><img title="pl/sql&nbsp;<wbr  alt="" />developer&nbsp;<wbr>中文字段显示乱码(&nbsp;<wbr>转载)" border=0 alt="PL/SQL Developer 乱码" src="http://hiphotos.baidu.com/%CE%D2%BA%DC%B0%AE%D5%C5%B2%AE%C2%D7/pic/item/ed9598df0a2f6567cdbf1aee.jpg" real_src="http://xok.la/wp-content/uploads/2008/11/nlslang_2.gif"></font></p>
<p><font style="font-size: 12px">显示正常.</font></p>
<p><font style="font-size: 12px">4.PL/SQL Developer设置并重新连接:</font></p>
<p><font style="font-size: 12px">在pl/sql developer的菜单-&gt;tools-&gt;preferences-&gt;user interface-&gt;fonts 中修改为中文字体</font></p>
<p><font style="font-size: 12px">重新连接,如图:</font></p>
<p><font style="font-size: 12px">显示正常.OK!</font></p>
<p><font style="font-size: 14px"><img title="pl/sql&nbsp;<wbr  alt="" />developer&nbsp;<wbr>中文字段显示乱码(&nbsp;<wbr>转载)" border=0 alt="PL/SQL Developer 乱码" src="http://hiphotos.baidu.com/%CE%D2%BA%DC%B0%AE%D5%C5%B2%AE%C2%D7/pic/item/a01efa595412d8be810a18ee.jpg" real_src="http://xok.la/wp-content/uploads/2008/11/nlslang_3.gif"><br /><br />From：<a href="http://apps.hi.baidu.com/share/detail/19972908">http://apps.hi.baidu.com/share/detail/19972908</a></font></p></div><img src ="http://www.blogjava.net/tbest/aggbug/361660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tbest/" target="_blank">liujg</a> 2011-10-20 16:28 <a href="http://www.blogjava.net/tbest/articles/361660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)Oracle Sequence Cache 参数说明</title><link>http://www.blogjava.net/tbest/articles/343804.html</link><dc:creator>liujg</dc:creator><author>liujg</author><pubDate>Mon, 31 Jan 2011 03:49:00 GMT</pubDate><guid>http://www.blogjava.net/tbest/articles/343804.html</guid><wfw:comment>http://www.blogjava.net/tbest/comments/343804.html</wfw:comment><comments>http://www.blogjava.net/tbest/articles/343804.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tbest/comments/commentRss/343804.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tbest/services/trackbacks/343804.html</trackback:ping><description><![CDATA[<p>Oracle Sequence Cache 参数说明 收藏 <br />
&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 公司上线一套RAC 系统。 Aston对Sequence 的 Cache 参数表示关注，建议并发大的系统对Cache设置大一点。 这样可以提高性能。 和Aston 讨论了一下。 又从网上查了一下。 </p>
<p>&nbsp;</p>
<p>RACLE SEQUENCE 介绍<br />
http://blog.csdn.net/tianlesoftware/archive/2009/10/30/4745039.aspx</p>
<p>&nbsp;</p>
<p>之前整理的一篇文章。 刚才看了一下，也是从网上转的。 那是还是写blog初期的作品。 2009年10月份的。 转眼一年，写Blog 也比以前成熟了很多。<br />
&nbsp;</p>
<p>一. 理论知识先看一个创建Sequence的语句：<br />
SQL&gt; create sequence seq_tmp</p>
<p>&nbsp; 2&nbsp; increment by 1</p>
<p>&nbsp; 3&nbsp; start with 1</p>
<p>&nbsp; 4&nbsp; nomaxvalue</p>
<p>&nbsp; 5&nbsp; nocycle</p>
<p>&nbsp; 6&nbsp; ;</p>
<p>序列已创建。<br />
&nbsp;</p>
<p>相关参数说明：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INCREMENT BY 1 -- 每次加几个 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; START WITH 1 -- 从1开始计数 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NOMAXvalue -- 不设置最大值 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NOCYCLE -- 一直累加，不循环 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CACHE 10;&nbsp; --设置缓存cache个序列</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CURRVAL=返回 sequence的当前值 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NEXTVAL=增加sequence的值，然后返回 sequence 值</p>
<p>&nbsp;</p>
<p>更多信息，参考Oracle 联机文档：<br />
CREATE SEQUENCE</p>
<p>http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/statements_6015.htm#SQLRF01314</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>这里对Cache 参数做一个说明：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果指定CACHE值，ORACLE就可以预先在内存里面放置一些sequence，这样存取的快些。cache里面的取完后，oracle自动再取一组到cache。 使用cache或许会跳号， 比如我们在创建序列时指定Cache 为100. 在某一个时刻，序列使用到了80. 而在这个时刻，数据库突然不正常down掉（shutdown abort),cache中的sequence就会丢失.&nbsp; 在下次启动分配cache时，数据库会从101 开始，在分配100个缓存。即101--200. 而之前分配100个中的80-100这20个因为意外宕机而丢失。 这种情况下就会出现跳号的现象。我们可以在create sequence的时候用nocache防止这种情况。 但是nocache 的性能较差。 如果指定cache而没有设定cache值，默认cache是20个。 这个默认值对于大多数情况下都是够用的。 除非那种每秒上万次的select。 所以具体情况要具体对待。 对于哪些大并发的系统，最好设置在100以上。像移动的BOSS系统，以1000为单位。 </p>
<p>&nbsp;</p>
<p>CACHE Specify how many values of the sequence the database preallocates and keeps in memory for faster access. This integer value can have 28 or fewer digits. The minimum value for this parameter is 2. For sequences that cycle, this value must be less than the number of values in the cycle. You cannot cache more values than will fit in a given cycle of sequence numbers. Therefore, the maximum value allowed for CACHE must be less than the value determined by the following formula:</p>
<p>(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)</p>
<p>If a system failure occurs, then all cached sequence values that have not been used in committed DML statements are lost. The potential number of lost values is equal to the value of the CACHE parameter.</p>
<p>Note:</p>
<p>Oracle recommends using the CACHE setting to enhance performance if you are using sequences in an Oracle Real Application Clusters environment.</p>
<p>NOCACHE&nbsp; Specify NOCACHE to indicate that values of the sequence are not preallocated. If you omit both CACHE and NOCACHE, then the database caches 20 sequence numbers by default.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>关于Order 参数的说明：<br />
&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 序参数：oracle默认是NOORDER，如果设置为ORDER；在单实例环境没有影响，在RAC环境此时，多实例实际缓存相同的序列，此时在多个实例并发取该序列的时候，会有短暂的资源竞争来在多实例之间进行同步。因次性能相比noorder要差，所以RAC环境非必须的情况下不要使用ORDER，尤其要避免NOCACHE&nbsp;&nbsp; ORDER组合。</p>
<p>&nbsp;</p>
<p>ORDER Specify ORDER to guarantee that sequence numbers are generated in order of request. This clause is useful if you are using the sequence numbers as timestamps. Guaranteeing order is usually not important for sequences used to generate primary keys.</p>
<p>ORDER is necessary only to guarantee ordered generation if you are using Oracle Real Application Clusters. If you are using exclusive mode, then sequence numbers are always generated in order.</p>
<p>NOORDER&nbsp; Specify NOORDER if you do not want to guarantee sequence numbers are generated in order of request. This is the default.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>查看user_sequences 表的结构：<br />
SQL&gt; desc user_sequences;</p>
<p>&nbsp;名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否为空? 类型<br />
&nbsp;----------------------------------------- -------- ---------------</p>
<p>&nbsp;SEQUENCE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NOT NULL VARCHAR2(30)</p>
<p>&nbsp;MIN_VALUE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER</p>
<p>&nbsp;MAX_VALUE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER</p>
<p>&nbsp;INCREMENT_BY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NOT NULL NUMBER</p>
<p>&nbsp;CYCLE_FLAG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(1)</p>
<p>&nbsp;ORDER_FLAG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(1)</p>
<p>&nbsp;CACHE_SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NOT NULL NUMBER</p>
<p>&nbsp;LAST_NUMBER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NOT NULL NUMBER</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>查看刚才创建的序列seq_tmp 的值：<br />
SQL&gt; select * from user_sequences where sequence_name='SEQ_TMP';</p>
<p>SEQUENCE_N&nbsp; MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER</p>
<p>---------- ---------- ---------- ------------ - - ---------- -----------</p>
<p>SEQ_TMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 1.0000E+28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 N N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 21</p>
<p>&nbsp;</p>
<p>这里有个CACHE_SIZE的值。 我们在创建sequence的时候，启用了cache，但是没有给它值。 所以这里的cache_size 就是系统的模式值。 即20个。 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>取下一个sequence的值：<br />
SQL&gt; select seq_tmp.nextval from dual;</p>
<p>&nbsp;&nbsp; NEXTVAL</p>
<p>----------</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</p>
<p>SQL&gt; select seq_tmp.nextval from dual;</p>
<p>&nbsp;&nbsp; NEXTVAL</p>
<p>----------</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>查看当前sequence的值：<br />
SQL&gt; select seq_tmp.currval from dual;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; CURRVAL</p>
<p>----------</p>
<p>&nbsp;</p>
<p>二. 实验一个网友RAC 系统上的测试时结果：<br />
nocache：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　&nbsp; 2100s</p>
<p>cache ＝1000：　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 55s</p>
<p>差别很明显。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>测试一：<br />
SQL&gt; create sequence seq_1 nocache;</p>
<p>序列已创建。</p>
<p>SQL&gt; set timing on;</p>
<p>SQL&gt; declare</p>
<p>&nbsp; 2&nbsp; x number;</p>
<p>&nbsp; 3&nbsp; begin</p>
<p>&nbsp; 4&nbsp; for i in 1 .. 10000 loop</p>
<p>&nbsp; 5&nbsp; select seq_1.nextval into x from dual;</p>
<p>&nbsp; 6&nbsp; end loop;</p>
<p>&nbsp; 7&nbsp; end;</p>
<p>&nbsp; 8&nbsp; /</p>
<p>PL/SQL 过程已成功完成。</p>
<p>&nbsp;</p>
<p>已用时间:&nbsp; 00: 00: 02.26</p>
<p>&nbsp;</p>
<p>测试二：<br />
SQL&gt; create sequence seq_2 cache 20;</p>
<p>序列已创建。</p>
<p>已用时间:&nbsp; 00: 00: 00.01</p>
<p>SQL&gt; declare</p>
<p>&nbsp; 2&nbsp; x number;</p>
<p>&nbsp; 3&nbsp; begin</p>
<p>&nbsp; 4&nbsp; for i in 1 .. 10000 loop</p>
<p>&nbsp; 5&nbsp; select seq_2.nextval into x from dual;</p>
<p>&nbsp; 6&nbsp; end loop;</p>
<p>&nbsp; 7&nbsp; end;</p>
<p>&nbsp; 8&nbsp; /</p>
<p>PL/SQL 过程已成功完成。</p>
<p>&nbsp;</p>
<p>已用时间:&nbsp; 00: 00: 00.46</p>
<p>&nbsp;</p>
<p>测试三：<br />
SQL&gt; create sequence seq_3 cache 100;</p>
<p>&nbsp;</p>
<p>序列已创建。</p>
<p>&nbsp;</p>
<p>已用时间:&nbsp; 00: 00: 00.05</p>
<p>SQL&gt; declare</p>
<p>&nbsp; 2&nbsp; x number;</p>
<p>&nbsp; 3&nbsp; begin</p>
<p>&nbsp; 4&nbsp; for i in 1 .. 10000 loop</p>
<p>&nbsp; 5&nbsp; select seq_3.nextval into x from dual;</p>
<p>&nbsp; 6&nbsp; end loop;</p>
<p>&nbsp; 7&nbsp; end;</p>
<p>&nbsp; 8&nbsp; /</p>
<p>&nbsp;</p>
<p>PL/SQL 过程已成功完成。</p>
<p>&nbsp;</p>
<p>已用时间:&nbsp; 00: 00: 00.37</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>测试四：<br />
SQL&gt; create sequence seq_4 cache 1000;</p>
<p>序列已创建。</p>
<p>已用时间:&nbsp; 00: 00: 00.04</p>
<p>SQL&gt; declare</p>
<p>&nbsp; 2&nbsp; x number;</p>
<p>&nbsp; 3&nbsp; begin</p>
<p>&nbsp; 4&nbsp; for i in 1 .. 40000 loop</p>
<p>&nbsp; 5&nbsp; select seq_4.nextval into x from dual;</p>
<p>&nbsp; 6&nbsp; end loop;</p>
<p>&nbsp; 7&nbsp; end;</p>
<p>&nbsp; 8&nbsp; /</p>
<p>&nbsp;</p>
<p>PL/SQL 过程已成功完成。</p>
<p>&nbsp;</p>
<p>已用时间:&nbsp; 00: 00: 01.31</p>
<p>SQL&gt; declare</p>
<p>&nbsp; 2&nbsp; x number;</p>
<p>&nbsp; 3&nbsp; begin</p>
<p>&nbsp; 4&nbsp; for i in 1 .. 40000 loop</p>
<p>&nbsp; 5&nbsp; select seq_1.nextval into x from dual;</p>
<p>&nbsp; 6&nbsp; end loop;</p>
<p>&nbsp; 7&nbsp; end;</p>
<p>&nbsp; 8&nbsp; /</p>
<p>&nbsp;</p>
<p>PL/SQL 过程已成功完成。</p>
<p>&nbsp;</p>
<p>已用时间:&nbsp; 00: 00: 09.33</p>
<p>SQL&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>小结： </p>
<p>&nbsp;</p>
<p>在自己的本本上测试的，Oracle 11gR2.&nbsp; 单Instance数据库单会话循环不间断取1-4万个值。</p>
<p>nocache：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.26s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10000　　　</p>
<p>cache:20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.46s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10000</p>
<p>cache:100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.37s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10000</p>
<p>cache:1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.31s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 40000</p>
<p>nocache：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9.33s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 40000</p>
<p>&nbsp;</p>
<p>基本上cache 大于20的时候性能基本可以接受，nocache的时候性能确实很差．</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/tianlesoftware/archive/2010/11/08/5995051.aspx</p>
<img src ="http://www.blogjava.net/tbest/aggbug/343804.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tbest/" target="_blank">liujg</a> 2011-01-31 11:49 <a href="http://www.blogjava.net/tbest/articles/343804.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)</title><link>http://www.blogjava.net/tbest/articles/339896.html</link><dc:creator>liujg</dc:creator><author>liujg</author><pubDate>Mon, 06 Dec 2010 06:39:00 GMT</pubDate><guid>http://www.blogjava.net/tbest/articles/339896.html</guid><wfw:comment>http://www.blogjava.net/tbest/comments/339896.html</wfw:comment><comments>http://www.blogjava.net/tbest/articles/339896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tbest/comments/commentRss/339896.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tbest/services/trackbacks/339896.html</trackback:ping><description><![CDATA[<span id="ArticleContent1_ArticleContent1_lblContent">&nbsp;
<p>--如何在oracle中导入dmp数据库文件？<br />
&nbsp;2006/2/16 zhanghua first create&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件，imp命令可以把dmp文件从本地导入到远处的数据库服务器中。&nbsp;利用这个功能可以构建两个相同的数据库，一个用来测试，一个用来正式使用。<br />
&nbsp;<br />
执行环境：可以在SQLPLUS.EXE或者DOS（命令行）中执行，<br />
&nbsp;DOS中可以执行时由于 在oracle 8i 中&nbsp; 安装目录\ora81\BIN被设置为全局路径，<br />
&nbsp;该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。<br />
&nbsp;oracle用java编写，SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。<br />
&nbsp;SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类，完成导入导出功能。<br />
&nbsp;<br />
下面介绍的是导入导出的实例。<br />
数据导出：<br />
&nbsp;1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中<br />
&nbsp;&nbsp; exp <a href="mailto:system/manager@TEST">system/manager@TEST</a> file=d:\daochu.dmp full=y<br />
&nbsp;2 将数据库中system用户与sys用户的表导出<br />
&nbsp;&nbsp; exp <a href="mailto:system/manager@TEST">system/manager@TEST</a> file=d:\daochu.dmp owner=(system,sys)<br />
&nbsp;3 将数据库中的表inner_notify、notify_staff_relat导出<br />
&nbsp;&nbsp;&nbsp; exp&nbsp;<a href="mailto:aichannel/aichannel@TESTDB2">aichannel/aichannel@TESTDB2</a> file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat)&nbsp;<br />
<br />
&nbsp;4 将数据库中的表table1中的字段filed1以"00"打头的数据导出<br />
&nbsp;&nbsp; exp <a href="mailto:system/manager@TEST">system/manager@TEST</a> file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"<br />
&nbsp; <br />
&nbsp; 上面是常用的导出，对于压缩，既用winzip把dmp文件可以很好的压缩。<br />
&nbsp; 也可以在上面命令后面 加上 compress=y 来实现。</p>
<p>数据的导入<br />
&nbsp;1 将D:\daochu.dmp 中的数据导入 TEST数据库中。<br />
&nbsp;&nbsp; imp <a href="mailto:system/manager@TEST">system/manager@TEST</a>&nbsp; file=d:\daochu.dmp<br />
&nbsp;&nbsp; imp <a href="mailto:aichannel/aichannel@HUST">aichannel/aichannel@HUST</a> full=y&nbsp; file=file= d:\data\newsmgnt.dmp ignore=y <br />
&nbsp;&nbsp; 上面可能有点问题，因为有的表已经存在，然后它就报错，对该表就不进行导入。<br />
&nbsp;&nbsp; 在后面加上 ignore=y 就可以了。<br />
&nbsp;2 将d:\daochu.dmp中的表table1 导入<br />
&nbsp;imp <a href="mailto:system/manager@TEST">system/manager@TEST</a>&nbsp; file=d:\daochu.dmp&nbsp; tables=(table1) <br />
&nbsp;<br />
&nbsp;基本上上面的导入导出够用了。不少情况要先是将表彻底删除，然后导入。<br />
&nbsp;<br />
注意：<br />
&nbsp;操作者要有足够的权限，权限不够它会提示。<br />
&nbsp;数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。</p>
<p>附录一：<br />
&nbsp;给用户增加导入数据权限的操作<br />
&nbsp;第一,启动sql*puls<br />
&nbsp;第二，以system/manager登陆<br />
&nbsp;第三，create user 用户名 IDENTIFIED BY 密码 （如果已经创建过用户，这步可以省略）<br />
&nbsp;第四，GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,<br />
&nbsp;&nbsp; DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,<br />
&nbsp;&nbsp;&nbsp; &nbsp; DBA,CONNECT,RESOURCE,CREATE SESSION&nbsp; TO 用户名字 <br />
&nbsp;第五, 运行-cmd-进入dmp文件所在的目录, <br />
&nbsp;&nbsp;&nbsp; &nbsp; imp userid=system/manager full=y file=*.dmp<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;或者 imp userid=system/manager full=y file=filename.dmp</p>
<p>&nbsp;执行示例:<br />
&nbsp;F:\Work\Oracle_Data\backup&gt;imp userid=test/test full=y file=inner_notify.dmp</p>
<p>屏幕显示<br />
Import: Release 8.1.7.0.0 - Production on 星期四 2月 16 16:50:05 2006<br />
(c) Copyright 2000 Oracle Corporation.&nbsp; All rights reserved.</p>
<p>连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production<br />
With the Partitioning option<br />
JServer Release 8.1.7.0.0 - Production</p>
<p>经由常规路径导出由EXPORT:V08.01.07创建的文件<br />
已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入<br />
导出服务器使用UTF8 NCHAR 字符集 (可能的ncharset转换)<br />
. 正在将AICHANNEL的对象导入到 AICHANNEL<br />
. . 正在导入表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "INNER_NOTIFY"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4行被导入<br />
准备启用约束条件...<br />
成功终止导入，但出现警告。</p>
<p>&nbsp;<br />
附录二：<br />
&nbsp;Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.<br />
&nbsp; 先建立import9.par,<br />
&nbsp; 然后，使用时命令如下：imp parfile=/filepath/import9.par<br />
&nbsp; 例 import9.par 内容如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROMUSER=TGPMS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TOUSER=TGPMS2&nbsp;&nbsp;&nbsp;&nbsp; （注：把表的拥有者由FROMUSER改为TOUSER，FROMUSER和TOUSER的用户可以不同）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ROWS=Y<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INDEXES=Y<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GRANTS=Y<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CONSTRAINTS=Y<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BUFFER=409600<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file==/backup/ctgpc_20030623.dmp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log==/backup/import_20030623.log</p>
<p>&nbsp;</p>
</span>http://dev.csdn.net/htmls/82/82431.html
<img src ="http://www.blogjava.net/tbest/aggbug/339896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tbest/" target="_blank">liujg</a> 2010-12-06 14:39 <a href="http://www.blogjava.net/tbest/articles/339896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)表空间不足的问题</title><link>http://www.blogjava.net/tbest/articles/326516.html</link><dc:creator>liujg</dc:creator><author>liujg</author><pubDate>Mon, 19 Jul 2010 05:18:00 GMT</pubDate><guid>http://www.blogjava.net/tbest/articles/326516.html</guid><wfw:comment>http://www.blogjava.net/tbest/comments/326516.html</wfw:comment><comments>http://www.blogjava.net/tbest/articles/326516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tbest/comments/commentRss/326516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tbest/services/trackbacks/326516.html</trackback:ping><description><![CDATA[<p>ORA-01658:unable to create INITIAL extent for segmnet in tablespace DATA01</p>
<p>原因：</p>
<p>表空间DATA01空间不足，导致数据无法插入。</p>
<p>Solution：</p>
<p>重新定义表空间大小： <br />
ALTER TABLESPACE DATA01 RESIZE 5G ;</p>
<p>将表空间删除后重新定义表空间： <br />
DROP TABLESPACE DATA01 INCLUDING CONTENTS AND DATAFILES ;</p>
<p><br />
CREATE TABLESPACE &#8220;DATA01&#8221; </p>
<p>LOGGING DATAFILE &#8217;D:\ORACLE\PRODUCT\10.2.0\SSVC\DATA01.DBF&#8217;</p>
<p>SIZE 5000M REUSE </p>
<p>DEFAULT STORAGE (INITIAL 10K NEXT 128K MINEXTENTS 1 MAXEXTENTS UMLIMITED PCTINCREASE 100) ;</p>
<p><br />
本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/yexianyi/archive/2009/08/23/4476216.aspx</p>
<img src ="http://www.blogjava.net/tbest/aggbug/326516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tbest/" target="_blank">liujg</a> 2010-07-19 13:18 <a href="http://www.blogjava.net/tbest/articles/326516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 取子串(转)</title><link>http://www.blogjava.net/tbest/articles/258840.html</link><dc:creator>liujg</dc:creator><author>liujg</author><pubDate>Tue, 10 Mar 2009 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/tbest/articles/258840.html</guid><wfw:comment>http://www.blogjava.net/tbest/comments/258840.html</wfw:comment><comments>http://www.blogjava.net/tbest/articles/258840.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/tbest/comments/commentRss/258840.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tbest/services/trackbacks/258840.html</trackback:ping><description><![CDATA[<span style="color: #0000ff">SUBSTRING <br />
返回字符、binary、text&nbsp; &nbsp; &nbsp; 或&nbsp; &nbsp; &nbsp; image&nbsp; &nbsp; &nbsp; 表达式的一部分。有关可与该函数一起使用的有效&nbsp; &nbsp; &nbsp; Microsoft&amp;reg;&nbsp; &nbsp; &nbsp; SQL&nbsp; &nbsp; &nbsp; Server&#8482;&nbsp; &nbsp; &nbsp; 数据类型的更多信息，请参见数据类型。&nbsp; <br />
<br />
语法 <br />
SUBSTRING&nbsp; &nbsp; &nbsp; (&nbsp; &nbsp; &nbsp; expression&nbsp; &nbsp; &nbsp; ,&nbsp; &nbsp; &nbsp; start&nbsp; &nbsp; &nbsp; ,&nbsp; &nbsp; &nbsp; length&nbsp; &nbsp; &nbsp; )&nbsp; <br />
<br />
参数 <br />
expression <br />
<br />
是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。 <br />
<br />
start <br />
<br />
是一个整数，指定子串的开始位置。 <br />
<br />
length <br />
<br />
是一个整数，指定子串的长度（要返回的字符数或字节数）。 <br />
<br />
substring() <br />
——任意位置取子串 <br />
<br />
left() <br />
right() <br />
——左右两端取子串 <br />
<br />
ltrim() <br />
rtrim() <br />
——截断空格，没有trim()。 <br />
<br />
charindex() <br />
patindex() <br />
——查子串在母串中的位置，没有返回0。区别：patindex支持通配符，charindex不支持。 <br />
<br />
<br />
函数功效： <br />
字符串截取函数，只限单字节字符使用（对于中文的截取时遇上奇数长度是会出现乱码，需另行处理），本函数可截取字符串指定范围内的字符。 <br />
<br />
应用范围： <br />
标题、内容截取 <br />
<br />
函数格式： <br />
string substr ( string string, int start [, int length]) <br />
参数1：处理字符串 <br />
参数2：截取的起始位置（第一个字符是从0开始） <br />
参数3：截取的字符数量 <br />
substr()更多介绍可在PHP官方手册中查询（字符串处理函数库） <br />
<br />
举例： <br />
substr("ABCDEFG", 0);&nbsp; &nbsp; //返回：ABCDEFG，截取所有字符 <br />
substr("ABCDEFG", 2);&nbsp; &nbsp; //返回：CDEFG，截取从C开始之后所有字符 <br />
substr("ABCDEFG", 0, 3); //返回：ABC，截取从A开始3个字符 <br />
substr("ABCDEFG", 0, 100); //返回：ABCDEFG，100虽然超出预处理的字符串最长度，但不会影响返回结果，系统按预处理字符串最大数量返回。 <br />
substr("ABCDEFG", 0, -3); //返回：EFG，注意参数-3，为负值时表示从尾部开始算起，字符串排列位置不变 <br />
<br />
<br />
例子: <br />
<br />
<br />
1.截取已知长度的函数 <br />
<br />
<br />
&nbsp; A.截取从字符串左边开始N个字符 <br />
<br />
&nbsp; &nbsp; Declare @S1 varchar(100) <br />
&nbsp; &nbsp; Select @S1='http://www.163.com' <br />
&nbsp; &nbsp; Select Left(@S1,4) <br />
&nbsp; &nbsp; ------------------------------------ <br />
&nbsp; &nbsp; 显示结果: http <br />
<br />
<br />
&nbsp; B.截取从字符串右边开始N个字符(例如取字符www.163.com) <br />
<br />
&nbsp; &nbsp; Declare @S1 varchar(100) <br />
&nbsp; &nbsp; Select @S1='http://www.163.com' <br />
&nbsp; &nbsp; Select right(@S1,11)&nbsp; <br />
&nbsp; &nbsp; ------------------------------------ <br />
&nbsp; &nbsp; 显示结果: www.163.com <br />
<br />
<br />
&nbsp; C.截取字符串中任意位置及长度(例如取字符www) <br />
<br />
&nbsp; &nbsp; Declare @S1 varchar(100) <br />
&nbsp; &nbsp; Select @S1='http://www.163.com' <br />
&nbsp; &nbsp; Select SUBSTRING(@S1,8,3)&nbsp; <br />
&nbsp; &nbsp; ------------------------------------ <br />
&nbsp; &nbsp; 显示结果: www.163.com <br />
<br />
&nbsp; &nbsp; 以上例子皆是已知截取位置及长度,下面介绍未知位置的例子 <br />
<br />
2.截取未知位置的函数 <br />
<br />
<br />
&nbsp; A.截取指定字符串后的字符串(例如截取http://后面的字符串) <br />
<br />
&nbsp; &nbsp; 方法一: <br />
<br />
&nbsp; &nbsp; Declare @S1 varchar(100) <br />
&nbsp; &nbsp; Select @S1='http://www.163.com'&nbsp; <br />
&nbsp; &nbsp; Select Substring(@S1,CHARINDEX('www',@S1)+1,Len(@S1)) <br />
&nbsp; &nbsp; /*此处也可以这样写:Select Substring(@S1,CHARINDEX('//',@S1)+2,Len(@S1))*/ <br />
&nbsp; &nbsp; ------------------------------------ <br />
&nbsp; &nbsp; 显示结果: www.163.com <br />
<br />
<br />
&nbsp; &nbsp; 需要注意:CHARINDEX函数搜索字符串时,不区分大小写,因此CHARINDEX('www',@S1)也可以写成CHARINDEX('WWW',@S1) <br />
<br />
&nbsp; &nbsp; 方法二:(与方法一类似) <br />
<br />
&nbsp; &nbsp; Declare @S1 varchar(100) <br />
&nbsp; &nbsp; Select @S1='http://www.163.com'&nbsp; <br />
&nbsp; &nbsp; Select Substring(@S1,PATINDEX('%www%',@S1)+1,Len(@S1)) <br />
&nbsp; &nbsp; --此处也可以这样写:Select Substring(@S1,PATINDEX('%//%',@S1)+2,Len(@S1)) <br />
&nbsp; &nbsp; ------------------------------------ <br />
&nbsp; &nbsp; 显示结果: www.163.com&nbsp; <br />
<br />
<br />
&nbsp; 函数PATINDEX与CHARINDEX区别在于:前者可以参数一些参数,增加查询的功能 <br />
<br />
&nbsp; &nbsp; 方法三: <br />
<br />
&nbsp; &nbsp; Declare @S1 varchar(100) <br />
&nbsp; &nbsp; Select @S1='http://www.163.com'&nbsp; <br />
&nbsp; &nbsp; Select REPLACE(@S1,'http://','') <br />
&nbsp; &nbsp; ------------------------------------ <br />
&nbsp; &nbsp; 显示结果: www.163.com <br />
<br />
<br />
&nbsp; 利用字符替换函数REPLACE,将除需要显示字符串外的字符替换为空 <br />
<br />
&nbsp; &nbsp; 方法四: <br />
<br />
&nbsp; &nbsp; Declare @S1 varchar(100) <br />
&nbsp; &nbsp; Select @S1='http://www.163.com'&nbsp; <br />
&nbsp; &nbsp; Select STUFF(@S1,CHARINDEX('http://',@S1),Len('http://'),'') <br />
&nbsp; &nbsp; ------------------------------------ <br />
&nbsp; &nbsp; 显示结果: www.163.com&nbsp; <br />
<br />
&nbsp; 函数STUFF与REPLACE区别在于:前者可以指定替换范围,而后者则是全部范围内替换 <br />
<br />
&nbsp; B.截取指定字符后的字符串(例如截取C:\Windows\test.txt中文件名) <br />
&nbsp; &nbsp; &nbsp; 与A不同的是,当搜索对象不是一个时,利用上面的方法只能搜索到第一个位置 <br />
<br />
&nbsp; &nbsp; 方法一: <br />
<br />
&nbsp; &nbsp; Declare @S1 varchar(100) <br />
&nbsp; &nbsp; Select @S1='C:\Windows\test.txt' <br />
&nbsp; &nbsp; select right(@S1,charindex('\',REVERSE(@S1))-1) <br />
&nbsp; &nbsp; ------------------------------------- <br />
&nbsp; &nbsp; 显示结果: text.txt <br />
<br />
<br />
利用函数REVERSE获取需要截取的字符串长度 <br />
<br />
&nbsp; <br />
<br />
<br />
substr() <br />
<br />
<br />
例子: <br />
<br />
private void DDL_AreaBind() <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; conn = new SqlConnection(ConfigurationManager.ConnectionStrings["strcon"].ConnectionString); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string str = "0000"; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cmd = new SqlCommand("select AreaID,Name=ltrim(Name) from Area where&nbsp; &nbsp; right(AreaID,4) ='" + str + "'", conn); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SqlDataAdapter sda = new SqlDataAdapter(cmd); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sda.Fill(ds, "area"); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.ddl_area.DataSource = ds.Tables["area"].DefaultView; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.ddl_area.DataTextField = "Name"; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.ddl_area.DataValueField = "AreaID"; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.ddl_area.DataBind(); <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cmd = new SqlCommand("select * from Area&nbsp; &nbsp; ", conn); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cmd.CommandType = CommandType.Text; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SqlDataAdapter adapter = new SqlDataAdapter(cmd); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; adapter.Fill(ds, "city"); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.ddl_city.DataSource = ds.Tables["city"].DefaultView; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.ddl_city.DataTextField = "Name"; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.ddl_city.DataValueField = "AreaID"; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.ddl_city.DataBind(); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
<br />
<br />
protected void ddl_area_SelectedIndexChanged(object sender, EventArgs e) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; conn = new SqlConnection(ConfigurationManager.ConnectionStrings["strcon"].ConnectionString); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.ddl_city.Enabled = true; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string str1="0000"; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cmd = new SqlCommand("select AreaID,Name from Area where substring(AreaID,1,2)='" + this.ddl_area.SelectedValue.Substring(0,2)&nbsp; &nbsp; + "' AND substring(AreaID,3,4) &lt;&gt; '0000' AND substring(AreaID,5,2)='00'&nbsp; &nbsp; ", conn); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cmd.CommandType = CommandType.Text; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SqlDataAdapter adapter = new SqlDataAdapter(cmd); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DataSet ds = new DataSet(); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; adapter.Fill(ds, "city"); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.ddl_city.DataSource = ds.Tables["city"].DefaultView; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.ddl_city.DataTextField = "Name"; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.ddl_city.DataValueField = "AreaID"; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.ddl_city.DataBind(); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span>
<img src ="http://www.blogjava.net/tbest/aggbug/258840.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tbest/" target="_blank">liujg</a> 2009-03-10 16:33 <a href="http://www.blogjava.net/tbest/articles/258840.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PL/SQL中用光标查询多条记录</title><link>http://www.blogjava.net/tbest/articles/186783.html</link><dc:creator>liujg</dc:creator><author>liujg</author><pubDate>Mon, 17 Mar 2008 07:55:00 GMT</pubDate><guid>http://www.blogjava.net/tbest/articles/186783.html</guid><wfw:comment>http://www.blogjava.net/tbest/comments/186783.html</wfw:comment><comments>http://www.blogjava.net/tbest/articles/186783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tbest/comments/commentRss/186783.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tbest/services/trackbacks/186783.html</trackback:ping><description><![CDATA[<p class="style35"><strong>一、 什么是光标</strong> </p>
<p class="style35"><strong style="color: black; background-color: #ffff66">Oracle</strong> 使用两种光标：显式光标和隐式光标。不管语句返回多少条纪录， PL/SQL 为使用的每一条 UPDATE 、 DELETE 和 INSERT 等 SQL 命令隐式的声明一个光标。（要管理 SQL 语句的处理，必须隐式的给它定义一个光标。）用户声明并使用显示光标处理 SELECT 语句返回的多条记录。显示的定义光标一种结构，它使用户能够为特定的语句指定内存区域，以便以后使用。 </p>
<p class="style35"><strong>二、 光标的作用</strong> </p>
<p class="style35">当 PL/SQL 光标查询返回多行数据时，这些记录组被称为活动集。 <strong style="color: black; background-color: #ffff66">Oracle</strong> 将这种活动集存储在您创建的显示定义的已命名的光标中。<strong style="color: black; background-color: #ffff66">Oracle</strong> 光标是一种用于轻松的处理多行数据的机制，没有光标， <strong style="color: black; background-color: #ffff66">Oracle</strong> 开发人员必须单独地、显式地取回并管理光标查询选择的每一条记录。 </p>
<p class="style35">光标的另一项功能事，它包含一个跟踪当前访问的记录的指针，这使您的程序能够一次处理多条记录。 </p>
<p class="style35"><strong>三、 使用显示光标的基本方法</strong> </p>
<p class="style35">步骤如下： </p>
<p class="style35"><strong>1 、声明光标</strong> </p>
<p class="style35">声明光标的语法如下： </p>
<p class="style35">DECLARE cursor_name </p>
<p class="style35">Is </p>
<p class="style35">SELECT statement </p>
<p class="style35">其中， cursor_name 是您给光标指定的名称； SELECT statement 是给光标活动集返回记录的查询。 </p>
<p class="style35">声明光标完成了下面两个目的： </p>
<p class="style35">给光标命名； </p>
<p class="style35">将一个查询与光标关联起来。 </p>
<p class="style35">值得注意的是，必须在 PL/SQL 块的声明部分声明光标；给光标指定的名称是一个未声明的标识符，而不是一个 PL/SQL 变量，不能给光标名称赋值，也不能将它用在表达式中。 PL/SQL 块使用这个名称来引用光标查询。 </p>
<p class="style35">例： DECLARE </p>
<p class="style35">CURSOR c1 </p>
<p class="style35">Is </p>
<p class="style35">SELECT VIEW_NAME FROM ALL_VIEWS </p>
<p class="style35">WHERE ROWNUM&lt;=10 ； </p>
<p class="style35">另外还可以在光标定义语句中声明光标的参数，例： </p>
<p class="style35">CURSOR c1 （ view _nbr number ） </p>
<p class="style35">Is </p>
<p class="style35">SELECT VIEW_NAME FROM ALL_VIEWS </p>
<p class="style35">WHERE ROWNUM&lt;= view _nbr ； </p>
<p class="style35">光标参数只对相应的光标是可见的，不能在光标范围之外引用该光标的参数。如果试图这样做， <strong style="color: black; background-color: #ffff66">Oracle</strong> 将返回一个错误，指出该变量没有定义。 </p>
<p class="style35"><strong>2 、打开光标</strong> </p>
<p class="style35">打开光标的语法如下： </p>
<p class="style35">OPEN cursor_name ； </p>
<p class="style35">其中 cursor_name 是您以前定义的光标名称。 </p>
<p class="style35">打开光标将激活查询并识别活动集，可是在执行光标取回命令之前，并没有真正取回记录。 OPEN 命令还初始化了光标指针，使其指向活动集的第一条记录。光标被打开后，直到关闭之前，取回到活动集的所有数据都是静态的，换句话说，光标忽略所有在光标打开之后，对数据执行的 SQL DML 命令（ INSERT 、 UPDATE 、 DELETE 和 SELECT ）。因此只有在需要时才打开它，要刷新活动集，只需关闭并重新打开光标即可。 </p>
<p class="style35"><strong>3 、从光标中取回数据</strong> </p>
<p class="style35">FETCH 命令以每次一条记录的方式取回活动集中的记录。通常将 FETCH 命令和某种迭代处理结合起来使用，在迭代处理中， FETCH 命令每执行一次，光标前进到活动集的下一条记录。 </p>
<p class="style35">FETCH 命令的语法： </p>
<p class="style35">FETCH cursor_name INTO record_list ； </p>
<p class="style35">其中， cursor_name 是前面定义的光标的名称； record_list 是变量列表，它接受活动集中的列。 FETCH 命令将活动集的结果放置到这些变量中。 </p>
<p class="style35">执行 FETCH 命令后，活动集中的结果被取回到 PL/SQL 变量中，以便在 PL/SQL 块中使用。每取回一条记录，光标的指针就移向活动集的下一条记录。 </p>
<p class="style35">例： </p>
<p class="style35">FETCH C1 INTO VNAME; </p>
<p class="style35">WHILE C1%FOUND LOOP </p>
<p class="style35">DBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)||' '||VNAME); </p>
<p class="style35">END LOOP; </p>
<p class="style35">其中，使用属性 '%FOUND' 使得当 FETCH 到达活动集的结尾时，不会引发异常。其它属性及含义见下表： </p>
<p class="style35">属性 含量 </p>
<p class="style35">%FOUND 布尔型属性，当最近一次该记录时成功返回，则值为 TRUE </p>
<p class="style35">%NOTFOUND 布尔型属性，它的值总与 %FOUND 属性的值相反 </p>
<p class="style35">%ISOPEN 布尔型属性，当光标是打开时返回 TRUE </p>
<p class="style35">%ROWCOUNT 数字型属性，返回已从光标中读取的记录数 </p>
<p class="style35">属性 含量 </p>
<p class="style35">%FOUND 布尔型属性，当最近一次该记录时成功返回，则值为 TRUE </p>
<p class="style35">%NOTFOUND 布尔型属性，它的值总与 %FOUND 属性的值相反 </p>
<p class="style35">%ISOPEN 布尔型属性，当光标是打开时返回 TRUE </p>
<p class="style35">%ROWCOUNT 数字型属性，返回已从光标中读取的记录数 </p>
<p class="style35"><strong>4 、<a name="baidusnap2"></a><strong style="color: black; background-color: #99ff99">关闭光标</strong></strong> </p>
<p class="style35">CLOSE 语句关闭以前打开的光标，使得活动集不确定。当用户的程序或会话结束时， <strong style="color: black; background-color: #ffff66">Oracle</strong> 隐式<strong style="color: black; background-color: #99ff99">关闭光标</strong>。光标被关闭后，就不能对它执行任何操作了 , 否则将引发异常。 </p>
<p class="style35">CLOSE 语句的语法是： </p>
<p class="style35">CLOSE cursor_name ； </p>
<p class="style35">其中， cursor_name 是以前打开的光标的名称。 </p>
<p class="style35">完整的程序代码如下： </p>
<p class="style35">DECLARE </p>
<p class="style35">CURSOR C1 IS SELECT VIEW_NAME FROM ALL_VIEWS </p>
<p class="style35">WHERE ROWNUM&lt;=10 </p>
<p class="style35">ORDER BY VIEW_NAME; </p>
<p class="style35">VNAME VARCHAR2(40); </p>
<p class="style35">BEGIN </p>
<p class="style35">OPEN C1; </p>
<p class="style35">FETCH C1 INTO VNAME; </p>
<p class="style35">WHILE C1%FOUND LOOP </p>
<p class="style35">DBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)||''||VNAME); </p>
<p class="style35">END LOOP; </p>
<p class="style35">END; </p>
<p class="style35">&#8230;&#8230; CLOSE C1; </p>
<p class="style35"><strong>四、 小结</strong> </p>
<p class="style35">光标是一种结构 , 能够以一次一条记录的方式处理多行查询的结果 . 为每条 DML 语句创建隐式光标 , 而显式光标是由用户创建的 , 以便处理返回多条记录的查询。而且 , 通过消除反复地分析代码 , 光标提高了代码的处理速度。 </p>
<img src ="http://www.blogjava.net/tbest/aggbug/186783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tbest/" target="_blank">liujg</a> 2008-03-17 15:55 <a href="http://www.blogjava.net/tbest/articles/186783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>漫 谈oracle 中 的 空 值（转）</title><link>http://www.blogjava.net/tbest/articles/186737.html</link><dc:creator>liujg</dc:creator><author>liujg</author><pubDate>Mon, 17 Mar 2008 05:33:00 GMT</pubDate><guid>http://www.blogjava.net/tbest/articles/186737.html</guid><wfw:comment>http://www.blogjava.net/tbest/comments/186737.html</wfw:comment><comments>http://www.blogjava.net/tbest/articles/186737.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/tbest/comments/commentRss/186737.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tbest/services/trackbacks/186737.html</trackback:ping><description><![CDATA[<center><font color="#0000c0">
<h2>漫 谈oracle 中 的 空 值 </h2>
</font>
<div align="right">摘自：<a href="http://www.computerworld.com.cn/" target="_blank">计算机世界日报</a></div>
<br />
<h3>河 北 省 统 计 局 贾 书 民 </h3>
</center>
<p><font color="#ffffff">----</font> 在 数 据 库 中， 空 值 用 来 表 示 实 际 值 未 知 或 无 意 义 的 情 况。 在 一 个 表 中， 如 果 一 行 中 的 某 列 没 有 值， 那 么 就 称 它 为 空 值（NULL）。 任 何 数 据 类 型 的 列, 只 要 没 有 使 用 非 空（NOT NULL） 或 主 键（PRIMARY KEY） 完 整 性 限 制， 都 可 以 出 现 空 值。 在 实 际 应 用 中， 如 果 忽 略 空 值 的 存 在， 将 会 造 成 造 成 不 必 要 的 麻 烦。
<p><font color="#ffffff">----</font> 例 如， 在 下 面 的 雇 员 表（EMP） 中， 雇 员 名（ENAME） 为KING 的 行， 因 为KING 为 最 高 官 员（PRESIDENT）， 他 没 有 主 管（MGR）， 所 以 其MGR 为 空 值。 因 为 不 是 所 有 的 雇 员 都 有 手 续 费（COMM）， 所 以 列COMM 允 许 有 空 值， 除300、500、1400、0 以 外 的 其 它 各 行COMM 均 为 空 值。
<pre>EMPNO ENAME    JOB       MGR HIREDATE    SAL   COMM  DEPTNO
---- -------- -------- --------- -------- ------ ---------
7369 SMITH     CLERK     7902 17-DEC-80  800           20
7499 ALLEN     SALESMAN  7698 20-FEB-81  1600    300   30
7521 WARD      SALESMAN  7698 22-FEB-81  1250    500   30
7566 JONES     MANAGER   7839 02-APR-81  2975          20
7654 MARTIN    SALESMAN  7698 28-SEP-81  1250   1400   30
7698 BLAKE     MANAGER   7839 01-MAY-81  2850          30
7782 CLARK     MANAGER   7839 09-JUN-81  2450          10
7788 SCOTT     ANALYST   7566 09-DEC-82  3000          20
7839 KING      PRESIDENT      17-NOV-81  5000          10
7844 TURNER    SALESMAN  7698 08-SEP-81  1500      0   30
7876 ADAMS     CLERK     7788 12-JAN-83  1100          20
7900 JAMES     CLERK     7698 03-DEC-81   950          30
7902 FORD      ANALYST   7566 03-DEC-81  3000          20
7934 MILLER    CLERK     7782 23-JAN-82  1300          10
</pre>
<p><font color="#ffffff">----</font> 本 文 将 以 上 述EMP 表 为 例， 具 体 讨 论 一 下 空 值 在 日 常 应 用 中 所 具 有 的 一 些 特 性。
<p><font color="#ffffff">----</font> 一、 空 值 的 生 成 及 特 点
<p><font color="#ffffff">----</font> 1. 空 值 的 生 成
<p><font color="#ffffff">----</font> 如 果 一 列 没 有 非 空（NOT NULL） 完 整 性 限 制， 那 么 其 缺 省 的 值 为 空 值， 即 如 果 插 入 一 行 时 未 指 定 该 列 的 值， 则 其 值 为 空 值。
<p><font color="#ffffff">----</font> 使 用SQL 语 句INSERT 插 入 行， 凡 未 涉 及 到 的 列， 其 值 为 空 值； 涉 及 到 的 列， 如 果 其 值 确 实 为 空 值， 插 入 时 可 以 用NULL 来 表 示（ 对 于 字 符 型 的 列， 也 可 以 用'' 来 表 示）。
<p><font color="#ffffff">----</font> 例： 插 入 一 行， 其EMPNO 为1、ENAME 为'JIA'、SAL 为10000、job 和comm 为 空 值。
<pre>SQL &gt;insert into emp(empno,ename,job,sal,comm)
values(1,'JIA',NULL,1000,NULL);
SQL &gt;select * from emp where empno=1;
EMPNO ENAME  JOB   MGR HIREDATE    SAL    COMM    DEPTNO
--------- ---------- --------- --------- --------- ---------
1 JIA         1000
</pre>
<p><font color="#ffffff">----</font> 可 以 看 到 新 插 入 的 一 行， 除job 和comm 为 空 值 外，mgr、hiredate、deptno 三 列 由 于 插 入 时 未 涉 及， 也 为 空 值。
<p><font color="#ffffff">----</font> 使 用SQL 语 句UPDATE 来 修 改 数 据， 空 值 可 用NULL 来 表 示（ 对 于 字 符 型 的 列， 也 可 以 用'' 来 表 示）。 例:
<pre>SQL &gt;update emp set ename=NULL,sal=NULL where empno=1;
</pre>
<p><font color="#ffffff">----</font> 2. 空 值 的 特 点
<p><font color="#ffffff">----</font> 空 值 具 有 以 下 特 点：
<p><font color="#ffffff">----</font> * 等 价 于 没 有 任 何 值。
<p><font color="#ffffff">----</font> * 与 0、 空 字 符 串 或 空 格 不 同。
<p><font color="#ffffff">----</font> * 在where 条 件 中, Oracle 认 为 结 果 为NULL 的 条 件 为FALSE， 带 有 这 样 条 件 的select 语 句 不 返 回 行， 并 且 不 返 回 错 误 信 息。 但NULL 和FALSE 是 不 同 的。
<p><font color="#ffffff">----</font> * 排 序 时 比 其 他 数 据 都 大。
<p><font color="#ffffff">----</font> * 空 值 不 能 被 索 引。
<p><font color="#ffffff">----</font> 二、 空 值 的 测 试
<p><font color="#ffffff">----</font> 因 为 空 值 表 示 缺 少 数 据， 所 以 空 值 和 其 它 值 没 有 可 比 性， 即 不 能 用 等 于、 不 等 于、 大 于 或 小 于 和 其 它 数 值 比 较， 当 然 也 包 括 空 值 本 身（ 但 是 在decode 中 例 外， 两 个 空 值 被 认 为 是 等 价）。 测 试 空 值 只 能 用 比 较 操 作 符IS NULL 和IS NOT NULL。 如 果 使 用 带 有 其 它 比 较 操 作 符 的 条 件 表 达 式， 并 且 其 结 果 依 赖 于 空 值， 那 么 其 结 果 必 定 是NULL。 在where 条 件 中，Oracle 认 为 结 果 为NULL 的 条 件 为FALSE， 带 有 这 样 条 件 的select 语 句 不 返 回 行， 也 不 返 回 错 误 信 息。
<p><font color="#ffffff">----</font> 例 如 查 询EMP 表 中MGR 为NULL 的 行：
<pre>SQL &gt;select * from emp where mgr='';
no rows selected
SQL &gt;select * from emp where mgr=null;
no rows selected
SQL &gt;select * from emp where mgr is null;
EMPNO ENAME  JOB  MGR HIREDATE   SAL  COMM  DEPTNO
---------- --------- --------- --------- ---------
7839 KING  PRESIDENT  17-NOV-81  5000        10
</pre>
<p><font color="#ffffff">----</font> 第1、2 句 写 法 不 妥，WHERE 条 件 结 果 为NULL， 不 返 回 行。 第 三 句 正 确， 返 回MGR 为 空 值 的 行。
<p><font color="#ffffff">----</font> 三、 空 值 和 操 作 符
<p><font color="#ffffff">----</font> 1. 空 值 和 逻 辑 操 作 符
<p><font color="#ffffff">----</font> 逻 辑 操 作 符
<p><font color="#ffffff">----</font> 表 达 式
<p><font color="#ffffff">----</font> 结 果
<pre>AND
NULL AND TRUE
NULL
NULL AND FALSE
FALSE
NULL AND NULL
NULL
OR
NULL OR TRUE
TRUE
NULL OR FALSE
NULL
NULL OR NULL
NULL
NOT
NOT NULL
NULL
</pre>
<p><font color="#ffffff">----</font> 可 以 看 到， 在 真 值 表 中， 除NULL AND FALSE 结 果 为FALSE、NULL OR TRUE 结 果 为TRUE 以 外， 其 它 结 果 均 为NULL。
<p><font color="#ffffff">----</font> 虽 然 在where 条 件 中，Oracle 认 为 结 果 为NULL 的WHERE 条 件 为FALSE， 但 在 条 件 表 达 式 中NULL 不 同 于FALSE。 例 如 在NOT （ NULL AND FALSE ） 和NOT （ NULL AND NULL ） 二 者 中 仅 有 一 处FALSE 和TRUE 的 区 别， 但NOT （ NULL AND FALSE ） 的 结 果 为 TRUE， 而NOT （ NULL AND NULL ） 的 结 果 为NULL。
<p><font color="#ffffff">----</font> 下 面 举 例 说 明 空 值 和 逻 辑 操 作 符 的 用 法：
<pre>SQL &gt; select * from emp where not comm=null and comm!=0;
no rows selected
SQL &gt; select * from emp where not ( not comm=null and comm!=0 );
EMPNO ENAME  JOB      MGR  HIREDATE  SAL  COMM  DEPTNO
---------- --------- --------- --------- ---------
7844 TURNER SALESMAN  7698 08-SEP-81 1500   0     30
</pre>
<p><font color="#ffffff">----</font> 第 一 个Select 语 句， 条 件"not comm=null and comm!=0" 等 价 于NULL AND COMM!=0。 对 于 任 意 一 行， 如 果COMM 为 不 等 于0 的 数 值， 条 件 等 价 于NULL AND TRUE， 结 果 为NULL； 如 果COMM 等 于0， 条 件 等 价 于NULL AND FALSE， 结 果 为FALSE。 所 以， 最 终 结 果 不 返 回 行。
<p><font color="#ffffff">----</font> 第 二 个Select 语 句 的 条 件 为 第 一 个Select 语 句 条 件 的" 非"（NOT）， 对 于 任 意 一 行， 如 果COMM 为 不 等 于0 的 数 值， 条 件 等 价 于NOT NULL， 结 果 为NULL； 如 果COMM 等 于0， 条 件 等 价 于NOT FALSE， 结 果 为TRUE。 所 以， 最 终 结 果 返 回 行COMM 等 于0 的 行。
<p><font color="#ffffff">----</font> 2. 空 值 和 比 较 操 作 符
<p><font color="#ffffff">----</font> （1）IS [NOT] NULL： 是 用 来 测 试 空 值 的 唯 一 操 作 符（ 见" 空 值 的 测 试"）。
<pre>（2）=、!=、&gt;=、&lt;=、&gt;、&lt;
SQL &gt;select ename,sal,comm from emp where sal &gt;comm;
ENAME            SAL      COMM
---------- --------- ---------
ALLEN           1600       300
WARD            1250       500
TURNER          1500         0
</pre>
<p><font color="#ffffff">----</font> sal 或comm 为 空 值 的 行，sal&gt;comm 比 较 结 果 为NULL， 所 以 凡 是sal 或comm 为 空 值 的 行 都 没 有 返 回。
<p><font color="#ffffff">----</font> （3）IN 和NOT IN 操 作 符
<pre>SQL &gt;select ename,mgr from emp where mgr in (7902,NULL);
ENAME            MGR
---------- ---------
SMITH           7902
</pre>
<p><font color="#ffffff">----</font> 在 上 述 语 句 中， 条 件"mgr in (7902,NULL)" 等 价 于mgr=7902 or mgr=NULL。 对 于 表EMP 中 的 任 意 一 行， 如 果mgr 为NULL， 则 上 述 条 件 等 价 于NULL OR NULL， 即 为NULL； 如 果mgr 为 不 等 于7902 的 数 值， 则 上 述 条 件 等 价 于FALSE OR NULL， 即 为NULL； 如 果mgr 等 于7902， 则 上 述 条 件 等 价 于TRUE OR NULL， 即 为TRUE。 所 以， 最 终 结 果 能 返 回mgr 等 于7902 的 行。
<pre>SQL &gt;select deptno from emp where deptno not in ('10',NULL);
no rows selected
</pre>
<p><font color="#ffffff">----</font> 在 上 述 语 句 中， 条 件"deptno not in ('10',NULL)" 等 价 于deptno!='10' and deptno!=NULL， 对 于EMP 表 中 的 任 意 一 行， 条 件 的 结 果 只 能 为NULL 或FALSE， 所 以 不 返 回 行。
<p><font color="#ffffff">----</font> （4）any,some
<pre>SQL &gt;select ename,sal from emp where sal &gt; any(3000,null);
ENAME            SAL
---------- ---------
KING            5000
</pre>
<p><font color="#ffffff">----</font> 条 件"sal &gt; any(3000,null)" 等 价 于sal &gt;3000 or sal &gt;null。 类 似 前 述（3） 第 一 句， 最 终 结 果 返 回 所 有sal &gt;3000 的 行。
<p><font color="#ffffff">----</font> （5）All
<pre>SQL &gt;select ename,sal from emp where sal &gt; all(3000,null);
no rows selected
</pre>
<p><font color="#ffffff">----</font> 条 件"sal&gt; all(3000,null)" 等 价 于sal &gt;3000 and sal &gt;null, 结 果 只 能 为NULL 或FALSE， 所 以 不 返 回 行。
<p><font color="#ffffff">----</font> （6）（not）between
<pre>SQL &gt;select ename,sal from emp where sal between null and 3000;
no rows selected
</pre>
<p><font color="#ffffff">----</font> 条 件"sal between null and 3000" 等 价 于sal &gt;=null and sal&lt; =3000, 结 果 只 能 为NULL 或FALSE， 所 以 不 返 回 行。
<pre>SQL &gt;select ename,sal from emp where sal not between null and 3000;
ENAME            SAL
---------- ---------
KING            5000
</pre>
<p><font color="#ffffff">----</font> 条 件"sal not between null and 3000" 等 价 于sal<null or sal>3000, 类 似 前 述（3） 的 第 一 句， 结 果 返 回sal&gt;3000 的 行。
<p><font color="#ffffff">----</font> 下 表 为 比 较 操 作 符 和 空 值 的 小 结：
<p><font color="#ffffff">----</font> 比 较 操 作 符
<p><font color="#ffffff">----</font> 表 达 式（ 例：A、B 是NULL、C=10）
<p><font color="#ffffff">----</font> 结 果
<pre>IS NULL、IS NOT NULL
A IS NULL
TRUE
A IS NOT NULL
FALSE
C IS NULL
FALSE
C IS NOT NULL
TRUE
=、!=、&gt;=、&lt; =、&gt;、&lt;
A = NULL
NULL
A &gt; NULL
NULL
C = NULL
NULL
C &gt; NULL
NULL
IN (=ANY)
A IN (10,NULL)
NULL
C IN (10,NULL)
TRUE
C IN (20,NULL)
NULL
NOT IN
( 等 价 于 ！=ALL)
A NOT IN (20,NULL)
NULL
C NOT IN (20,NULL)
FALSE
C NOT IN (10,NULL)
NULL
ANY，SOME
A &gt; ANY(5,NULL)
NULL
C &gt; ANY(5,NULL)
TRUE
C &gt; ANY(15,NULL)
NULL
ALL
A &gt; ALL(5,NULL)
NULL
C &gt; ALL(5,NULL)
NULL
C &gt; ALL(15,NULL)
FALSE
(NOT)BETWEEN
A BETWEEN 5 AND NULL
NULL
C BETWEEN 5 AND NULL
NULL
C BETWEEN 15 AND NULL
FALSE
A NOT BETWEEN 5 AND NULL
NULL
C NOT BETWEEN 5 AND NULL
NULL
C NOT BETWEEN 15 AND NULL
TRUE
</pre>
<p><font color="#ffffff">----</font> 3、 空 值 和 算 术、 字 符 操 作 符
<p><font color="#ffffff">----</font> （1） 算 术 操 作 符： 空 值 不 等 价 于0， 任 何 含 有 空 值 的 算 术 表 达 式 其 运 算 结 果 都 为 空 值， 例 如 空 值 加10 为 空 值。
<p><font color="#ffffff">----</font> （2） 字 符 操 作 符||： 因 为ORACLE 目 前 处 理 零 个 字 符 值 的 方 法 与 处 理 空 值 的 方 法 相 同（ 日 后 的 版 本 中 不 一 定 仍 然 如 此）， 所 以 对 于||， 空 值 等 价 于 零 个 字 符 值。 例：
<pre>SQL &gt;select ename,mgr,ename||mgr,sal,comm,sal+comm from emp;
ENAME            MGR ENAME||MGR          SAL      COMM  SAL+COMM
---------- --------- ------------- --------- --------- ---------
SMITH           7902 SMITH7902           800
ALLEN           7698 ALLEN7698          1600       300      1900
WARD            7698 WARD7698           1250       500      1750
JONES           7839 JONES7839          2975
MARTIN          7698 MARTIN7698         1250      1400      2650
BLAKE           7839 BLAKE7839          2850
CLARK           7839 CLARK7839          2450
SCOTT           7566 SCOTT7566          3000
KING                 KING               5000
TURNER          7698 TURNER7698         1500         0      1500
ADAMS           7788 ADAMS7788          1100
JAMES           7698 JAMES7698           950
FORD            7566 FORD7566           3000
MILLER          7782 MILLER7782         1300
</pre>
<p><font color="#ffffff">----</font> 我 们 可 以 看 到， 凡mgr 为 空 值 的，ename||mgr 结 果 等 于ename； 凡 是comm 为 空 值 的 行，sal+comm 均 为 空 值。
<p><font color="#ffffff">----</font> 四、 空 值 和 函 数
<p><font color="#ffffff">----</font> 1 ． 空 值 和 度 量 函 数
<p><font color="#ffffff">----</font> 对 于 度 量 函 数， 如 果 给 定 的 参 数 为 空 值， 则 其（NVL、TRANSLATE 除 外） 返 回 值 为 空 值。 如 下 例 中 的ABS（COMM）， 如 果COMM 为 空 值，ABS(COMM) 为 空 值。
<pre>SQL &gt; select ename,sal,comm,abs(comm) from emp where sal&lt; 1500;
ENAME            SAL      COMM ABS(COMM)
---------- --------- --------- ---------
SMITH            800
WARD            1250       500       500
MARTIN          1250      1400      1400
ADAMS           1100
JAMES            950
MILLER          1300
</pre>
<p><font color="#ffffff">----</font> 2. 空 值 和 组 函 数
<p><font color="#ffffff">----</font> 组 函 数 忽 略 空 值。 在 实 际 应 用 中， 根 据 需 要 可 利 用nvl 函 数 用 零 代 替 空 值。 例：
<pre>SQL &gt;select count(comm),sum(comm),avg(comm) from emp;
COUNT(COMM) SUM(COMM) AVG(COMM)
----------- --------- ---------
4      2200       550
SQL &gt;select count(nvl(comm,0)),sum(nvl(comm,0)),avg(nvl(comm,0))
from emp;
COUNT(NVL(COMM,0)) SUM(NVL(COMM,0)) AVG(NVL(COMM,0))
------------------ ---------------- ----------------
14             2200        157.14286
</pre>
<p><font color="#ffffff">----</font> 第 一 个SELECT 语 句 忽 略COMM 为 空 值 的 行， 第 二 个SELECT 语 句 使 用NVL 函 数 统 计 了 所 有 的COMM， 所 以 它 们 统 计 的 个 数、 平 均 值 都 不 相 同。 另 外 需 要 注 意 的 是， 在 利 用 组 函 数 进 行 数 据 处 理 时， 不 同 的 写 法 具 有 不 同 的 不 同 含 义， 在 实 际 应 用 中 应 灵 活 掌 握。 例 如：
<pre>SQL &gt;select deptno,sum(sal),sum(comm),
sum(sal+comm),sum(sal)+sum(comm),sum(nvl(sal,0)+nvl(comm,0))
from emp
group by deptno;
DEPTNO  SUM(SAL) SUM(COMM) SUM(SAL+COMM) SUM(SAL)
+SUM(COMM) SUM(NVL(SAL,0)+NVL(COMM,0))
--------- --------- --------- ------------- -------
10   8750                             8750
20   10875                            10875
30   9400      2200       7800        11600 11600
</pre>
<p><font color="#ffffff">----</font> 可 以 看 到SUM(SAL+COMM)、SUM(SAL)+SUM(COMM)、 SUM(NVL(SAL,0)+NVL(COMM,0)) 的 区 别：SUM(SAL+COMM) 为 先 加 然 后 计 算 各 行 的 和， 如 果SAL、COMM 中 有 一 个 为NULL， 则 该 行 忽 略 不 计；SUM(SAL)+SUM(COMM) 为 先 计 算 各 行 的 合 计 然 后 再 加，SAL、COMM 中 的NULL 都 忽 略 不 计， 但 如 果 SUM(SAL)、SUM(COMM) 二 者 的 结 果 之 中 有 一 个 为NULL， 则 二 者 之 和 为NULL； 在SUM(NVL(SAL,0)+NVL(COMM,0)) 里，SAL、COMM 中 的NULL 按0 处 理。
<p><font color="#ffffff">----</font> 五、 空 值 的 其 它 特 性
<p><font color="#ffffff">----</font> 1. 空 值 在 排 序 时 大 于 任 何 值。 例 如：
<pre>SQL &gt; select ename,comm from emp where deptno='30' order by comm；
ENAME           COMM
---------- ---------
TURNER             0
ALLEN            300
WARD             500
MARTIN          1400
BLAKE
JAMES
</pre>
<p><font color="#ffffff">----</font> 2. 空 值 不 能 被 索 引。 虽 然 在 某 列 上 建 立 了 索 引， 但 是 对 该 列 的 空 值 查 询 来 说， 因 为 空 值 没 有 被 索 引， 所 以 不 能 改 善 查 询 的 效 率。 例 如 下 面 的 查 询 不 能 利 用 在MGR 列 上 创 建 的 索 引。
<pre>SQL &gt;select ename from emp where mgr is null;
ENAME
----------
KING
</pre>
<p><font color="#ffffff">----</font> 另 外 正 是 因 为 空 值 不 被 索 引， 所 以 可 在 含 有 空 值 的 列 上 建 立 唯 一 性 索 引（UNIQUE INDEX）。 例 如， 可 以 在EMP 表 的COMM 列 上 建 立 唯 一 性 索 引：
<pre>SQL &gt;  create unique index emp_comm on emp(comm);
Index created.
</pre>
<img src ="http://www.blogjava.net/tbest/aggbug/186737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tbest/" target="_blank">liujg</a> 2008-03-17 13:33 <a href="http://www.blogjava.net/tbest/articles/186737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PowerDesigner 使用 （转载）</title><link>http://www.blogjava.net/tbest/articles/158856.html</link><dc:creator>liujg</dc:creator><author>liujg</author><pubDate>Wed, 07 Nov 2007 08:36:00 GMT</pubDate><guid>http://www.blogjava.net/tbest/articles/158856.html</guid><wfw:comment>http://www.blogjava.net/tbest/comments/158856.html</wfw:comment><comments>http://www.blogjava.net/tbest/articles/158856.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tbest/comments/commentRss/158856.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tbest/services/trackbacks/158856.html</trackback:ping><description><![CDATA[<p>原文：<a href="http://blog.csdn.net/casularm/archive/2005/10/28/518266.aspx">http://blog.csdn.net/casularm/archive/2005/10/28/518266.aspx</a><strong><br />
一、PowerDesigner 简介</strong>　</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PowerDesigner是Sybase公司的CASE工具集，使用它可以方便地对管理信息系统进行分析设计，它几乎包括了数据库模型设计的全过程。利用PowerDesigner可以制作数据流程图、概念数据模型、物理数据模型，可以生成多种客户端开发工具的应用程序，还可为数据仓库制作结构模型，也能对团队设计模型进行控制。它可与许多流行的数据库设计软件，例如：PowerBuilder，Delphi，VB等相配合使用来缩短开发时间和使系统设计更优化。 <br />
<br />
<strong>PowerDesigner主要包括以下几个功能部分：</strong> <br />
　　（1） DataArchitect <br />
这是一个强大的数据库设计工具，使用DataArchitect可利用实体-关系图为一个信息系统创建"概念数据模型"－CDM（Conceptual Data Model）。并且可根据CDM产生基于某一特定数据库管理系统（例如：Sybase System 11）的"物理数据模型"-PDM(Physical Data Model)。还可优化PDM，产生为特定DBMS创建数据库的SQL语句并可以文件形式存储以便在其他时刻运行这些SQL语句创建数据库。另外，DataArchitect还可根据已存在的数据库反向生成PDM，CDM及创建数据库的SQL脚本。 <br />
　　（2） ProcessAnalyst <br />
这部分用于创建功能模型和数据流图，创建"处理层次关系"。 <br />
　　（3） AppModeler <br />
为客户/服务器应用程序创建应用模型。 <br />
　　（4） ODBC Administrator <br />
此部分用来管理系统的各种数据源。 <br />
<br />
<strong>PowerDesigner的4种模型文件：</strong> <br />
概念数据模型 (CDM) <br />
CDM 表现数据库的全部逻辑的结构,与任何的软件或数据储藏结构无关。 一个概念模型经常包括在物理数据库中仍然不实现的数据对象。 它给运行计划或业务活动的数据一个正式表现方式。 <br />
物理数据模型 (PDM) <br />
PDM 叙述数据库的物理实现。 <br />
藉由 PDM ，你考虑真实的物理实现的细节。 它进入帐户两个软件或数据储藏结构之内拿。 你能修正 PDM 适合你的表现或物理约束。 <br />
面向对象模型 (OOM) <br />
一个OOM包含一系列包，类，接口 , 和他们的关系。 这些对象一起形成所有的 ( 或部份) 一个软件系统的逻辑的设计视图的类结构。 一个OOM本质上是软件系统的一个静态的概念模型。 <br />
你使用 PowerDesigner 面向对象模型建立面向对象模型.(OOM) 你能为纯粹地对象- 导向的靠模切目的建立一个OOM, 产生Java文件或者PowerBuilder文件，或你能使用一个来自OOM的物理数据模型(PDM)对象 , 来表示关系数据库设计分析。 <br />
业务程序模型 (BPM) <br />
BPM 描述业务的各种不同内在任务和内在流程，而且客户如何以这些任务和流程互相影响。 <br />
BPM 是从业务合伙人的观点来看业务逻辑和规则的概念模型，使用一个图表描述 <br />
程序，流程，信息和合作协议之间的交互作用。 <br />
<br />
以下是其中的CDM PDM OOM三者的转换关系<br />
<br />
<img alt="" src="mk:@MSITStore:C:\Documents%20and%20Settings\vincent\桌面\PowerDisigner.chm::/【专题】使用PowerDesigner进行数据建模（一）－－PowerDesigner简介%20-%20浮云论坛.files/1498516-CMDPDMOOM-embed.jpg" align="absMiddle" border="0" /> </p>
<p><span class="javascript"><strong>使用PowerDesigner环境</strong> <br />
<br />
对象浏览器 <br />
对象浏览器可以用分层结构显示你的工作空间. <br />
输出窗口 <br />
显示操作的结果。 <br />
结果列表 <br />
用于显示生成、覆盖和模型检查结果，以及设计环境的总体信息。 <br />
图表窗口 <br />
用于组织模型中的图表，以图形方式显示模型中各对象之间的关系。<br />
<br />
<img alt="" src="mk:@MSITStore:C:\Documents%20and%20Settings\vincent\桌面\PowerDisigner.chm::/【专题】使用PowerDesigner进行数据建模（一）－－PowerDesigner简介%20-%20浮云论坛.files/1498520-PD-embed.jpg" align="absMiddle" border="0" /></span>&nbsp;<br />
<br />
我也不知道只有这些。。。。<br />
</p>
 <img src ="http://www.blogjava.net/tbest/aggbug/158856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tbest/" target="_blank">liujg</a> 2007-11-07 16:36 <a href="http://www.blogjava.net/tbest/articles/158856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL 查找重复记录(转)</title><link>http://www.blogjava.net/tbest/articles/125152.html</link><dc:creator>liujg</dc:creator><author>liujg</author><pubDate>Tue, 19 Jun 2007 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/tbest/articles/125152.html</guid><wfw:comment>http://www.blogjava.net/tbest/comments/125152.html</wfw:comment><comments>http://www.blogjava.net/tbest/articles/125152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tbest/comments/commentRss/125152.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tbest/services/trackbacks/125152.html</trackback:ping><description><![CDATA[<table style="TABLE-LAYOUT: fixed">
    <tbody>
        <tr>
            <td>
            <div class=cnt>文章来自此人博客：<a href="http://hi.baidu.com/zg110/blog">http://hi.baidu.com/zg110/blog</a>，在这里表示感谢！<br>表stuinfo，有三个字段recno(自增),stuid,stuname<br><br>建该表的Sql语句如下：<br><br>CREATE TABLE [StuInfo] (<br>[recno] [int] IDENTITY (1, 1) NOT NULL ,<br>[stuid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,<br>[stuname] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL <br>) ON [PRIMARY]<br>GO<br><br>1.--查某一列(或多列)的重复值(只能查出重复记录的值，不能整个记录的信息)<br>--如:查找stuid,stuname重复的记录<br>select stuid,stuname from stuinfo<br>group by stuid,stuname<br>having(count(*))&gt;1<br><br>2.--查某一列有重复值的记录(这种方法查出的是所有重复的记录,也就是说如果有两条记录重复的，就查出两条)<br>--如:查找stuid重复的记录<br>select * from stuinfo<br>where stuid in (<br>select stuid from stuinfo<br>group by stuid<br>having(count(*))&gt;1<br>)<br><br>3.--查某一列有重复值的记录(只显示多余的记录,也就是说如果有三条记录重复的，就显示两条)<br>--这种方成绩的前提是：需有一个不重复的列,本例中的是recno<br>--如:查找stuid重复的记录<br>select * from stuinfo s1<br>where recno not in (<br>select max(recno) from stuinfo s2<br>where s1.stuid=s2.stuid<br>)<br>
            <p>&nbsp;</p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
  <img src ="http://www.blogjava.net/tbest/aggbug/125152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tbest/" target="_blank">liujg</a> 2007-06-19 17:13 <a href="http://www.blogjava.net/tbest/articles/125152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>