﻿<?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/supercrsky/category/27521.html</link><description>专注于JavaWeb开发</description><language>zh-cn</language><lastBuildDate>Tue, 29 Apr 2008 04:12:14 GMT</lastBuildDate><pubDate>Tue, 29 Apr 2008 04:12:14 GMT</pubDate><ttl>60</ttl><item><title>使用虚拟索引进行数据库优化</title><link>http://www.blogjava.net/supercrsky/articles/197026.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Tue, 29 Apr 2008 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/197026.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/197026.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/197026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/197026.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/197026.html</trackback:ping><description><![CDATA[<p>在数据库优化中，索引的重要性不言而喻。但是，在性能调整过程中，一个索引是否能被查询用到，在索引创建之前是无法确定的，而创建索引是一个代价比较高的操作，尤其是数据量较大的时候。</p>
<p>虚拟索引（Virtual Index）不是物理存在的，它并不会创建实际的索引段，只是在数据字典中加了一个索引的记录，使得优化器能够意识到一个索引的存在，从而判断是否使用该索引作为访问路径。当然，实际上最终查询的访问路径是不会使用该虚拟索引的。</p>
<p>所以，虚拟索引的用处就是用来判断一个索引对于sql的执行计划的影响，尤其是对整个数据库的影响，从而判断是否需要创建物理索引。</p>
<p>oracle文档中并没有提到虚拟索引的创建语法，实际上就是普通索引语法后面加一个nosegment关键字即可，B*Tree index和bitmap index都可以。</p>
<p></p>
<p>不同版本的虚拟索引的特性可能不一样，本文的例子执行环境为：</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">select</span><span style="color: gray"> * </span><span style="color: green">from</span><span style="color: gray"> </span><span style="color: blue">v</span><span style="color: gray">$</span><span style="color: blue">version</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: blue">BANNER</span><span style="color: gray"><br />
--------------------------------------------------------------</span><span style="color: #ffa500">--<br />
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod</span><span style="color: gray"><br />
</span><span style="color: blue">PL</span><span style="color: gray">/</span><span style="color: green">SQL</span><span style="color: gray"> </span><span style="color: blue">Release</span><span style="color: gray"> </span><span style="color: maroon">10.2.0.3.0</span><span style="color: gray"> - </span><span style="color: blue">Production</span><span style="color: gray"><br />
</span><span style="color: blue">CORE</span><span style="color: gray">&nbsp; &nbsp; </span><span style="color: maroon">10.2.0.3.0</span><span style="color: gray">&nbsp; &nbsp; &nbsp; </span><span style="color: blue">Production</span><span style="color: gray"><br />
</span><span style="color: blue">TNS</span><span style="color: gray"> </span><span style="color: green">for</span><span style="color: gray"> </span><span style="color: maroon">32</span><span style="color: gray">-</span><span style="color: green">bit</span><span style="color: gray"> </span><span style="color: blue">Windows</span><span style="color: gray">: </span><span style="color: blue">Version</span><span style="color: gray"> </span><span style="color: maroon">10.2.0.3.0</span><span style="color: gray"> - </span><span style="color: blue">Production</span><span style="color: gray"><br />
</span><span style="color: blue">NLSRTL</span><span style="color: gray"> </span><span style="color: blue">Version</span><span style="color: gray"> </span><span style="color: maroon">10.2.0.3.0</span><span style="color: gray"> - </span><span style="color: blue">Production</span></div>
</div>
<p>1.创建虚拟索引</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">create</span><span style="color: gray"> </span><span style="color: green">table</span><span style="color: gray"> </span><span style="color: blue">test</span><span style="color: olive">(</span><span style="color: blue">id</span><span style="color: gray"> </span><span style="color: green">int</span><span style="color: gray">,</span><span style="color: #00008b">name</span><span style="color: gray"> </span><span style="color: blue">varchar2</span><span style="color: olive">(</span><span style="color: maroon">30</span><span style="color: olive">))</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: green">Table</span><span style="color: gray"> </span><span style="color: blue">created</span><span style="color: gray">.<br />
&nbsp;<br />
</span><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">insert</span><span style="color: gray"> </span><span style="color: green">into</span><span style="color: gray"> </span><span style="color: blue">test</span><span style="color: gray"> </span><span style="color: green">select</span><span style="color: gray"> </span><span style="color: blue">rownum</span><span style="color: gray">,</span><span style="color: blue">object_name</span><span style="color: gray"> </span><span style="color: green">from</span><span style="color: gray"> </span><span style="color: blue">all_objects</span><span style="color: gray"> </span><span style="color: green">where</span><span style="color: gray"> </span><span style="color: blue">rownum</span><span style="color: gray">&lt;</span><span style="color: maroon">1001</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: maroon">1000</span><span style="color: gray"> </span><span style="color: green">rows</span><span style="color: gray"> </span><span style="color: blue">created</span><span style="color: gray">.<br />
&nbsp;<br />
</span><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">commit</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: green">Commit</span><span style="color: gray"> </span><span style="color: blue">complete</span><span style="color: gray">.<br />
&nbsp;<br />
</span><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">create</span><span style="color: gray"> </span><span style="color: green">unique</span><span style="color: gray"> </span><span style="color: blue">index</span><span style="color: gray"> </span><span style="color: blue">ix_test</span><span style="color: gray"> </span><span style="color: green">on</span><span style="color: gray"> </span><span style="color: blue">test</span><span style="color: olive">(</span><span style="color: blue">id</span><span style="color: olive">)</span><span style="color: gray"> </span><span style="color: blue">nosegment</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: blue">Index</span><span style="color: gray"> </span><span style="color: blue">created</span><span style="color: gray">.<br />
&nbsp;<br />
</span><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: blue">analyze</span><span style="color: gray"> </span><span style="color: green">table</span><span style="color: gray"> </span><span style="color: blue">test</span><span style="color: gray"> </span><span style="color: blue">compute</span><span style="color: gray"> </span><span style="color: blue">statistics</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: green">Table</span><span style="color: gray"> </span><span style="color: blue">analyzed</span><span style="color: gray">.</span></div>
</div>
<p>2.使用虚拟索引</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: blue">explain</span><span style="color: gray"> </span><span style="color: blue">plan</span><span style="color: gray"> </span><span style="color: green">for</span><span style="color: gray"> </span><span style="color: green">select</span><span style="color: gray"> * </span><span style="color: green">from</span><span style="color: gray"> </span><span style="color: blue">test</span><span style="color: gray"> </span><span style="color: green">where</span><span style="color: gray"> </span><span style="color: blue">id</span><span style="color: gray">=</span><span style="color: maroon">1</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: blue">Explained</span><span style="color: gray">.<br />
&nbsp;<br />
</span><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">select</span><span style="color: gray"> * </span><span style="color: green">from</span><span style="color: gray"> </span><span style="color: green">table</span><span style="color: olive">(</span><span style="color: blue">dbms_xplan</span><span style="color: gray">.</span><span style="color: blue">display</span><span style="color: olive">())</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: blue">PLAN_TABLE_OUTPUT</span><span style="color: gray"><br />
------------------------------------------------------------------------</span><span style="color: #ffa500">--<br />
Plan hash value: 1357081020</span><span style="color: gray"><br />
&nbsp;<br />
------------------------------------------------------------------------</span><span style="color: #ffa500">--<br />
| Id&nbsp; | Operation&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| Name | Rows&nbsp; | Bytes | Cost (%CPU)| Time&nbsp; &nbsp; &nbsp;|</span><span style="color: gray"><br />
------------------------------------------------------------------------</span><span style="color: #ffa500">--<br />
|&nbsp; &nbsp;0 | SELECT STATEMENT&nbsp; |&nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp;1 |&nbsp; &nbsp; 17 |&nbsp; &nbsp; &nbsp;3&nbsp; &nbsp;(0)| 00:00:01 |</span><span style="color: gray"><br />
|*&nbsp; </span><span style="color: maroon">1</span><span style="color: gray"> |&nbsp; </span><span style="color: green">TABLE</span><span style="color: gray"> </span><span style="color: blue">ACCESS</span><span style="color: gray"> </span><span style="color: green">FULL</span><span style="color: gray">| </span><span style="color: blue">TEST</span><span style="color: gray"> |&nbsp; &nbsp; &nbsp;</span><span style="color: maroon">1</span><span style="color: gray"> |&nbsp; &nbsp; </span><span style="color: maroon">17</span><span style="color: gray"> |&nbsp; &nbsp; &nbsp;</span><span style="color: maroon">3</span><span style="color: gray">&nbsp; &nbsp;</span><span style="color: olive">(</span><span style="color: maroon">0</span><span style="color: olive">)</span><span style="color: gray">| </span><span style="color: maroon">00</span><span style="color: gray">:</span><span style="color: maroon">00</span><span style="color: gray">:</span><span style="color: maroon">01</span><span style="color: gray"> |<br />
--------------------------------------------------------------------------</span></div>
</div>
<p><strong>必须设置隐含参数&#8221;_use_nosegment_indexes&#8221;=true（默认为false)后，CBO才能使用虚拟索引ix_test</strong></p>
<div class="hl-surround">
<div class="hl-main"><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">alter</span><span style="color: gray"> </span><span style="color: green">session</span><span style="color: gray"> </span><span style="color: green">set</span><span style="color: gray"> </span><span style="color: #8b0000">"</span><span style="color: red">_use_nosegment_indexes</span><span style="color: #8b0000">"</span><span style="color: gray">=</span><span style="color: green">true</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: green">Session</span><span style="color: gray"> </span><span style="color: blue">altered</span><span style="color: gray">.<br />
&nbsp;<br />
</span><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">select</span><span style="color: gray"> * </span><span style="color: green">from</span><span style="color: gray"> </span><span style="color: green">table</span><span style="color: olive">(</span><span style="color: blue">dbms_xplan</span><span style="color: gray">.</span><span style="color: blue">display</span><span style="color: olive">())</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: blue">PLAN_TABLE_OUTPUT</span><span style="color: gray"><br />
------------------------------------------------------------------------</span><span style="color: #ffa500">--<br />
Plan hash value: 166686173</span><span style="color: gray"><br />
&nbsp;<br />
--------------------------------------------------------------------------</span><span style="color: #ffa500">--<br />
| Id&nbsp; | Operation&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| Name&nbsp; &nbsp; | Rows&nbsp; | Bytes | Cost (%CPU)| Time&nbsp; &nbsp; &nbsp;|</span><span style="color: gray"><br />
--------------------------------------------------------------------------</span><span style="color: #ffa500">--<br />
|&nbsp; &nbsp;0 | SELECT STATEMENT&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp;1 |&nbsp; &nbsp; 17 |&nbsp; &nbsp; &nbsp;2&nbsp; &nbsp;(0)| 00:00:01 |</span><span style="color: gray"><br />
|&nbsp; &nbsp;</span><span style="color: maroon">1</span><span style="color: gray"> |&nbsp; </span><span style="color: green">TABLE</span><span style="color: gray"> </span><span style="color: blue">ACCESS</span><span style="color: gray"> </span><span style="color: green">BY</span><span style="color: gray"> </span><span style="color: blue">INDEX</span><span style="color: gray"> </span><span style="color: blue">ROWID</span><span style="color: gray">| </span><span style="color: blue">TEST</span><span style="color: gray">&nbsp; &nbsp; |&nbsp; &nbsp; &nbsp;</span><span style="color: maroon">1</span><span style="color: gray"> |&nbsp; &nbsp; </span><span style="color: maroon">17</span><span style="color: gray"> |&nbsp; &nbsp; &nbsp;</span><span style="color: maroon">2</span><span style="color: gray">&nbsp; &nbsp;</span><span style="color: olive">(</span><span style="color: maroon">0</span><span style="color: olive">)</span><span style="color: gray">| </span><span style="color: maroon">00</span><span style="color: gray">:</span><span style="color: maroon">00</span><span style="color: gray">:</span><span style="color: maroon">01</span><span style="color: gray"> |<br />
|*&nbsp; </span><span style="color: maroon">2</span><span style="color: gray"> |&nbsp; &nbsp;</span><span style="color: blue">INDEX</span><span style="color: gray"> </span><span style="color: green">UNIQUE</span><span style="color: gray"> </span><span style="color: blue">SCAN</span><span style="color: gray">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| </span><span style="color: blue">IX_TEST</span><span style="color: gray"> |&nbsp; &nbsp; &nbsp;</span><span style="color: maroon">1</span><span style="color: gray"> |&nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp;</span><span style="color: maroon">1</span><span style="color: gray">&nbsp; &nbsp;</span><span style="color: olive">(</span><span style="color: maroon">0</span><span style="color: olive">)</span><span style="color: gray">| </span><span style="color: maroon">00</span><span style="color: gray">:</span><span style="color: maroon">00</span><span style="color: gray">:</span><span style="color: maroon">01</span><span style="color: gray"> |<br />
----------------------------------------------------------------------------</span></div>
</div>
<p>RBO无法使用虚拟索引</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">alter</span><span style="color: gray"> </span><span style="color: green">session</span><span style="color: gray"> </span><span style="color: green">set</span><span style="color: gray"> </span><span style="color: blue">optimizer_mode</span><span style="color: gray">=</span><span style="color: blue">rule</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: green">Session</span><span style="color: gray"> </span><span style="color: blue">altered</span><span style="color: gray">.<br />
&nbsp;<br />
</span><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: blue">explain</span><span style="color: gray"> </span><span style="color: blue">plan</span><span style="color: gray"> </span><span style="color: green">for</span><span style="color: gray"> </span><span style="color: green">select</span><span style="color: gray"> * </span><span style="color: green">from</span><span style="color: gray"> </span><span style="color: blue">test</span><span style="color: gray"> </span><span style="color: green">where</span><span style="color: gray"> </span><span style="color: blue">id</span><span style="color: gray">=</span><span style="color: maroon">1</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: blue">Explained</span><span style="color: gray">.<br />
&nbsp;<br />
</span><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">select</span><span style="color: gray"> * </span><span style="color: green">from</span><span style="color: gray"> </span><span style="color: green">table</span><span style="color: olive">(</span><span style="color: blue">dbms_xplan</span><span style="color: gray">.</span><span style="color: blue">display</span><span style="color: olive">())</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: blue">PLAN_TABLE_OUTPUT</span><span style="color: gray"><br />
---------------------------------------------------------</span><span style="color: #ffa500">--<br />
Plan hash value: 1357081020</span><span style="color: gray"><br />
&nbsp;<br />
--------------------------------</span><span style="color: #ffa500">--<br />
| Id&nbsp; | Operation&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| Name |</span><span style="color: gray"><br />
--------------------------------</span><span style="color: #ffa500">--<br />
|&nbsp; &nbsp;0 | SELECT STATEMENT&nbsp; |&nbsp; &nbsp; &nbsp; |</span><span style="color: gray"><br />
|*&nbsp; </span><span style="color: maroon">1</span><span style="color: gray"> |&nbsp; </span><span style="color: green">TABLE</span><span style="color: gray"> </span><span style="color: blue">ACCESS</span><span style="color: gray"> </span><span style="color: green">FULL</span><span style="color: gray">| </span><span style="color: blue">TEST</span><span style="color: gray"> |<br />
--------------------------------------------------------------</span></div>
</div>
<p>RBO使用hint可以使用虚拟索引</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: blue">explain</span><span style="color: gray"> </span><span style="color: blue">plan</span><span style="color: gray"> </span><span style="color: green">for</span><span style="color: gray"> </span><span style="color: green">select</span><span style="color: gray"> </span><span style="color: #ffa500">/*+ index(test,ix_test)*/</span><span style="color: gray">* </span><span style="color: green">from</span><span style="color: gray"> </span><span style="color: blue">test</span><span style="color: gray"> </span><span style="color: green">where</span><span style="color: gray"> </span><span style="color: blue">id</span><span style="color: gray">=</span><span style="color: maroon">1</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: blue">Explained</span><span style="color: gray">.<br />
&nbsp;<br />
</span><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">select</span><span style="color: gray"> * </span><span style="color: green">from</span><span style="color: gray"> </span><span style="color: green">table</span><span style="color: olive">(</span><span style="color: blue">dbms_xplan</span><span style="color: gray">.</span><span style="color: blue">display</span><span style="color: olive">())</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: blue">PLAN_TABLE_OUTPUT</span><span style="color: gray"><br />
------------------------------------------------------------------------</span><span style="color: #ffa500">--<br />
Plan hash value: 166686173</span><span style="color: gray"><br />
&nbsp;<br />
-------------------------------------------------------------------------</span><span style="color: #ffa500">--<br />
| Id&nbsp; | Operation&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| Name&nbsp; &nbsp; | Rows&nbsp; | Bytes | Cost (%CPU)| Time&nbsp; &nbsp; &nbsp;|</span><span style="color: gray"><br />
-------------------------------------------------------------------------</span><span style="color: #ffa500">--<br />
|&nbsp; &nbsp;0 | SELECT STATEMENT&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp;1 |&nbsp; &nbsp; 17 |&nbsp; &nbsp; &nbsp;2&nbsp; &nbsp;(0)| 00:00:01 |</span><span style="color: gray"><br />
|&nbsp; &nbsp;</span><span style="color: maroon">1</span><span style="color: gray"> |&nbsp; </span><span style="color: green">TABLE</span><span style="color: gray"> </span><span style="color: blue">ACCESS</span><span style="color: gray"> </span><span style="color: green">BY</span><span style="color: gray"> </span><span style="color: blue">INDEX</span><span style="color: gray"> </span><span style="color: blue">ROWID</span><span style="color: gray">| </span><span style="color: blue">TEST</span><span style="color: gray">&nbsp; &nbsp; |&nbsp; &nbsp; &nbsp;</span><span style="color: maroon">1</span><span style="color: gray"> |&nbsp; &nbsp; </span><span style="color: maroon">17</span><span style="color: gray"> |&nbsp; &nbsp; &nbsp;</span><span style="color: maroon">2</span><span style="color: gray">&nbsp; &nbsp;</span><span style="color: olive">(</span><span style="color: maroon">0</span><span style="color: olive">)</span><span style="color: gray">| </span><span style="color: maroon">00</span><span style="color: gray">:</span><span style="color: maroon">00</span><span style="color: gray">:</span><span style="color: maroon">01</span><span style="color: gray"> |<br />
|*&nbsp; </span><span style="color: maroon">2</span><span style="color: gray"> |&nbsp; &nbsp;</span><span style="color: blue">INDEX</span><span style="color: gray"> </span><span style="color: green">UNIQUE</span><span style="color: gray"> </span><span style="color: blue">SCAN</span><span style="color: gray">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| </span><span style="color: blue">IX_TEST</span><span style="color: gray"> |&nbsp; &nbsp; &nbsp;</span><span style="color: maroon">1</span><span style="color: gray"> |&nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp;</span><span style="color: maroon">1</span><span style="color: gray">&nbsp; &nbsp;</span><span style="color: olive">(</span><span style="color: maroon">0</span><span style="color: olive">)</span><span style="color: gray">| </span><span style="color: maroon">00</span><span style="color: gray">:</span><span style="color: maroon">00</span><span style="color: gray">:</span><span style="color: maroon">01</span><span style="color: gray"> |<br />
----------------------------------------------------------------------------</span></div>
</div>
<p>3.虚拟索引的特性</p>
<p>无法执行alter index</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">alter</span><span style="color: gray"> </span><span style="color: blue">index</span><span style="color: gray"> </span><span style="color: blue">ix_test</span><span style="color: gray"> </span><span style="color: blue">rebuild</span><span style="color: gray">;<br />
</span><span style="color: green">alter</span><span style="color: gray"> </span><span style="color: blue">index</span><span style="color: gray"> </span><span style="color: blue">ix_test</span><span style="color: gray"> </span><span style="color: blue">rebuild</span><span style="color: gray"><br />
*<br />
</span><span style="color: blue">ERROR</span><span style="color: gray"> </span><span style="color: green">at</span><span style="color: gray"> </span><span style="color: blue">line</span><span style="color: gray"> </span><span style="color: maroon">1</span><span style="color: gray">:<br />
</span><span style="color: blue">ORA</span><span style="color: gray">-</span><span style="color: maroon">08114</span><span style="color: gray">: </span><span style="color: blue">can</span><span style="color: gray"> </span><span style="color: green">not</span><span style="color: gray"> </span><span style="color: green">alter</span><span style="color: gray"> </span><span style="color: blue">a</span><span style="color: gray"> </span><span style="color: blue">fake</span><span style="color: gray"> </span><span style="color: blue">index</span><span style="color: gray"><br />
&nbsp;<br />
</span><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">alter</span><span style="color: gray"> </span><span style="color: blue">index</span><span style="color: gray"> </span><span style="color: blue">ix_test</span><span style="color: gray"> </span><span style="color: blue">rename</span><span style="color: gray"> </span><span style="color: green">to</span><span style="color: gray"> </span><span style="color: blue">ix_test2</span><span style="color: gray">;<br />
</span><span style="color: green">alter</span><span style="color: gray"> </span><span style="color: blue">index</span><span style="color: gray"> </span><span style="color: blue">ix_test</span><span style="color: gray"> </span><span style="color: blue">rename</span><span style="color: gray"> </span><span style="color: green">to</span><span style="color: gray"> </span><span style="color: blue">ix_test2</span><span style="color: gray"><br />
*<br />
</span><span style="color: blue">ERROR</span><span style="color: gray"> </span><span style="color: green">at</span><span style="color: gray"> </span><span style="color: blue">line</span><span style="color: gray"> </span><span style="color: maroon">1</span><span style="color: gray">:<br />
</span><span style="color: blue">ORA</span><span style="color: gray">-</span><span style="color: maroon">08114</span><span style="color: gray">: </span><span style="color: blue">can</span><span style="color: gray"> </span><span style="color: green">not</span><span style="color: gray"> </span><span style="color: green">alter</span><span style="color: gray"> </span><span style="color: blue">a</span><span style="color: gray"> </span><span style="color: blue">fake</span><span style="color: gray"> </span><span style="color: blue">index</span></div>
</div>
<p>不能创建和虚拟索引同名的实际索引</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">create</span><span style="color: gray"> </span><span style="color: blue">index</span><span style="color: gray"> </span><span style="color: blue">ix_test</span><span style="color: gray"> </span><span style="color: green">on</span><span style="color: gray"> </span><span style="color: blue">test</span><span style="color: olive">(</span><span style="color: #00008b">name</span><span style="color: olive">)</span><span style="color: gray">;<br />
</span><span style="color: green">create</span><span style="color: gray"> </span><span style="color: blue">index</span><span style="color: gray"> </span><span style="color: blue">ix_test</span><span style="color: gray"> </span><span style="color: green">on</span><span style="color: gray"> </span><span style="color: blue">test</span><span style="color: olive">(</span><span style="color: #00008b">name</span><span style="color: olive">)</span><span style="color: gray"><br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
</span><span style="color: blue">ERROR</span><span style="color: gray"> </span><span style="color: green">at</span><span style="color: gray"> </span><span style="color: blue">line</span><span style="color: gray"> </span><span style="color: maroon">1</span><span style="color: gray">:<br />
</span><span style="color: blue">ORA</span><span style="color: gray">-</span><span style="color: maroon">00955</span><span style="color: gray">: </span><span style="color: #00008b">name</span><span style="color: gray"> </span><span style="color: green">is</span><span style="color: gray"> </span><span style="color: blue">already</span><span style="color: gray"> </span><span style="color: blue">used</span><span style="color: gray"> </span><span style="color: green">by</span><span style="color: gray"> </span><span style="color: blue">an</span><span style="color: gray"> </span><span style="color: #00008b">existing</span><span style="color: gray"> </span><span style="color: green">object</span></div>
</div>
<p>可以创建和虚拟索引包含相同列但不同名的实际索引</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">create</span><span style="color: gray"> </span><span style="color: blue">index</span><span style="color: gray"> </span><span style="color: blue">ix_test2</span><span style="color: gray"> </span><span style="color: green">on</span><span style="color: gray"> </span><span style="color: blue">test</span><span style="color: olive">(</span><span style="color: blue">id</span><span style="color: olive">)</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: blue">Index</span><span style="color: gray"> </span><span style="color: blue">created</span><span style="color: gray">.</span></div>
</div>
<p>在10g使用回收站特性的时候，虚拟索引必须显式drop，或者在drop table后purge table后，才能创建同名的索引</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">drop</span><span style="color: gray"> </span><span style="color: green">table</span><span style="color: gray"> </span><span style="color: blue">test</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: green">Table</span><span style="color: gray"> </span><span style="color: blue">dropped</span><span style="color: gray">.<br />
&nbsp;<br />
</span><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">create</span><span style="color: gray"> </span><span style="color: green">unique</span><span style="color: gray"> </span><span style="color: blue">index</span><span style="color: gray"> </span><span style="color: blue">ix_test</span><span style="color: gray"> </span><span style="color: green">on</span><span style="color: gray"> </span><span style="color: blue">test2</span><span style="color: olive">(</span><span style="color: blue">id</span><span style="color: olive">)</span><span style="color: gray">;<br />
</span><span style="color: green">create</span><span style="color: gray"> </span><span style="color: green">unique</span><span style="color: gray"> </span><span style="color: blue">index</span><span style="color: gray"> </span><span style="color: blue">ix_test</span><span style="color: gray"> </span><span style="color: green">on</span><span style="color: gray"> </span><span style="color: blue">test2</span><span style="color: olive">(</span><span style="color: blue">id</span><span style="color: olive">)</span><span style="color: gray"><br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*<br />
</span><span style="color: blue">ERROR</span><span style="color: gray"> </span><span style="color: green">at</span><span style="color: gray"> </span><span style="color: blue">line</span><span style="color: gray"> </span><span style="color: maroon">1</span><span style="color: gray">:<br />
</span><span style="color: blue">ORA</span><span style="color: gray">-</span><span style="color: maroon">00955</span><span style="color: gray">: </span><span style="color: #00008b">name</span><span style="color: gray"> </span><span style="color: green">is</span><span style="color: gray"> </span><span style="color: blue">already</span><span style="color: gray"> </span><span style="color: blue">used</span><span style="color: gray"> </span><span style="color: green">by</span><span style="color: gray"> </span><span style="color: blue">an</span><span style="color: gray"> </span><span style="color: #00008b">existing</span><span style="color: gray"> </span><span style="color: green">object</span><span style="color: gray"><br />
&nbsp;<br />
</span><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">drop</span><span style="color: gray"> </span><span style="color: blue">index</span><span style="color: gray"> </span><span style="color: blue">ix_test</span><span style="color: gray">;<br />
</span><span style="color: green">drop</span><span style="color: gray"> </span><span style="color: blue">index</span><span style="color: gray"> </span><span style="color: blue">ix_test</span><span style="color: gray"><br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
</span><span style="color: blue">ERROR</span><span style="color: gray"> </span><span style="color: green">at</span><span style="color: gray"> </span><span style="color: blue">line</span><span style="color: gray"> </span><span style="color: maroon">1</span><span style="color: gray">:<br />
</span><span style="color: blue">ORA</span><span style="color: gray">-</span><span style="color: maroon">38301</span><span style="color: gray">: </span><span style="color: blue">can</span><span style="color: gray"> </span><span style="color: green">not</span><span style="color: gray"> </span><span style="color: blue">perform</span><span style="color: gray"> </span><span style="color: blue">DDL</span><span style="color: gray">/</span><span style="color: blue">DML</span><span style="color: gray"> </span><span style="color: blue">over</span><span style="color: gray"> </span><span style="color: blue">objects</span><span style="color: gray"> </span><span style="color: green">in</span><span style="color: gray"> </span><span style="color: blue">Recycle</span><span style="color: gray"> </span><span style="color: blue">Bin</span><span style="color: gray"><br />
&nbsp;<br />
</span><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: blue">purge</span><span style="color: gray"> </span><span style="color: green">table</span><span style="color: gray"> </span><span style="color: blue">test</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: green">Table</span><span style="color: gray"> </span><span style="color: blue">purged</span><span style="color: gray">.<br />
&nbsp;<br />
</span><span style="color: blue">NING</span><span style="color: gray">@</span><span style="color: blue">ning</span><span style="color: gray">&gt;</span><span style="color: green">create</span><span style="color: gray"> </span><span style="color: green">unique</span><span style="color: gray"> </span><span style="color: blue">index</span><span style="color: gray"> </span><span style="color: blue">ix_test</span><span style="color: gray"> </span><span style="color: green">on</span><span style="color: gray"> </span><span style="color: blue">test2</span><span style="color: olive">(</span><span style="color: blue">id</span><span style="color: olive">)</span><span style="color: gray">;<br />
&nbsp;<br />
</span><span style="color: blue">Index</span><span style="color: gray"> </span><span style="color: blue">created</span><span style="color: gray">.</span></div>
</div>
<p>查找系统中已经存在的虚拟索引：</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: green">SELECT</span><span style="color: gray"> </span><span style="color: blue">index_owner</span><span style="color: gray">, </span><span style="color: blue">index_name</span><span style="color: gray">&nbsp; <br />
</span><span style="color: green">FROM</span><span style="color: gray"> </span><span style="color: blue">dba_ind_columns</span><span style="color: gray"><br />
</span><span style="color: green">WHERE</span><span style="color: gray"> </span><span style="color: blue">index_name</span><span style="color: gray"> </span><span style="color: green">NOT</span><span style="color: gray"> </span><span style="color: green">LIKE</span><span style="color: gray"> </span><span style="color: #8b0000">'</span><span style="color: red">BIN$%</span><span style="color: #8b0000">'</span><span style="color: gray"> <br />
</span><span style="color: blue">MINUS</span><span style="color: gray"><br />
</span><span style="color: green">SELECT</span><span style="color: gray"> </span><span style="color: blue">owner</span><span style="color: gray">, </span><span style="color: blue">index_name</span><span style="color: gray"> <br />
</span><span style="color: green">FROM</span><span style="color: gray"> </span><span style="color: blue">dba_indexes</span><span style="color: gray">;</span></div>
</div>
<p>虚拟索引分析并且有效，但是数据字典里查不到结果，估计是oracle内部临时保存了分析结果</p>
<img src ="http://www.blogjava.net/supercrsky/aggbug/197026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-04-29 10:20 <a href="http://www.blogjava.net/supercrsky/articles/197026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>存储过程练习</title><link>http://www.blogjava.net/supercrsky/articles/191767.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Thu, 10 Apr 2008 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/191767.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/191767.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/191767.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/191767.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/191767.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">insert</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;person&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">zdw</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">zdw</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">test1</span><span style="color: #ff0000;">'</span><span style="color: #000000;">)<br />
</span><span style="color: #0000ff;">insert</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;person&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">test</span><span style="color: #ff0000;">'</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;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">test2</span><span style="color: #ff0000;">'</span><span style="color: #000000;">)<br />
</span><span style="color: #0000ff;">insert</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;person&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">admin</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">admin</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">admin3</span><span style="color: #ff0000;">'</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">/*</span><span style="color: #008080;">在存储过程中使用子查询</span><span style="color: #008080;">*/</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">procedure</span><span style="color: #000000;">&nbsp;person_sub_query<br />
(<br />
&nbsp;</span><span style="color: #008000;">@id</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000; font-weight: bold;">int</span><span style="color: #000000;"><br />
)<br />
</span><span style="color: #0000ff;">as</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;person&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">&lt;</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff00ff;">count</span><span style="color: #000000;">(</span><span style="color: #808080;">*</span><span style="color: #000000;">)&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;person)<br />
</span><span style="color: #0000ff;">go</span><span style="color: #000000;"><br />
<br />
<br />
</span><span style="color: #0000ff;">execute</span><span style="color: #000000;">&nbsp;person_sub_query&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #008080;">/*</span><span style="color: #008080;">在存储过程中修改参数值，使用多个查询语句：</span><span style="color: #008080;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">procedure</span><span style="color: #000000;">&nbsp;person_multi_query<br />
(<br />
&nbsp;</span><span style="color: #008000;">@id</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000; font-weight: bold;">int</span><span style="color: #000000;"><br />
)<br />
</span><span style="color: #0000ff;">as</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #008000;">@id</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff00ff;">count</span><span style="color: #000000;">(</span><span style="color: #808080;">*</span><span style="color: #000000;">)&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;person&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #008000;">@id</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #008000;">@id</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #008000;">@id</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;person&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #008000;">@id</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">go</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">execute</span><span style="color: #000000;">&nbsp;person_multi_query&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span></div>
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">/*</span><span style="color: #008080;">创建表</span><span style="color: #008080;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;person<br />
(<br />
&nbsp;&nbsp;id&nbsp;</span><span style="color: #000000; font-weight: bold;">int</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">primary</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;username&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">50</span><span style="color: #000000;">)&nbsp;</span><span style="color: #808080;">not</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;password&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">)&nbsp;</span><span style="color: #808080;">not</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;address&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">200</span><span style="color: #000000;">)&nbsp;</span><span style="color: #808080;">not</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;"><br />
)<br />
</span><span style="color: #008080;">/*</span><span style="color: #008080;">增加一条记录的存储过程</span><span style="color: #008080;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">procedure</span><span style="color: #000000;">&nbsp;proc_person<br />
(<br />
&nbsp;&nbsp;</span><span style="color: #008000;">@id</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000; font-weight: bold;">int</span><span style="color: #000000;">&nbsp;,<br />
&nbsp;&nbsp;</span><span style="color: #008000;">@username</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">50</span><span style="color: #000000;">),<br />
&nbsp;&nbsp;</span><span style="color: #008000;">@password</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">),<br />
&nbsp;&nbsp;</span><span style="color: #008000;">@address</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">200</span><span style="color: #000000;">)&nbsp;<br />
)<br />
</span><span style="color: #0000ff;">as</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">insert</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;person(id,username,password,address)&nbsp;</span><span style="color: #0000ff;">values</span><span style="color: #000000;">(</span><span style="color: #008000;">@id</span><span style="color: #000000;">,</span><span style="color: #008000;">@username</span><span style="color: #000000;">,</span><span style="color: #008000;">@password</span><span style="color: #000000;">,</span><span style="color: #008000;">@address</span><span style="color: #000000;">)<br />
<br />
</span><span style="color: #0000ff;">go</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">/*</span><span style="color: #008080;">传值顺序是你声明变量时的顺序</span><span style="color: #008080;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">exec</span><span style="color: #000000;">&nbsp;proc_person&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">admin</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">admin</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">bj</span><span style="color: #ff0000;">'</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;person;<br />
<br />
</span><span style="color: #008080;">/*</span><span style="color: #008080;">修改数据的存储过程</span><span style="color: #008080;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">procedure</span><span style="color: #000000;">&nbsp;proc_person_update<br />
(<br />
&nbsp;</span><span style="color: #008000;">@id</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000; font-weight: bold;">int</span><span style="color: #000000;">,<br />
&nbsp;</span><span style="color: #008000;">@username</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">50</span><span style="color: #000000;">),<br />
&nbsp;</span><span style="color: #008000;">@password</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000; font-weight: bold;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">50</span><span style="color: #000000;">)<br />
)<br />
</span><span style="color: #0000ff;">as</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">update</span><span style="color: #000000;">&nbsp;person&nbsp;</span><span style="color: #0000ff;">set</span><span style="color: #000000;">&nbsp;username</span><span style="color: #808080;">=</span><span style="color: #008000;">@username</span><span style="color: #000000;">&nbsp;,&nbsp;password</span><span style="color: #808080;">=</span><span style="color: #008000;">@password</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #008000;">@id</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">go</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">execute</span><span style="color: #000000;">&nbsp;proc_person_update&nbsp;</span><span style="color: #800000; font-weight: bold;">1</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;">,</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">test</span><span style="color: #ff0000;">'</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;person<br />
<br />
</span><span style="color: #008080;">/*</span><span style="color: #008080;">删除数据的存储过程</span><span style="color: #008080;">*/</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">procedure</span><span style="color: #000000;">&nbsp;proc_person_del<br />
(<br />
&nbsp;</span><span style="color: #008000;">@id</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000; font-weight: bold;">int</span><span style="color: #000000;"><br />
)<br />
</span><span style="color: #0000ff;">as</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">delete</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;person&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #008000;">@id</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">go</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">execute</span><span style="color: #000000;">&nbsp;proc_person_del&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;person<br />
<br />
<br />
</span></div>
<img src ="http://www.blogjava.net/supercrsky/aggbug/191767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-04-10 10:11 <a href="http://www.blogjava.net/supercrsky/articles/191767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用数据库 取前几条数据 sql写法</title><link>http://www.blogjava.net/supercrsky/articles/169991.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Mon, 24 Dec 2007 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/169991.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/169991.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/169991.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/169991.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/169991.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt; color: red; font-family: Comic Sans MS"><br />
如在ms sqlserver 用此语句：<br />
select top 2 * from test01 就会只显示前2条记录，<br />
<br />
MYSQL<br />
<br />
select * from your_table where .... limit 2;<br />
//使用limit就可以了.<br />
<br />
Oracle的语句:<br />
select * from (select rownum r ,* from test) tt<br />
where tt.r &gt; 50 and tt.r &lt;= 100; (最好用PLSQL游标来解决)<br />
<br />
DB2中：<br />
select * from payment fetch first 5 row only --查前5条记录 </span>
<img src ="http://www.blogjava.net/supercrsky/aggbug/169991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-12-24 11:20 <a href="http://www.blogjava.net/supercrsky/articles/169991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql5.0存储过程初探</title><link>http://www.blogjava.net/supercrsky/articles/162771.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Fri, 23 Nov 2007 23:51:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/162771.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/162771.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/162771.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/162771.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/162771.html</trackback:ping><description><![CDATA[<p><span style="font-weight: bold">一.创建存储过程</span><br />
</p>
1.基本语法：<br />
<div style="margin-left: 40px">create procedure sp_name()<br />
begin<br />
.........<br />
end<br />
</div>
2.参数传递<br />
<p><span style="font-weight: bold">二.调用存储过程</span><br />
<div style="margin-left: 40px">1.基本语法：call sp_name()<br />
注意：存储过程名称后面必须加括号，哪怕该存储过程没有参数传递<br />
</div>
<p><span style="font-weight: bold">三.删除存储过程</span><br />
<div style="margin-left: 40px">1.基本语法：<br />
drop procedure sp_name//<br />
2.注意事项<br />
(1)不能在一个存储过程中删除另一个存储过程，只能调用另一个存储过程<br />
</div>
<p><span style="font-weight: bold">四.区块，条件，循环<br />
</span>
<div style="margin-left: 40px">1.区块定义，常用<br />
begin<br />
......<br />
end;<br />
也可以给区块起别名，如：<br />
lable:begin<br />
...........<br />
end lable;<br />
可以用leave lable;跳出区块，执行区块以后的代码<br />
2.条件语句<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)"> 条件 </span><span style="color: rgb(0,0,255)">then</span><span style="color: rgb(0,0,0)"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" />statement<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: rgb(0,0,255)">else</span><span style="color: rgb(0,0,0)"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" />statement<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: rgb(0,0,255)">end</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)">;</span></div>
</div>
<br />
3.循环语句<br />
(1).while循环<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: rgb(255,0,0)">[</span><span style="color: rgb(255,0,0)">label:</span><span style="color: rgb(255,0,0)">]</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">WHILE</span><span style="color: rgb(0,0,0)"> expression DO<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" />statements<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: rgb(0,0,255)">END</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">WHILE</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(255,0,0)">[</span><span style="color: rgb(255,0,0)">label</span><span style="color: rgb(255,0,0)">]</span><span style="color: rgb(0,0,0)"> ;<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
</div>
<br />
</div>
<div style="margin-left: 40px">(2).loop循环<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: rgb(255,0,0)">[</span><span style="color: rgb(255,0,0)">label:</span><span style="color: rgb(255,0,0)">]</span><span style="color: rgb(0,0,0)"> LOOP<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" />statements<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: rgb(0,0,255)">END</span><span style="color: rgb(0,0,0)"> LOOP </span><span style="color: rgb(255,0,0)">[</span><span style="color: rgb(255,0,0)">label</span><span style="color: rgb(255,0,0)">]</span><span style="color: rgb(0,0,0)">;</span></div>
</div>
<br />
</div>
<div style="margin-left: 40px">(3).repeat until循环<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: rgb(255,0,0)">[</span><span style="color: rgb(255,0,0)">label:</span><span style="color: rgb(255,0,0)">]</span><span style="color: rgb(0,0,0)"> REPEAT<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" />statements<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" />UNTIL expression<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: rgb(0,0,255)">END</span><span style="color: rgb(0,0,0)"> REPEAT </span><span style="color: rgb(255,0,0)">[</span><span style="color: rgb(255,0,0)">label</span><span style="color: rgb(255,0,0)">]</span><span style="color: rgb(0,0,0)"> ;</span></div>
</div>
</div>
<img src ="http://www.blogjava.net/supercrsky/aggbug/162771.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-24 07:51 <a href="http://www.blogjava.net/supercrsky/articles/162771.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决Mysql乱码问题</title><link>http://www.blogjava.net/supercrsky/articles/162740.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Fri, 23 Nov 2007 14:38:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/162740.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/162740.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/162740.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/162740.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/162740.html</trackback:ping><description><![CDATA[<span style="font-family: Comic Sans MS">修改mysql安装目录下的my.ini文件. 打开找到这一行:<br />
</span>
<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"><span style="font-family: Comic Sans MS"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000"><span style="font-family: Comic Sans MS">&nbsp;#&nbsp;The&nbsp;following&nbsp;options&nbsp;will&nbsp;be&nbsp;read&nbsp;by&nbsp;MySQL&nbsp;client&nbsp;applications.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;#&nbsp;Note&nbsp;that&nbsp;only&nbsp;client&nbsp;applications&nbsp;shipped&nbsp;by&nbsp;MySQL&nbsp;are&nbsp;guaranteed<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;#&nbsp;to&nbsp;read&nbsp;this&nbsp;section.&nbsp;If&nbsp;you&nbsp;want&nbsp;your&nbsp;own&nbsp;MySQL&nbsp;client&nbsp;program&nbsp;to<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;#&nbsp;honor&nbsp;these&nbsp;values,&nbsp;you&nbsp;need&nbsp;to&nbsp;specify&nbsp;it&nbsp;as&nbsp;an&nbsp;option&nbsp;during&nbsp;the&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />#&nbsp;MySQL&nbsp;client&nbsp;library&nbsp;initialization.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />#&nbsp;[mysql]&nbsp;default-character-set=gbk&nbsp;mysql</span></span></div>
<br />
<span style="font-family: Comic Sans MS">客户端字符集把字符集改成gbk. <br />
再找到这一行: <br />
</span>
<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"><span style="font-family: Comic Sans MS"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000"><span style="font-family: Comic Sans MS">#&nbsp;The&nbsp;default&nbsp;character&nbsp;set&nbsp;that&nbsp;will&nbsp;be&nbsp;used&nbsp;when&nbsp;a&nbsp;new&nbsp;schema&nbsp;or&nbsp;table&nbsp;is<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;#&nbsp;created&nbsp;and&nbsp;no&nbsp;character&nbsp;set&nbsp;is&nbsp;defined&nbsp;default-character-set=utf8&nbsp;</span></span></div>
<br />
<span style="font-family: Comic Sans MS">这个是创建数据库或表时的默认字符集,用utf8处理国际化 <br />
对于以前已经创建好的非gbk字符的数据库,在mysql的安装下<br />
的data目录下,找到你建的相应数据库,进去后找到db.opt文件<br />
用记事本打开,内容改成下面的即可. <br />
default-character-set=utf8 default-collation=utf8 最好用utf8,<br />
因为gbk在处理国际化的时候依然会乱码. 最后一种方法,<br />
你可能临时需要设定字符编码,而又不想改配置文件. <br />
那在执行创建脚本前,加入set names gbk(或utf8)即可. <br />
比如: set names utf8; create table user(略); </span>
<img src ="http://www.blogjava.net/supercrsky/aggbug/162740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-23 22:38 <a href="http://www.blogjava.net/supercrsky/articles/162740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>