﻿<?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-都市淘沙者-文章分类-Oracle/Mysql/Postgres/</title><link>http://www.blogjava.net/jelver/category/7675.html</link><description>每天进步一点点</description><language>zh-cn</language><lastBuildDate>Wed, 07 Sep 2011 16:32:51 GMT</lastBuildDate><pubDate>Wed, 07 Sep 2011 16:32:51 GMT</pubDate><ttl>60</ttl><item><title>Mysql 查找当天记录语句</title><link>http://www.blogjava.net/jelver/articles/356702.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Wed, 17 Aug 2011 03:51:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/356702.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/356702.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/356702.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/356702.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/356702.html</trackback:ping><description><![CDATA[有些函数一直未发现，知道经常才知道，愧疚啊<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">本季度的第一天&nbsp;，然后你可以把字符串再转换为日期。&nbsp;方法很多，包括同一个函数的别名（同义词）也很多。比如CURDATE(),</span><span style="color: #0000FF; ">CURRENT_DATE</span><span style="color: #000000; ">(),&nbsp;</span><span style="color: #0000FF; ">CURRENT_DATE</span><span style="color: #000000; ">,&nbsp;NOW&nbsp;等都可以返回当天<br /><br /><br />mysql教程</span><span style="color: #808080; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">select</span><span style="color: #000000; ">&nbsp;CURDATE(),ELT(QUARTER(CURDATE()),<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">-&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #FF00FF; ">year</span><span style="color: #000000; ">(CURDATE())</span><span style="color: #808080; ">*</span><span style="color: #800000; font-weight: bold; ">1000</span><span style="color: #808080; ">+</span><span style="color: #800000; font-weight: bold; ">0101</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">-&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #FF00FF; ">year</span><span style="color: #000000; ">(CURDATE())</span><span style="color: #808080; ">*</span><span style="color: #800000; font-weight: bold; ">1000</span><span style="color: #808080; ">+</span><span style="color: #800000; font-weight: bold; ">0401</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">-&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #FF00FF; ">year</span><span style="color: #000000; ">(CURDATE())</span><span style="color: #808080; ">*</span><span style="color: #800000; font-weight: bold; ">1000</span><span style="color: #808080; ">+</span><span style="color: #800000; font-weight: bold; ">0701</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">-&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #FF00FF; ">year</span><span style="color: #000000; ">(CURDATE())</span><span style="color: #808080; ">*</span><span style="color: #800000; font-weight: bold; ">1000</span><span style="color: #808080; ">+</span><span style="color: #800000; font-weight: bold; ">1001</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">as</span><span style="color: #000000; ">&nbsp;firstDayofQ;<br /></span><span style="color: #808080; ">+</span><span style="color: #008080; ">--</span><span style="color: #008080; ">----------+-------------+</span><span style="color: #008080; "><br /></span><span style="color: #808080; ">|</span><span style="color: #000000; ">&nbsp;CURDATE()&nbsp;&nbsp;</span><span style="color: #808080; ">|</span><span style="color: #000000; ">&nbsp;firstDayofQ&nbsp;</span><span style="color: #808080; ">|</span><span style="color: #000000; "><br /></span><span style="color: #808080; ">+</span><span style="color: #008080; ">--</span><span style="color: #008080; ">----------+-------------+</span><span style="color: #008080; "><br /></span><span style="color: #808080; ">|</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">2009</span><span style="color: #808080; ">-</span><span style="color: #800000; font-weight: bold; ">05</span><span style="color: #808080; ">-</span><span style="color: #800000; font-weight: bold; ">19</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; ">2009401</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">|</span><span style="color: #000000; "><br /></span><span style="color: #808080; ">+</span><span style="color: #008080; ">--</span><span style="color: #008080; ">----------+-------------+</span><span style="color: #008080; "><br /></span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">&nbsp;row&nbsp;</span><span style="color: #808080; ">in</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">set</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #800000; font-weight: bold; ">0.00</span><span style="color: #000000; ">&nbsp;sec)<br /><br />mysql</span><span style="color: #808080; ">&gt;</span><span style="color: #000000; "><br /><br /><br />用mysql语句获取本季度的第一天<br /><br />本月的第一天，<br />date(<br />concat(</span><span style="color: #FF00FF; ">year</span><span style="color: #000000; ">(curdate()),</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">-</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #FF00FF; ">month</span><span style="color: #000000; ">(curdate()),</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">-</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">1</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">))<br />本周的第一天<br />curdate()</span><span style="color: #808080; ">-</span><span style="color: #000000; "><br />WEEKDAY(curdate())<br /><br /><br />用mysql语句获取本季度的第一天<br /><br />date(<br />concat(</span><span style="color: #FF00FF; ">year</span><span style="color: #000000; ">(curdate()),</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">-</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,<br /></span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(quarter(curdate())</span><span style="color: #808080; ">=</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(quarter(curdate())</span><span style="color: #808080; ">=</span><span style="color: #800000; font-weight: bold; ">2</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">4</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(quarter(curdate())</span><span style="color: #808080; ">=</span><span style="color: #800000; font-weight: bold; ">3</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">7</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">10</span><span style="color: #000000; ">))<br />&nbsp;<br /><br /><br />用mysql语句获取本季度的第一天：<br />优化：<br />date(<br />concat(</span><span style="color: #FF00FF; ">year</span><span style="color: #000000; ">(curdate()),</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">-</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,elt(quarter(curdate()),</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">4</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">7</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">10</span><span style="color: #000000; ">),</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">-</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">))<br /><br /><br />本周的第一天<br />date_add(date(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">2009-5-29</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">),INTERVAL&nbsp;</span><span style="color: #808080; ">-</span><span style="color: #000000; ">weekday(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">2009-5-29</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #FF00FF; ">day</span><span style="color: #000000; ">)<br /><br />mysql&nbsp;获取当天发布文件内容sql语句<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;`p8_memberdata`&nbsp;</span><span style="color: #0000FF; ">where</span><span style="color: #000000; ">&nbsp;regdate&nbsp;</span><span style="color: #808080; ">BETWEEN</span><span style="color: #000000; ">&nbsp;(UNIX_TIMESTAMP(NOW())</span><span style="color: #808080; ">-</span><span style="color: #800000; font-weight: bold; ">86440</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #808080; ">AND</span><span style="color: #000000; ">&nbsp;NOW()<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;`p8_memberdata`&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;DATE_FORMAT(FROM_UNIXTIME(regdate),</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">)</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;DATE_FORMAT(NOW(),</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">order</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">by</span><span style="color: #000000; ">&nbsp;uid&nbsp;</span><span style="color: #0000FF; ">desc</span></div>某一天内某一帖的回复人数，排除同一个多次回复的情况<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">COUNT</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">DISTINCT</span><span style="color: #000000; ">&nbsp;author_id,subject_id,(DATE_FORMAT(`create_time`&nbsp;,&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">)))&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;COMMENT&nbsp;&nbsp;<br /></span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;subject_id&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;id&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;group_post&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;group_id</span><span style="color: #808080; ">=</span><span style="color: #800000; font-weight: bold; ">5135203559277568</span><span style="color: #000000; ">&nbsp;) <br /></span></div><br />导出某个表里指定的记录，命令行模式下导出：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">mysqldump&nbsp;</span><span style="color: #808080; ">-</span><span style="color: #000000; ">h&nbsp;</span><span style="color: #800000; font-weight: bold; ">127.0</span><span style="color: #000000; ">.</span><span style="color: #800000; font-weight: bold; ">0.1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">-</span><span style="color: #000000; ">uroot&nbsp;</span><span style="color: #808080; ">-</span><span style="color: #000000; ">p123456&nbsp;sns&nbsp;groups&nbsp;</span><span style="color: #808080; ">-</span><span style="color: #000000; ">x&nbsp;</span><span style="color: #008080; ">--</span><span style="color: #008080; ">where&nbsp;"&nbsp;id&nbsp;IN&nbsp;(SELECT&nbsp;groupid&nbsp;FROM&nbsp;&nbsp;activity_group)"&nbsp;&gt;&nbsp;a.sql</span></div><br /><br />查找表中当日插进的记录<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">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;table_name&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">DATEDIFF</span><span style="color: #000000; ">(create_time,NOW())</span><span style="color: #808080; ">=</span><span style="color: #800000; font-weight: bold; ">0<br /><br /></span></div><img src ="http://www.blogjava.net/jelver/aggbug/356702.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2011-08-17 11:51 <a href="http://www.blogjava.net/jelver/articles/356702.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MYSQL 主从服务器配置工作原理</title><link>http://www.blogjava.net/jelver/articles/347210.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Tue, 29 Mar 2011 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/347210.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/347210.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/347210.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/347210.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/347210.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">一、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;主从配置的原理:<br />
Mysql的&nbsp;</span><span style="color: #0000ff;">Replication</span><span style="color: #000000;">&nbsp;是一个异步的复制过程，从一个&nbsp;Mysql&nbsp;instace(我们称之为&nbsp;Master)复制到另一个<br />
Mysql&nbsp;instance(我们称之&nbsp;Slave)。在&nbsp;Master&nbsp;与&nbsp;Slave<br />
之间的实现整个复制过程主要由三个线程来完成，其中两个线程(Sql线程和IO线程)在&nbsp;Slave&nbsp;端，另外一个线程(IO线程)在&nbsp;Master<br />
端。<br />
要实现&nbsp;MySQL&nbsp;的&nbsp;</span><span style="color: #0000ff;">Replication</span><span style="color: #000000;">&nbsp;，首先必须打开&nbsp;Master&nbsp;端的Binary<br />
</span><span style="color: #ff00ff;">Log</span><span style="color: #000000;">(mysql</span><span style="color: #808080;">-</span><span style="color: #000000;">bin.xxxxxx)功能，否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全<br />
顺序的执行日志中所记录的各种操作。打开&nbsp;MySQL&nbsp;的&nbsp;</span><span style="color: #000000; font-weight: bold;">Binary</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff00ff;">Log</span><span style="color: #000000;">&nbsp;可以通过在启动&nbsp;MySQL&nbsp;Server&nbsp;的过程中使用<br />
&#8220;—</span><span style="color: #ff00ff;">log</span><span style="color: #808080;">-</span><span style="color: #000000;">bin&#8221;&nbsp;参数选项，或者在&nbsp;my.cnf&nbsp;配置文件中的&nbsp;mysqld&nbsp;参数组(</span><span style="color: #ff0000;">[</span><span style="color: #ff0000;">mysqld</span><span style="color: #ff0000;">]</span><span style="color: #000000;">标识后的参数部分)增加<br />
&#8220;</span><span style="color: #ff00ff;">log</span><span style="color: #808080;">-</span><span style="color: #000000;">bin&#8221;&nbsp;参数项。<br />
MySQL&nbsp;复制的基本过程如下：<br />
</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">.&nbsp;Slave&nbsp;上面的IO线程连接上&nbsp;Master，并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;<br />
<br />
</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">.&nbsp;Master&nbsp;接收到来自&nbsp;Slave&nbsp;的&nbsp;IO&nbsp;线程的请求后，通过负责复制的&nbsp;IO<br />
线程根据请求信息读取指定日志指定位置之后的日志信息，返回给&nbsp;Slave&nbsp;端的&nbsp;IO<br />
线程。返回信息中除了日志所包含的信息之外，还包括本次返回的信息在&nbsp;Master&nbsp;端的&nbsp;</span><span style="color: #000000; font-weight: bold;">Binary</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff00ff;">Log</span><span style="color: #000000;">&nbsp;文件的名称以及在&nbsp;</span><span style="color: #000000; font-weight: bold;">Binary</span><span style="color: #000000;"><br />
</span><span style="color: #ff00ff;">Log</span><span style="color: #000000;">&nbsp;中的位置;<br />
</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">.&nbsp;Slave&nbsp;的&nbsp;IO&nbsp;线程接收到信息后，将接收到的日志内容依次写入到&nbsp;Slave&nbsp;端的Relay<br />
Log文件(mysql</span><span style="color: #808080;">-</span><span style="color: #000000;">relay</span><span style="color: #808080;">-</span><span style="color: #000000;">bin.xxxxxx)的最末端，并将读取到的Master端的bin</span><span style="color: #808080;">-</span><span style="color: #000000;">log的文件名和位置记录到master</span><span style="color: #808080;">-</span><span style="color: #000000;"><br />
info文件中，以便在下一次读取的时候能够清楚的高速Master&#8220;我需要从某个bin</span><span style="color: #808080;">-</span><span style="color: #000000;">log的哪个位置开始往后的日志内容，请发给我&#8221;<br />
<br />
</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">.&nbsp;Slave&nbsp;的&nbsp;SQL&nbsp;线程检测到&nbsp;Relay&nbsp;</span><span style="color: #ff00ff;">Log</span><span style="color: #000000;">&nbsp;中新增加了内容后，会马上解析该&nbsp;</span><span style="color: #ff00ff;">Log</span><span style="color: #000000;">&nbsp;文件中的内容成为在&nbsp;Master<br />
端真实执行时候的那些可执行的&nbsp;Query&nbsp;语句，并在自身执行这些&nbsp;Query。这样，实际上就是在&nbsp;Master&nbsp;端和&nbsp;Slave<br />
端执行了同样的&nbsp;Query，所以两端的数据是完全一样的。<br />
二、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置mysql主从配置的优点：<br />
</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解决web应用系统，数据库出现的性能瓶颈，采用数据库集群的方式来实现查询负载；一个系统中数据库的查询操作比更新操作要多得多，通过多台查询服务器将&nbsp;数据库的查询分担到不同的查询服务器上从而提高查询效率。<br />
</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mysql数据库支持数据库的主从复制功能，使用主数据库进行数据的插入、删除与更新操作，而从数据库则专门用来进行数据查询操作，这样可以将更新操作和&nbsp;查询操作分担到不同的数据库上，从而提高了查询效率。<br />
三、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;主从数据库服务器的配置<br />
</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;主数据库服务器的配置<br />
（</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">）、修改mysql的配置文件（</span><span style="color: #808080;">/</span><span style="color: #000000;">etc</span><span style="color: #808080;">/</span><span style="color: #000000;">my.cnf）在配置文件中设置：<br />
server</span><span style="color: #808080;">-</span><span style="color: #000000;">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;">&nbsp;&nbsp;&nbsp;###每一个数据库服务器都要制定一个唯一的server</span><span style="color: #808080;">-</span><span style="color: #000000;">id，通常主服务器制定为1。<br />
</span><span style="color: #ff00ff;">log</span><span style="color: #808080;">-</span><span style="color: #000000;">bin</span><span style="color: #808080;">=</span><span style="color: #000000;">mysql</span><span style="color: #808080;">-</span><span style="color: #000000;">bin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;###mysql进行主从复制是通过二进制的日志文件来进行的，所以必须开启mysql的日志功能<br />
（这个是</span><span style="color: #808080;">/</span><span style="color: #000000;">etc</span><span style="color: #808080;">/</span><span style="color: #000000;">my.cnf的默认配置，保持不变即可）<br />
（</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">）、&nbsp;</span><span style="color: #0000ff;">GRANT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">REPLICATION</span><span style="color: #000000;">&nbsp;SLAVE&nbsp;</span><span style="color: #0000ff;">ON</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">.</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">TO</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">&nbsp;replication</span><span style="color: #ff0000;">'</span><span style="color: #000000;">@</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">172.28.3.41</span><span style="color: #ff0000;">'</span><span style="color: #000000;">&nbsp;IDENTIFIED&nbsp;</span><span style="color: #0000ff;">BY</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">koncept</span><span style="color: #ff0000;">'</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#####给主数据库服务器授予一个可以进行复制的用户，</span><span style="color: #800000; font-weight: bold;">172.28</span><span style="color: #000000;">.3.41为从服务器的IP，这样从服务器就能有钱先来访问主数据库服务器<br />
</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">、从数据库服务器的设置<br />
修改数据库配置文件</span><span style="color: #808080;">/</span><span style="color: #000000;">etc</span><span style="color: #808080;">/</span><span style="color: #000000;">my.cnf，配置如下内容：<br />
#server</span><span style="color: #808080;">-</span><span style="color: #000000;">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;">&nbsp;&nbsp;####必须把server</span><span style="color: #808080;">-</span><span style="color: #000000;">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;1注释掉，<br />
server</span><span style="color: #808080;">-</span><span style="color: #000000;">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;&nbsp;####设置从的ID号<br />
master</span><span style="color: #808080;">-</span><span style="color: #000000;">host&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">172.28</span><span style="color: #000000;">.</span><span style="color: #800000; font-weight: bold;">3.43</span><span style="color: #000000;">&nbsp;&nbsp;#####设置主服务器的IP<br />
master</span><span style="color: #808080;">-</span><span style="color: #ff00ff;">user</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">replication</span><span style="color: #000000;">&nbsp;&nbsp;#####设置连接主服务器的用户名<br />
master</span><span style="color: #808080;">-</span><span style="color: #000000;">password&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;concept&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#####设置连接主服务器的密码<br />
</span><span style="color: #ff00ff;">replicate</span><span style="color: #808080;">-</span><span style="color: #000000;">do</span><span style="color: #808080;">-</span><span style="color: #000000;">db</span><span style="color: #808080;">=</span><span style="color: #000000;">imtest0&nbsp;&nbsp;######设置你要同步的数据库，可以设置多个&nbsp;&nbsp;&nbsp;<br />
####就是我们前面建的用户名和密码，另外如果有端口号的变化还要配置端口<br />
master</span><span style="color: #808080;">-</span><span style="color: #000000;">port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #808080;">&lt;</span><span style="color: #000000;">port</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;配置成你设置的端口就OK了！<br />
</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">、分别重新启动主从服务器&nbsp;####&nbsp;如果不重新启动主服务器在后面查看status的时候会出现问题！<br />
4在从服务器上登录mysql，输入：show&nbsp;slave&nbsp;status\G&nbsp;&nbsp;如果发现有：<br />
Slave_IO_Running:&nbsp;Yes<br />
Slave_SQL_Running:&nbsp;Yes<br />
就说明已经成功了，如果这两个选项不全是Yes，那就说明你钱面的某个配置错了，<br />
我做的时候没有把主服务器重启，就出现&nbsp;&nbsp;Slave_IO_Running:&nbsp;NO。重启后好了！<br />
四、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;监控服务器的状态<br />
</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;监控主服务器的状态<br />
可通过show&nbsp;master&nbsp;status来监控主服务器的状态，内容如下：<br />
</span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">----------------+----------+--------------+------------------+</span><span style="color: #008080;"><br />
</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">File</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Position&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Binlog_Do_DB&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Binlog_Ignore_DB&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br />
</span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">----------------+----------+--------------+------------------+</span><span style="color: #008080;"><br />
</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;mysql</span><span style="color: #808080;">-</span><span style="color: #000000;">bin.</span><span style="color: #800000; font-weight: bold;">000003</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1164</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br />
</span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">----------------+----------+--------------+------------------+</span><span style="color: #008080;"><br />
</span><span style="color: #000000;">#####其中File表示日志文件记录，Position表示日志文件的位置，这个也是数据库执行复制操作的必须标识，后面两字段表示复制的数据库名和&nbsp;不复制的数据库名，也可以在配置文件中你进行配置。<br />
</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;监控从服务器的状态<br />
可以通过：show&nbsp;slave&nbsp;status\G来查看，另外如果从数据库在复制的过程中出现问题，可以通过命令reset&nbsp;slave从数据库服务器复制的线程，从数据库服务器的通常操作命令有：<br />
start&nbsp;slave；&nbsp;&nbsp;####启动复制线程<br />
stop&nbsp;slave；&nbsp;&nbsp;####停止复制线程<br />
reset&nbsp;slave；&nbsp;&nbsp;####重置复制线程<br />
change&nbsp;master&nbsp;</span><span style="color: #0000ff;">to</span><span style="color: #000000;">；&nbsp;###动态改变到主服务器的配置</span></div>
<img src ="http://www.blogjava.net/jelver/aggbug/347210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2011-03-29 14:30 <a href="http://www.blogjava.net/jelver/articles/347210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql-5.5.3-m3 主从同步不支持master-host问题的解决办法[转]</title><link>http://www.blogjava.net/jelver/articles/347208.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Tue, 29 Mar 2011 06:01:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/347208.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/347208.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/347208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/347208.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/347208.html</trackback:ping><description><![CDATA[http://hi.baidu.com/adriannet/blog/item/c4e187ecc586b7c32e2e2100.html<br />
<br />
<p>环境：<br />
OS:CentOS release 5.5 (Final) (64位)<br />
2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux<br />
Mysql:<br />
mysql-5.5.3-m3.tar.gz<br />
Master:192.168.0.100<br />
Slave:192.168.0.200<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大部分配置跟"<a href="http://hi.baidu.com/adriannet/blog/item/e06d2d58ea8d798f810a1854.html" target="_blank">MySQL主从同步、读写分离配置步骤、问题解决笔记[原创</a>]"类似，但在从服务器上配置的时候，加的复制条件都不能启动数据库；不过据网上消息介绍，Mysql版本从5.1.7以后开始就不支持&#8220;master-host&#8221;类似的参数; <br />
查看mysql_error.log中的报错信息如下；<br />
110105 13:38:00 mysqld_safe mysqld from pid file /data0/mysql/3306/mysql.pid ended<br />
110105 13:38:06 mysqld_safe Starting mysqld daemon with databases from /data0/mysql/3306/data<br />
InnoDB: The InnoDB memory heap is disabled<br />
InnoDB: Mutexes and rw_locks use GCC atomic builtins<br />
110105 13:38:06&nbsp; InnoDB: highest supported file format is Barracuda.<br />
110105 13:38:06 InnoDB Plugin 1.0.6 started; log sequence number 44309<br />
110105 13:38:06 [ERROR] /usr/local/webserver/mysql/libexec/mysqld: unknown variable 'master-host=192.168.7.202'<br />
110105 13:38:06 [ERROR] Aborting</p>
<p>110105 13:38:06&nbsp; InnoDB: Starting shutdown...<br />
110105 13:38:08&nbsp; InnoDB: Shutdown completed; log sequence number 44319<br />
110105 13:38:08 [Note] /usr/local/webserver/mysql/libexec/mysqld: Shutdown complete<br />
无奈之下，从数据库my.cnf修改为以下配置；（主数据库中注意ID为1，并加入要同步的库既可）<br />
[client]<br />
character-set-server = utf8<br />
port = 3306<br />
socket = /tmp/mysql.sock</p>
<p>[mysqld]<br />
character-set-server = utf8<br />
replicate-ignore-db = mysql<br />
<strong>replicate-do-db = db<br />
</strong>replicate-ignore-db = test<br />
replicate-ignore-db = information_schema<br />
user = mysql<br />
port = 3306<br />
socket = /tmp/mysql.sock<br />
basedir = /usr/local/mysql<br />
datadir = /home/mysql/data<br />
log-error = /home/mysql/mysql_error.log<br />
pid-file = /home/mysql/mysql.pid<br />
open_files_limit = 10240<br />
back_log = 600<br />
max_connections = 5000<br />
max_connect_errors = 6000<br />
table_cache = 614<br />
external-locking = FALSE<br />
max_allowed_packet = 32M<br />
sort_buffer_size = 1M<br />
join_buffer_size = 1M<br />
thread_cache_size = 300<br />
#thread_concurrency = 8<br />
query_cache_size = 512M<br />
query_cache_limit = 2M<br />
query_cache_min_res_unit = 2k<br />
default-storage-engine = MyISAM<br />
thread_stack = 192K<br />
transaction_isolation = READ-COMMITTED<br />
tmp_table_size = 246M<br />
max_heap_table_size = 246M<br />
long_query_time = 3<br />
log-slave-updates<br />
log-bin = /home/mysql/binlog/binlog<br />
binlog_cache_size = 4M<br />
binlog_format = MIXED<br />
max_binlog_cache_size = 8M<br />
max_binlog_size = 1G<br />
relay-log-index = /home/mysql/relaylog/relaylog<br />
relay-log-info-file = /home/mysql/relaylog/relaylog<br />
relay-log = /home/mysql/relaylog/relaylog<br />
expire_logs_days = 30<br />
key_buffer_size = 256M<br />
read_buffer_size = 1M<br />
read_rnd_buffer_size = 16M<br />
bulk_insert_buffer_size = 64M<br />
myisam_sort_buffer_size = 128M<br />
myisam_max_sort_file_size = 10G<br />
myisam_repair_threads = 1<br />
myisam_recover<br />
interactive_timeout = 120<br />
wait_timeout = 120<br />
skip-name-resolve<br />
#master-connect-retry = 10<br />
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396<br />
#master-host = 192.168.1.2<br />
#master-user = username<br />
#master-password = password<br />
#master-port = 3306<br />
<strong>server-id = 2<br />
</strong>innodb_additional_mem_pool_size = 16M<br />
innodb_buffer_pool_size = 512M<br />
innodb_data_file_path = ibdata1:256M:autoextend<br />
innodb_file_io_threads = 4<br />
innodb_thread_concurrency = 8<br />
innodb_flush_log_at_trx_commit = 2<br />
innodb_log_buffer_size = 16M<br />
innodb_log_file_size = 128M<br />
innodb_log_files_in_group = 3<br />
innodb_max_dirty_pages_pct = 90<br />
innodb_lock_wait_timeout = 120<br />
innodb_file_per_table = 0</p>
<p>#log-slow-queries = /home/mysql/slow.log</p>
<p>#long_query_time = 10</p>
<p>[mysqldump]<br />
quick<br />
max_allowed_packet = 32M</p>
<p>此时启动完数据库后，在从库上执行如下命令；<br />
change master to
master_host='192.168.0.100', master_user='slave',
master_password='******', master_log_file='mysql-bin.000010',
master_log_pos=16860;<br />
slave start;<br />
执行:show&nbsp; slave status"G;时看到的如下状态；<br />
mysql&gt; show slave status"G;<br />
*************************** 1. row ***************************<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;&nbsp; Slave_IO_State: Connecting to master<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_Host: 192.168.0.100<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_User: slave<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_Port: 3306<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connect_Retry: 60<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_Log_File: binlog.000010<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Read_Master_Log_Pos: 16860<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Relay_Log_File: relaylog.000014<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Relay_Log_Pos: 17003<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Relay_Master_Log_File: binlog.000010<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Slave_IO_Running: Connecting<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Slave_SQL_Running: Yes<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Replicate_Do_DB: db<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Replicate_Ignore_DB: mysql,test,information_schema<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Replicate_Do_Table: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Replicate_Ignore_Table: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Replicate_Wild_Do_Table: <br />
&nbsp; Replicate_Wild_Ignore_Table: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last_Errno: 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last_Error: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Skip_Counter: 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exec_Master_Log_Pos: 16860<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Relay_Log_Space: 17295<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Until_Condition: None<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Until_Log_File: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Until_Log_Pos: 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_SSL_Allowed: No<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_SSL_CA_File: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_SSL_CA_Path: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_SSL_Cert: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_SSL_Cipher: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_SSL_Key: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Seconds_Behind_Master: 0<br />
Master_SSL_Verify_Server_Cert: No<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last_IO_Errno: 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last_IO_Error: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last_SQL_Errno: error reconnecting to master <a>'slave@192.168.0.100:3306'</a> - retry-time: 60&nbsp; retries: 86400<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last_SQL_Error: <br />
&nbsp; Replicate_Ignore_Server_Ids: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_Server_Id: 1<br />
1 row in set (0.00 sec)</p>
<p>ERROR: <br />
No query specified</p>
<p><strong>从上面的状态可以看到，此时还无法从主库同步；</strong></p>
<p>然后登录192.168.0.100主数据库,允许从数据库同步相关数据；<br />
grant replication slave on *.* to <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#108;&#97;&#118;&#101;&#64;&#49;&#57;&#50;&#46;&#49;&#54;&#56;&#46;&#48;&#46;&#50;&#48;&#48;">slave@192.168.0.200</a> identified by '******'<br />
再次重启从数据库，登录进去查看状态时：<br />
mysql&gt; show slave status"G;<br />
*************************** 1. row ***************************<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Slave_IO_State: Waiting for master to send event<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_Host: 192.168.0.100<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_User: datasync<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_Port: 3306<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connect_Retry: 60<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_Log_File: binlog.000010<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Read_Master_Log_Pos: 16860<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Relay_Log_File: relaylog.000014<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Relay_Log_Pos: 17003<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Relay_Master_Log_File: binlog.000010<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Slave_IO_Running: Yes<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Slave_SQL_Running: Yes<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Replicate_Do_DB: db<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Replicate_Ignore_DB: mysql,test,information_schema<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Replicate_Do_Table: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Replicate_Ignore_Table: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Replicate_Wild_Do_Table: <br />
&nbsp; Replicate_Wild_Ignore_Table: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last_Errno: 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last_Error: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Skip_Counter: 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exec_Master_Log_Pos: 16860<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Relay_Log_Space: 17295<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Until_Condition: None<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Until_Log_File: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Until_Log_Pos: 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_SSL_Allowed: No<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_SSL_CA_File: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_SSL_CA_Path: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_SSL_Cert: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_SSL_Cipher: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_SSL_Key: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Seconds_Behind_Master: 0<br />
Master_SSL_Verify_Server_Cert: No<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last_IO_Errno: 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last_IO_Error: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last_SQL_Errno: 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last_SQL_Error: <br />
&nbsp; Replicate_Ignore_Server_Ids: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Master_Server_Id: 1<br />
1 row in set (0.00 sec)</p>
<p>ERROR: <br />
No query specified<br />
到此操作完成。<br />
注意：主、从的my.cnf配置主要是ID，别的都问题不大。</p>
<br />
<img src ="http://www.blogjava.net/jelver/aggbug/347208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2011-03-29 14:01 <a href="http://www.blogjava.net/jelver/articles/347208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql 实现split字符串分割</title><link>http://www.blogjava.net/jelver/articles/345257.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Sat, 26 Feb 2011 13:28:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/345257.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/345257.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/345257.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/345257.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/345257.html</trackback:ping><description><![CDATA[<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">--场景大致如下：有A B两表，A表中的某一字段bids存放着一个B表主键的数组如<span style="color: #0000ff">3,4,5</span> 而这个时候要做关联查询的时候，理想情况应该可以这样做<br />
select b.* from A a,B b where b.id in (<span style="color: red">a.bids.split(',')) </span>但是mysql并不支持这样做,也没有提供类似的做法，所以很糟糕。 有一种变态的做法就是给bids做一下处理，就是<br />
在bids的前后都加上逗号, 这样bids就变成<span style="color: red">,3,4,5, </span>这个时候利用模糊查询来做关联就可以达到目的了，做法如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;b.</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;A&nbsp;a,&nbsp;B&nbsp;b&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;CONCAT(CONCAT(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">,</span><span style="color: #ff0000">'</span><span style="color: #000000">,a.bids),</span><span style="color: #ff0000">'</span><span style="color: #ff0000">,</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">LIKE</span><span style="color: #000000">&nbsp;CONCAT(CONCAT(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">%,</span><span style="color: #ff0000">'</span><span style="color: #000000">,b.id),</span><span style="color: #ff0000">'</span><span style="color: #ff0000">,%</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />当b的id</span><span style="color: #808080">=</span><span style="color: #000000">3时候的查询相当于执行<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;b.</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;A&nbsp;a,&nbsp;B&nbsp;b&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">,3,4,5,</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">LIKE</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">%,3,%</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008080">--</span><span style="color: #008080">--真实例子----</span><span style="color: #008080"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;t.</span><span style="color: #808080">*</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;tea_material_trade&nbsp;t&nbsp;,tea_process_product&nbsp;p&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;p.id&nbsp;</span><span style="color: #808080">=</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;&nbsp;CONCAT(CONCAT(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">,</span><span style="color: #ff0000">'</span><span style="color: #000000">,p.tradeids),</span><span style="color: #ff0000">'</span><span style="color: #ff0000">,</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">LIKE</span><span style="color: #000000">&nbsp;CONCAT(CONCAT(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">%,</span><span style="color: #ff0000">'</span><span style="color: #000000">,t.id),</span><span style="color: #ff0000">'</span><span style="color: #ff0000">,%</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008080">--</span><span style="color: #008080">值得注意的是，这样的效率恐怕比较低，小数据量应该没有问题，大数据量估计不能这么做</span></div>
<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
mysql像个蛋一样，连基本的函数都不提供，难怪被oracle买了。只有通过存储过程来搞，郁闷得不行。<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">DELIMITER&nbsp;$$<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">USE</span><span style="color: #000000">&nbsp;`teasys`$$<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">DROP</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">PROCEDURE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">IF</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">EXISTS</span><span style="color: #000000">&nbsp;`proc_split`$$<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;DEFINER</span><span style="color: #808080">=</span><span style="color: #000000">`root`@`localhost`&nbsp;</span><span style="color: #0000ff">PROCEDURE</span><span style="color: #000000">&nbsp;`proc_split`(<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;inputstring&nbsp;</span><span style="font-weight: bold; color: #000000">VARCHAR</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">1000</span><span style="color: #000000">),<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;delim&nbsp;</span><span style="font-weight: bold; color: #000000">CHAR</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">BEGIN</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">DECLARE</span><span style="color: #000000">&nbsp;strlen&nbsp;</span><span style="font-weight: bold; color: #000000">INT</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">DECLARE</span><span style="color: #000000">&nbsp;last_index&nbsp;</span><span style="font-weight: bold; color: #000000">INT</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">DECLARE</span><span style="color: #000000">&nbsp;cur_index&nbsp;</span><span style="font-weight: bold; color: #000000">INT</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">DECLARE</span><span style="color: #000000">&nbsp;cur_char&nbsp;</span><span style="font-weight: bold; color: #000000">VARCHAR</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">200</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">DECLARE</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">len</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">INT</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;cur_index</span><span style="color: #808080">=</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;last_index</span><span style="color: #808080">=</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;strlen</span><span style="color: #808080">=</span><span style="color: #000000">LENGTH(inputstring);&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">DROP</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">IF</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">EXISTS</span><span style="color: #000000">&nbsp;splittable;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TEMPORARY</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;splittable(<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;</span><span style="font-weight: bold; color: #000000">INT</span><span style="color: #000000">&nbsp;AUTO_INCREMENT,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VALUE&nbsp;</span><span style="font-weight: bold; color: #000000">VARCHAR</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">20</span><span style="color: #000000">),<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">PRIMARY</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">KEY</span><span style="color: #000000">&nbsp;(`ID`),<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">UNIQUE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">KEY</span><span style="color: #000000">&nbsp;`ID`&nbsp;(`ID`)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">WHILE</span><span style="color: #000000">(cur_index</span><span style="color: #808080">&lt;=</span><span style="color: #000000">strlen)&nbsp;DO&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">BEGIN</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">IF</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">SUBSTRING</span><span style="color: #000000">(inputstring&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;cur_index&nbsp;</span><span style="color: #0000ff">FOR</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">)</span><span style="color: #808080">=</span><span style="color: #000000">delim&nbsp;</span><span style="color: #808080">OR</span><span style="color: #000000">&nbsp;cur_index</span><span style="color: #808080">=</span><span style="color: #000000">strlen&nbsp;</span><span style="color: #0000ff">THEN</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">len</span><span style="color: #808080">=</span><span style="color: #000000">cur_index</span><span style="color: #808080">-</span><span style="color: #000000">last_index</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">IF</span><span style="color: #000000">&nbsp;cur_index</span><span style="color: #808080">=</span><span style="color: #000000">strlen&nbsp;</span><span style="color: #0000ff">THEN</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">len</span><span style="color: #808080">=</span><span style="color: #ff00ff">len</span><span style="color: #808080">+</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">END</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">IF</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">INSERT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">INTO</span><span style="color: #000000">&nbsp;splittable(`value`)</span><span style="color: #0000ff">VALUES</span><span style="color: #000000">(</span><span style="color: #ff00ff">SUBSTRING</span><span style="color: #000000">(inputstring&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;(last_index</span><span style="color: #808080">+</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">FOR</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">len</span><span style="color: #000000">));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;last_index</span><span style="color: #808080">=</span><span style="color: #000000">cur_index;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">END</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">IF</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;cur_index</span><span style="color: #808080">=</span><span style="color: #000000">cur_index</span><span style="color: #808080">+</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">END</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">END</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">WHILE</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">END</span><span style="color: #000000">$$<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />DELIMITER&nbsp;;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />CALL&nbsp;proc_split(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">a,b,c</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">,</span><span style="color: #ff0000">'</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></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;splittable<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<img src ="http://www.blogjava.net/jelver/aggbug/345257.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2011-02-26 21:28 <a href="http://www.blogjava.net/jelver/articles/345257.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 数据库常用命令</title><link>http://www.blogjava.net/jelver/articles/342915.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Thu, 13 Jan 2011 03:43:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/342915.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/342915.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/342915.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/342915.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/342915.html</trackback:ping><description><![CDATA[<p>　　1.查询<a href="http://www.qqread.com/keys/shujuku/index.html" target="_blank">数据库</a>当前<a href="http://www.qqread.com/z/windows/process/index.html" target="_blank">进程</a>的连接数：</p>
<p>　　select count(*) from v$process;</p>
<p>　　2.查看数据库当前会话的连接数：</p>
<p>　　elect count(*) from v$session;</p>
<p>　　3.查看数据库的<a href="http://www.qqread.com/tag/1166/index.html" target="_blank">并发连接数</a>：</p>
<p>　　select count(*) from v$session where status='ACTIVE';</p>
<p>　　4.查看当前数据库建立的会话情况：</p>
<p>　　select sid,serial#,username,program,machine,status from v$session;</p>
<p>　　5.查询数据库允许的最大连接数：</p>
<p>　　select value from v$parameter where name = 'processes';</p>
<p>　　或者命令：show parameter processes;</p>
<p>　　6.修改数据库允许的最大连接数：</p>
<p>　　alter system set processes = 300 scope = spfile;</p>
<p>　　(需要重启数据库才能实现连接数的修改)</p>
<p>　　重启数据库：</p>
<p>　　SQL&gt;shutdown immediate;</p>
<p>　　SQL&gt;startup;</p>
<p>　　查看当前有哪些用户正在使用数据：</p>
<p>　　SQL&gt;select osuser,a.username,cpu_time/executions/1000000||'s',sql_fulltext,machine</p>
<p>　　SQL&gt;from v$session a,v$sqlarea b</p>
<p>　　SQL&gt;where a.sql_address = b.address</p>
<p>　　SQL&gt;order by cpu_time/executions desc;</p>
<p>　　备注：<a href="http://www.qqread.com/keys/unix/index.html" target="_blank">UNIX</a> 1个用户session对应一个操作系统process，而<a href="http://www.qqread.com/keys/windows/index.html" target="_blank">Windows</a>体现在线程。</p>
<p>　　启动oracle</p>
<p>　　su - oracle</p>
<p>　　SQL&gt;sqlplus system/pwd as sysdba&nbsp;&nbsp;&nbsp;&nbsp; //进入sql</p>
<p>　　SQL&gt;startup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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>　　SQL&gt;lsnrctl start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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>　　sqlplus "/as sysdba"</p>
<p>　　SQL&gt;shutdown immediate;&nbsp; //关闭数据库</p>
<p>　　SQL&gt;startup mount;</p>
<p>　　SQL&gt;alter database open;</p>
<img src ="http://www.blogjava.net/jelver/aggbug/342915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2011-01-13 11:43 <a href="http://www.blogjava.net/jelver/articles/342915.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NoSQL数据库笔谈（转）</title><link>http://www.blogjava.net/jelver/articles/328894.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Sun, 15 Aug 2010 08:51:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/328894.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/328894.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/328894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/328894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/328894.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文地址：http://www.yankay.com/wp-content/uploads/2010/02/NoSql%20Database%20Note/NoSQL数据库笔谈/* default css */table {font-size: 1em;line-height: inherit;border-collapse: collapse;}tr ...&nbsp;&nbsp;<a href='http://www.blogjava.net/jelver/articles/328894.html'>阅读全文</a><img src ="http://www.blogjava.net/jelver/aggbug/328894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2010-08-15 16:51 <a href="http://www.blogjava.net/jelver/articles/328894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle触发器及sql使用技巧</title><link>http://www.blogjava.net/jelver/articles/311261.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Fri, 29 Jan 2010 12:07:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/311261.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/311261.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/311261.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/311261.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/311261.html</trackback:ping><description><![CDATA[<p>很久没有玩这些玩意了，顺记录下WJ兄编写的触发器，大致实现的功能就是：当用户网terminal表插入一条记录时候顺便网ftp_user表插入一条记录，而后者表中<br />
需要用到terminal表中的部分字段内容比如terminalseril字段，其中:new.terminalseril表示就是terminal表中新插入的这条记录的terminalseril值。现在对关键字做一下说明 :NEW 和:OLD使用方法和意义，new 只出现在insert和update时，old只出现在update和delete时。在insert时new表示新插入的行数据，update时new表示要替换的新数据、old表示要被更改的原来的数据行，delete时old表示要被删除的数据。触发器类型大致分为：事前触发和事后触发，具体可以google更详细。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">or</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">replace</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">trigger</span><span style="color: #000000">&nbsp;tib_terminal_insertFtp&nbsp;before&nbsp;</span><span style="color: #0000ff">insert</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;Terminal&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;each&nbsp;row<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">declare</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;integrity_error&nbsp;&nbsp;exception;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;errno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">integer</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;errmsg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">char</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">200</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;FTP_USER&nbsp;(userid,&nbsp;userpassword,homedirectory,&nbsp;enableflag,&nbsp;writepermission,&nbsp;idletime,&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />uploadrate,downloadrate,maxloginnumber,maxloginperip)<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">VALUES</span><span style="color: #000000">&nbsp;(:new.terminalseril,&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">E10ADC3949BA59ABBE56E057F20F883E</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;concat(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">/usr/local/ftproot/</span><span style="color: #ff0000">'</span><span style="color: #000000">,:new.terminalseril),&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,&nbsp;</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">,&nbsp;</span><span style="font-weight: bold; color: #800000">20480</span><span style="color: #000000">,&nbsp;</span><span style="font-weight: bold; color: #800000">20480</span><span style="color: #000000">,&nbsp;</span><span style="font-weight: bold; color: #800000">5</span><span style="color: #000000">,&nbsp;</span><span style="font-weight: bold; color: #800000">5</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;&nbsp;Errors&nbsp;handling</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">exception<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;integrity_error&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raise_application_error(errno,&nbsp;errmsg);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
注意，如果要对在不同表空间的其他表进行插入操作，则需要具备有足够的权限，否则触发器编译会不通过。<br />
<br />
另外下面是一个常有的sql语句，就是从当期的某个表选择数据插入另外一个表的常用方式：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;ftp_user(userid,userpassword,homedirectory,enableflag,writepermission,idletime,uploadrate,downloadrate,maxloginnumber,maxloginperip)&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">distinct</span><span style="color: #000000">&nbsp;t.seril,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">E10ADC3949BA59ABBE56E057F20F883E</span><span style="color: #ff0000">'</span><span style="color: #000000">,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #ff0000">'</span><span style="color: #ff0000">/usr/local/ftproot/</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">t.seril,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">20480</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">20480</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;terminal&nbsp;t</span></div>
即将terminal表中的部分数据内容插入ftp_user用户之中。<br />
<br />
<img src ="http://www.blogjava.net/jelver/aggbug/311261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2010-01-29 20:07 <a href="http://www.blogjava.net/jelver/articles/311261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 查询不重复多列sql写法【原创】</title><link>http://www.blogjava.net/jelver/articles/299449.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Fri, 23 Oct 2009 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/299449.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/299449.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/299449.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/299449.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/299449.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Oracle中要求查询表customer&nbsp;中&nbsp;t.address&nbsp;,&nbsp;t.customer_name不重复的列：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />通常想法是：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">distinct</span><span style="color: #000000">&nbsp;t.address&nbsp;,&nbsp;t.customer_name&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;customer&nbsp;t<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />然而这种写法在oracle是错误的。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />因此有第二种想法：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></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;(&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">distinct</span><span style="color: #000000">&nbsp;t.address&nbsp;,&nbsp;t.customer_name&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;customer&nbsp;t)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />这种写法是正确的，然而有没有更好的写法呢<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />突发奇想的第三种，充分利用了</span><span style="color: #808080">||</span><span style="color: #000000">的连接功能：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #ff00ff">count</span><span style="color: #000000">(</span><span style="color: #0000ff">distinct</span><span style="color: #000000">&nbsp;t.address&nbsp;</span><span style="color: #808080">||</span><span style="color: #000000">t.customer_name)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;&nbsp;customer&nbsp;t<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />这样不就ok了吧，其实不是的，看看下面这种情况就知道了<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />若第一条记录为：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />address</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;testAddT&nbsp;，customer_name</span><span style="color: #808080">=</span><span style="color: #000000">omcat<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />第二条记录<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />address</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;testAdd&nbsp;，customer_name</span><span style="color: #808080">=</span><span style="color: #000000">Tomcat<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />这种情况t.address&nbsp;</span><span style="color: #808080">||</span><span style="color: #000000">t.customer_name得出的值都是一样的，然而显然这两条记录是不同的，如何解决这种问题呢，就是加入特殊字符来解决，比如我们确定这两列字段中不会出现#这样的字符内容，好办，此时就可以写出如下完美的sql语句了<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #ff00ff">count</span><span style="color: #000000">(</span><span style="color: #0000ff">distinct</span><span style="color: #000000">&nbsp;t.address&nbsp;</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000">#</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">t.customer_name)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;&nbsp;customer&nbsp;t<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />最后说明：不同的数据库中的sql查询语法都可能都会有差别的所以要针对特定数据库而言，不过思想是可以借鉴的，因此重要的是理解灵活的解决问题思想<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/jelver/aggbug/299449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2009-10-23 10:08 <a href="http://www.blogjava.net/jelver/articles/299449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决MYSQL ERROR 1045 (28000)问题</title><link>http://www.blogjava.net/jelver/articles/292596.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Wed, 26 Aug 2009 01:01:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/292596.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/292596.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/292596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/292596.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/292596.html</trackback:ping><description><![CDATA[<p><strong>解决MYSQL ERROR 1045 (28000): Access denied for user (using password: YES)问题</strong></p>
<p>开场白：解决LINUX问题是一种乐趣，当然，能遇到问题就是上天赐的享受幸福的机会。<br />
这次使用的是Mandriva2008spring。<br />
因为要搞一个项目，所以需要安装MySql，以往安装MySql都是非常顺利的，尤其MySql提供的rmp包，只需双击下就可以搞定~但不知道什么时候，MYSQL ERROR 1045 (28000): Access denied for user (using password: YES)，这个拒绝访问问题变得非常广泛。<br />
百度了一下，没有现成的解决方法，唯有找出其问题所在了。<br />
解决问题思路：<br />
第一步，先使用跳过受权表访问，命令如下：mysqld_safe --user=mysql --skip-grant-tables --skip-networking &amp; （当然，在这之前，先停止mysql服务的运行）。<br />
第二步，mysql -uroot mysql 登录mysql。<br />
第三步，访问mysql数据库下的user表。在我的机器上，mysql&gt; select * from user;&nbsp;&nbsp; 得到的，竟然是<br />
Empty set (0.00 sec)。这说明了，我的mysql没有任何可以访问的用户。知道了这问题所在，解决起来就简单了。另外一种情况有可能也存在该用户但是权限<br />
或密码方面设置有问题也有可能报上面的错误，因此最好的办法先删掉该记录再重新添加该用户的纪录。<br />
第四步，mysql&gt; INSERT INTO user(host, user, password, select_priv, insert_priv, update_priv) VALUES ('localhost', 'username', PASSWORD(&#8216;yourpassword&#8217;), 'Y', 'Y','Y');<br />
Query OK, 1 row affected, 3 warnings (0.00 sec)<br />
返回成功，没问题。嘿嘿~~~就这么简单。<br />
第五步，测试，再重启下mysql服务，正常登录，成功！！！<br />
<br />
提示：mysql系统中的mysql数据库，存储的是系统数据，像这里的user表存储的是用户信息及其访问权限，还有其他，例如你要新建一个数据库mydb，这数据库有用户me管理的话，mysql数据库里面的db表就会存储相关信息</p>
<img src ="http://www.blogjava.net/jelver/aggbug/292596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2009-08-26 09:01 <a href="http://www.blogjava.net/jelver/articles/292596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL索引分析和优化</title><link>http://www.blogjava.net/jelver/articles/291565.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Mon, 17 Aug 2009 14:32:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/291565.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/291565.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/291565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/291565.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/291565.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://www.51testing.com/html/23/666.html&nbsp;&nbsp;索引用来快速地寻找那些具有特定值的记录，所有MySQL索引都以B-树的形式保存。如果没有索引，执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录，直至找到符合要求的记录。表里面的记录数量越多，这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引，MySQL无需扫描任何记...&nbsp;&nbsp;<a href='http://www.blogjava.net/jelver/articles/291565.html'>阅读全文</a><img src ="http://www.blogjava.net/jelver/aggbug/291565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2009-08-17 22:32 <a href="http://www.blogjava.net/jelver/articles/291565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>in和exists的区别与SQL执行效率分析[zhuan]</title><link>http://www.blogjava.net/jelver/articles/285496.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Sat, 04 Jul 2009 12:00:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/285496.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/285496.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/285496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/285496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/285496.html</trackback:ping><description><![CDATA[<strong>in和exists的区别与SQL执行效率分析</strong><br />
<br />
原文：http://www.cnblogs.com/diction/archive/2008/01/18/1043844.html<br />
本文对in和exists的区别与SQL执行效率进行了全面整理分析&#8230;&#8230;<br />
<br />
最近很多论坛又开始讨论in和exists的区别与SQL执行效率的问题，<br />
本文特整理一些<strong>in和exists的区别与SQL执行效率分析</strong><br />
<br />
SQL中in可以分为三类：<br />
<br />
　　1、形如select * from t1 where f1 in ('a','b')，应该和以下两种比较效率<br />
<br />
　　select * from t1 where f1='a' or f1='b'<br />
<br />
　　或者 select * from t1 where f1 ='a' union all select * from t1 f1='b'<br />
<br />
　　你可能指的不是这一类，这里不做讨论。<br />
<br />
　　2、形如select * from t1 where f1 in (select f1 from t2 where t2.fx='x')，<br />
<br />
　　其中子查询的where里的条件不受外层查询的影响，这类查询一般情况下，自动优化会转成exist语句，也就是效率和exist一样。<br />
<br />
　　3、形如select * from t1 where f1 in (select f1 from t2 where t2.fx=t1.fx)，<br />
<br />
　　其中子查询的where里的条件受外层查询的影响，这类查询的效率要看相关条件涉及的字段的索引情况和数据量多少，一般认为效率不如exists。<br />
<br />
　　除了第一类in语句都是可以转化成exists 语句的SQL，一般编程习惯应该是用exists而不用in，而很少去考虑in和exists的执行效率.<br />
<br />
<strong>in和exists的SQL执行效率分析</strong><br />
<br />
　　A，B两个表，<br />
<br />
　　(1)当只显示一个表的数据如A，关系条件只一个如ID时，使用IN更快：<br />
<br />
　　select * from A where id in (select id from B)<br />
<br />
　　(2)当只显示一个表的数据如A，关系条件不只一个如ID，col1时，使用IN就不方便了，可以使用EXISTS：<br />
<br />
　　select * from A<br />
<br />
　　where exists (select 1 from B where id = A.id and col1 = A.col1)<br />
<br />
　　(3)当只显示两个表的数据时，使用IN，EXISTS都不合适，要使用连接：<br />
<br />
　　select * from A left join B on id = A.id<br />
<br />
　　所以使用何种方式，要根据要求来定。<br />
<br />
　　这是一般情况下做的测试：<br />
<br />
　　这是偶的测试结果:<br />
<br />
　　set statistics io on <br />
　　select * from sysobjects where exists (select 1 from syscolumns where id=syscolumns.id) <br />
　　select * from sysobjects where id in (select id from syscolumns ) <br />
　　set statistics io off <br />
<br />
　(47 行受影响)<br />
<br />
　　表'syscolpars'。扫描计数 1，逻辑读取 3 次，物理读取 0 次，预读 2 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。<br />
<br />
　　表'sysschobjs'。扫描计数 1，逻辑读取 3 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。<br />
<br />
　　(1 行受影响)<br />
<br />
　　(44 行受影响)<br />
<br />
　　表'syscolpars'。扫描计数 47，逻辑读取 97 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。<br />
<br />
　　表'sysschobjs'。扫描计数 1，逻辑读取 3 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。<br />
<br />
　　(1 行受影响)<br />
<br />
　　set statistics io on <br />
　　select * from syscolumns where exists (select 1 from sysobjects where id=syscolumns.id) <br />
　　select * from syscolumns where id in (select id from sysobjects ) <br />
　　set statistics io off <br />
<br />
<br />
　　(419 行受影响)<br />
<br />
　　表'syscolpars'。扫描计数 1，逻辑读取 10 次，物理读取 0 次，预读 15 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。<br />
<br />
　　表'sysschobjs'。扫描计数 1，逻辑读取 3 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。<br />
<br />
　　(1 行受影响)<br />
<br />
　　(419 行受影响)<br />
<br />
　　表'syscolpars'。扫描计数 1，逻辑读取 10 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。<br />
<br />
　　表'sysschobjs'。扫描计数 1，逻辑读取 3 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。<br />
<br />
　　(1 行受影响)<br />
<br />
　　测试结果(总体来讲exists比in的效率高):<br />
<br />
　　效率:条件因素的索引是非常关键的<br />
<br />
　　把syscolumns 作为条件:syscolumns 数据大于sysobjects<br />
<br />
　　用in<br />
<br />
　　扫描计数 47，逻辑读取 97 次，<br />
<br />
　　用exists<br />
<br />
　　扫描计数 1，逻辑读取 3 次<br />
<br />
　　把sysobjects作为条件:sysobjects的数据少于syscolumns<br />
<br />
　　exists比in多预读 15 次<br />
<br />
<br />
　　对此我记得还做过如下测试：<br />
<br />
　　表<br />
<br />
　　test<br />
<br />
　　结构<br />
<br />
　　id int identity(1,1), --id主键\自增<br />
<br />
　　sort int, --类别,每一千条数据为一个类别<br />
<br />
　　sid int --分类id<br />
<br />
　　插入600w条数据<br />
<br />
　　如果要查询每个类别的最大sid 的话<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">select&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;from&nbsp;test&nbsp;a&nbsp;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />　　</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;not&nbsp;exists(select&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">&nbsp;from&nbsp;test&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;sort&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a.sort&nbsp;and&nbsp;sid&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;a.sid)&nbsp;</span></div>
比<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">select&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;from&nbsp;test&nbsp;a&nbsp;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />　　</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;sid&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;(select&nbsp;max(sid)&nbsp;from&nbsp;test&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;sort&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a.sort)&nbsp;</span></div>
的执行效率要高三倍以上。具体的执行时间忘记了。但是结果我记得很清楚。在此之前我一直推崇第二种写法，后来就改第一种了。<br />
<br />
<br />
in和exists的sql执行效率分析,再简单举一个例子：<br />
<div class="UBBContent">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">declare&nbsp;@t&nbsp;table(id&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;identity(</span><span style="color: #800080">1</span><span style="color: #000000">,</span><span style="color: #800080">1</span><span style="color: #000000">),&nbsp;v&nbsp;varchar(</span><span style="color: #800080">10</span><span style="color: #000000">))<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />insert&nbsp;@t&nbsp;select</span><span style="color: #800000">'</span><span style="color: #800000">a</span><span style="color: #800000">'</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />union&nbsp;all&nbsp;select</span><span style="color: #800000">'</span><span style="color: #800000">b</span><span style="color: #800000">'</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />union&nbsp;all&nbsp;select</span><span style="color: #800000">'</span><span style="color: #800000">c</span><span style="color: #800000">'</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />union&nbsp;all&nbsp;select</span><span style="color: #800000">'</span><span style="color: #800000">d</span><span style="color: #800000">'</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />union&nbsp;all&nbsp;select</span><span style="color: #800000">'</span><span style="color: #800000">e</span><span style="color: #800000">'</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />union&nbsp;all&nbsp;select</span><span style="color: #800000">'</span><span style="color: #800000">b</span><span style="color: #800000">'</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />union&nbsp;all&nbsp;select</span><span style="color: #800000">'</span><span style="color: #800000">c</span><span style="color: #800000">'</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">--</span><span style="color: #000000">a语句in的sql写法<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />select&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;from&nbsp;@t&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;(select&nbsp;v&nbsp;from&nbsp;@t&nbsp;group&nbsp;by&nbsp;v&nbsp;having&nbsp;count(</span><span style="color: #000000">*</span><span style="color: #000000">)</span><span style="color: #000000">&gt;</span><span style="color: #800080">1</span><span style="color: #000000">)<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">--</span><span style="color: #000000">b语句exists的sql写法<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />select&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;from&nbsp;@t&nbsp;a&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;exists(select&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">&nbsp;from&nbsp;@t&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;id</span><span style="color: #000000">!=</span><span style="color: #000000">a.id&nbsp;and&nbsp;v</span><span style="color: #000000">=</span><span style="color: #000000">a.v)&nbsp;</span></div>
</div>
两条语句功能都是找到表变量@t中,v含有重复值的记录.<br />
<br />
　　第一条sql语句使用in,但子查询中与外部没有连系.<br />
<br />
　　第二条sql语句使用exists,但子查询中与外部有连系.<br />
<br />
　　大家看SQL查询计划,很清楚了.<br />
<br />
　　selec v from @t group by v having count(*)&gt; 1<br />
<br />
　　这条Sql语句,它的执行不依赖于主查询主句(我也不知道怎么来描述in外面的和里面的,暂且这么叫吧,大家明白就行)<br />
<br />
　　那么,SQL在查询时就会优化,即将它的结果集缓存起来<br />
<br />
　　即缓存了<br />
<br />
　　v<br />
<br />
　　---<br />
<br />
　　b<br />
<br />
　　c<br />
<br />
　　后续的操作,主查询在每处理一步时,相当于在处理 where v in('b','c') 当然,语句不会这么转化, 只是为了说明意思,也即主查询每处理一行(记为currentROW时,子查询不会再扫描表, 只会与缓存的结果进行匹配<br />
<br />
　　而<br />
<br />
　　select 1 from @t where id!=a.id and v=a.v<br />
<br />
　　这一句,它的执行结果依赖于主查询中的每一行.<br />
<br />
　　当处理主查询第一行时 即 currentROW(id=1)时, 子查询再次被执行 select 1 from @t where id!=1 and v='a' 扫描全表,从第一行记 currentSubROW(id=1) 开始扫描,id相同,过滤,子查询行下移,currentSubROW(id=2)继续,id不同,但v值不匹配,子查询行继续下移...直到currentSubROW(id=7)没找到匹配的, 子查询处理结束,第一行currentROW(id=1)被过滤,主查询记录行下移<br />
<br />
　　处理第二行时,currentROW(id=2), 子查询 select 1 from @t where id!=2 and v='b' ,第一行currentSubROW(id=1)v值不匹配,子查询下移,第二行,id相同过滤,第三行,...到第六行,id不同,v值匹配, 找到匹配结果,即返回,不再往下处理记录. 主查询下移.<br />
<br />
　　处理第三行时，以此类推...<br />
<br />
　　sql优化中，使用in和exist？ 主要是看你的筛选条件是在主查询上还是在子查询上。<br />
<br />
　　通过分析，相信大家已经对in和exists的区别、in和exists的SQL执行效率有较清晰的了解。
<img src ="http://www.blogjava.net/jelver/aggbug/285496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2009-07-04 20:00 <a href="http://www.blogjava.net/jelver/articles/285496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>unix 系统下定时备份oracle数据库dmp文件 </title><link>http://www.blogjava.net/jelver/articles/267350.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Fri, 24 Apr 2009 06:08:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/267350.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/267350.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/267350.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/267350.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/267350.html</trackback:ping><description><![CDATA[原文地址：<a href="http://bbs.chinaunix.net/viewthread.php?tid=806862&amp;pid=10440039&amp;page=1&amp;extra">http://bbs.chinaunix.net/viewthread.php?tid=806862&amp;pid=10440039&amp;page=1&amp;extra</a>=<br />
前提：<br />
1、需要知道的信息：<br />
oracle 的system密码以及要备份数据库账户的账户名和密码<br />
Sco unix 的root密码、oracle密码<br />
2、会使用vi编辑文件、mkdir创建文件夹、chmod改变文件权限、su 切换用户、文件的执行<br />
3、了解sco unix的用户、组、权限及crontab的用途、oracle的dmp文件生成<br />
一、建立数据库dmp文件存放目录<br />
#su - oracle<br />
$cd /dbf<br />
$mkdir dmpbak<br />
$cd dmpbak<br />
$mkdir zd<br />
$mkdir cm<br />
二、建立导出数据库dmp的文件<br />
1、指定目录<br />
#su - oracle<br />
$cd bin<br />
2、用vi编辑exp_t文件<br />
$vi exp_t<br />
exp_t内容：<br />
ORACLE_HOME=/oracle<br />
ORACLE_SID=ora7<br />
ORACLE_TERM=ansi<br />
export ORACLE_HOME ORACLE_SID ORACLE_TERM<br />
MENU5PATH=$ORACLE_HOME/forms30/admin/resource<br />
export MENU5PATH<br />
ORATERMPATH=$ORACLE_HOME/forms30/admin/resource<br />
export ORATERMPATH<br />
NLS_LANG=American_America.ZHS16CGB231280<br />
export NLS_LANG<br />
ORA_NLS=/oracle/ocommon/nls/admin/data<br />
export ORA_NLS<br />
home1='/dbf/dmpbak'<br />
dt1=`date "+%H%M"`<br />
echo ' ' &gt;'$home1/'new_record<br />
file_name="$home1"/zd/zd"$dt1"<br />
echo $file_name &gt;&gt;'$home1'/new_record<br />
$ORACLE_HOME/bin/exp zd/zdzd file=$file_name.dmp owner=zd grants=y buffer=204800 rows=y indexes=y compress=y <br />
file_name="$home1"/cm/cm"$dt1"<br />
echo $file_name &gt;&gt;'$home1'/new_record<br />
$ORACLE_HOME/bin/exp common/cmcm file=$file_name.dmp owner=common grants=y buffer=204800 rows=y indexes=y compress=y <br />
file='/dbf/dmpbak/new_record'<br />
backup_dir='/oracle/sec_back'<br />
if [ -d $backup_dir ]<br />
then<br />
for i in `cat $file`<br />
do<br />
cp $i $backup_dir/<br />
done<br />
echo ' '&gt;$file<br />
fi<br />
3、给exp_t权限<br />
$chmod 755 exp_t<br />
4、测试exp_t<br />
$cd /oracle/bin<br />
$exp_t<br />
5、查看dmp文件是否生成<br />
$cd /dbf/dmpbak/zd<br />
$ls<br />
例如：11点35生成的文件是：1135.dmp<br />
如果生成dmp文件，证明exp_t可以使用<br />
三、编辑crontab<br />
#crontab -e<br />
增加行：<br />
35 * * * * su - oracle -c /oracle/bin/exp_t<br />
意思是每天每个小时的35分备份一次dmp文件<br />
第2天的数据会覆盖第一天的数据<br />
<br />
以上为个人总结，已经经过试验，不足之处会进行改进，希望对大家有所帮助
<img src ="http://www.blogjava.net/jelver/aggbug/267350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2009-04-24 14:08 <a href="http://www.blogjava.net/jelver/articles/267350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 C-JDBC 给 Mysql 集群 </title><link>http://www.blogjava.net/jelver/articles/224445.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Tue, 26 Aug 2008 04:06:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/224445.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/224445.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/224445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/224445.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/224445.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文：http://huaronghu.spaces.live.com/blog/cns!B9A68E1C1CA857AD!288.entry使用&nbsp;C-JDBC&nbsp;给&nbsp;Mysql&nbsp;集群&nbsp;润名，Thursday&nbsp;Twentieth&nbsp;Of&nbsp;April&nbsp;&nbsp;&nbsp;&nbsp;一、前言&nbs...&nbsp;&nbsp;<a href='http://www.blogjava.net/jelver/articles/224445.html'>阅读全文</a><img src ="http://www.blogjava.net/jelver/aggbug/224445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-08-26 12:06 <a href="http://www.blogjava.net/jelver/articles/224445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>层次关系数据库表的设计</title><link>http://www.blogjava.net/jelver/articles/224432.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Tue, 26 Aug 2008 03:29:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/224432.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/224432.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/224432.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/224432.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/224432.html</trackback:ping><description><![CDATA[数据层次的概念:
<p>　　数据层次是表达数据的一种重要关系，在<font color="#000000">数据库</font>的设计中，如：组织结构分解、工作任务分解、行政区划的分解等都是层次关系数据的典型实例。</p>
<p>　　<strong>表达层次关系的数据一般需要实现如下属性：</strong></p>
<p>　　1.层次的最大级联层次数。如：中国－&gt;湖南省-&gt;长沙市-&gt;雨花区，就是4层。</p>
<p>　　2.能反映同一层次之间的顺序关系。如：长沙市 必须在 衡阳市的前面，（因为其是省会）。</p>
<p>　　3.能获取任意层次的父节点级子节点（子节点集）。</p>
<p>　　4.直接获取任意层次的数据。比如：第三层 市级别的数据。</p>
<p>　　5.能方便构造层次关系表达树。</p>
<p>　　6.层次结构及排序方式的改变不影响其其他数据的内部逻辑关系。</p>
<p>　　<strong>一般有三种方式来表现层次关系的数据：</strong></p>
<p>　　<strong>1.建立多个数据库表：</strong></p>
<p>　　如： COUNTRY: ID(主键) COUNTRY_NAME</p>
<p>　　PROVINCE: ID(主键) COUNTRY_ID（外键）,PROVINCE_NAME</p>
<p>　　CITY: ID(主键), PROVINCE_ID（外键）,CITY_NAME</p>
<p>　　此种方式比较简单，但设计的灵活性不够，数据处理起来比较麻烦。</p>
<p>　　<strong>2.采用表的自关联外键引用</strong></p>
<p>　　如： DISTRICT_INFO: ID（主键）,PARENT_ID,（外键）DISTRICT_INFO</p>
<p>　　通过外键(PARENT_ID)的自身引用主键(ID)来确立层次关系。</p>
<p>　　优点：无限级别的层次关系，扩充性强。对于<font color="#000000">Oracle</font>数据库来说，能简单通过 Start With,,,Connect By--语句来实现数据的查询。</p>
<p>　　缺点：不能明确看出层次关系，无法实现排序。</p>
<p>　　<strong>3.采用编码方式来实现层次</strong></p>
<p>　　DISTRICT: ID,CODE,NAME 其中CODE的特点是上级编码是下级编码的前缀</p>
<p>　　优点：通过编码的内容能够很容易回去数据的层次关系。</p>
<p>　　缺点：使用Like方法或函数查询来实现子集的查找，效率较低，能实现层次关系的级数有限（受CODE的字段长度影响）。</p>
<p>　　<strong>优化方案：</strong></p>
<p>　　集合2，3的优点，采用固定编码级次的长度的方法来设计表。</p>
<p>　　DISTRICT:ID,CODE,PARENT_ID,NAME</p>
<p>　　其中ID为主键，CODE:规定为4位一级。表现的数据如下：</p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code></ccid_code>ID,CODE                  PARENT_ID,      NAME
            1  0001                                  中国
            2  00010001                  1           湖南
            3  000100010001              2           衡阳
            4  000100010002              2           长沙
            5  0001000100020001           4          雨花</pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p>　　从数据中可以看出，PARENT_ID可以直观表达层次的上下级关系</p>
<p>　　而编码CODE可以直观表达层次关系与同一层次的顺序关系。</p>
<p>　　如果要将长沙排在衡阳的前面，需要对调其编码即可，而外部的引用关系由于通过ID实现，不会受其影响。</p>
<p>　　获取节点的父级别节点：</p>
<p>　　Select * From DISTRICT Where ID＝(Select PARENT_ID From DISTRICT Where ID=2)</p>
<p>　　获取节点的子级别节点列表：</p>
<p>　　Select * From DISTRICT Where PARENT_ID＝2</p>
<p>　　获取所有的子节点信息：</p>
<p>　　Select level, * From DISTRICT d Start With PARENT_ID＝2 Connect By d.PARENT_ID=Prior t.ID</p>
<p>　　或 --排序模式</p>
<p>　　Select * From DISTRICT d Where d.CODE Like '00010001%' Order By CODE</p>
<p>　　获取某一层次(N)的节点信息(实现排序，层次码长度固定的意义)：</p>
<p>　　Select * From DISTRICT Where LENGTH(CODE)=4*N And CODE Like '0001%' Order By CODE......</p>
<img src ="http://www.blogjava.net/jelver/aggbug/224432.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-08-26 11:29 <a href="http://www.blogjava.net/jelver/articles/224432.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于索引的知识 (zhuanTie)</title><link>http://www.blogjava.net/jelver/articles/224421.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Tue, 26 Aug 2008 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/224421.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/224421.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/224421.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/224421.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/224421.html</trackback:ping><description><![CDATA[一、&nbsp; &nbsp; &nbsp; &nbsp; 关于索引的知识<br />
<br />
要写出运行效率高的sql，需要对索引的机制有一定了解，下面对索引的基本知识做一介绍。<br />
<br />
1、&nbsp; &nbsp; &nbsp; &nbsp; 索引的优点和局限<br />
索引可以提高查询的效率，但会降低dml操作的效率。<br />
所以建立索引时需要权衡。对于dml操作比较频繁的表，索引的个数不宜太多。<br />
<br />
2、&nbsp; &nbsp; &nbsp; &nbsp; 什么样的列需要建索引？<br />
经常用于查询、排序和分组的列（即经常在where、order或group by子句中出现的列）。<br />
<br />
3、&nbsp; &nbsp; &nbsp; &nbsp; 主键索引和复合索引<br />
对于一张表的主键，系统会自动为其建立索引。<br />
如果一张表的几列经常同时作为查询条件，可为其建立复合索引。<br />
<br />
4、&nbsp; &nbsp; &nbsp; &nbsp; 建立索引的语句<br />
create&nbsp;&nbsp;index&nbsp;&nbsp;i_staff&nbsp;&nbsp;on&nbsp;&nbsp;staff&nbsp;&nbsp;(empno);<br />
create&nbsp;&nbsp;index&nbsp;&nbsp;i_agent&nbsp;&nbsp;on&nbsp;&nbsp;agent&nbsp;&nbsp;(empno, start_date);<br />
<br />
5、&nbsp; &nbsp; &nbsp; &nbsp; 删除索引的语句<br />
drop&nbsp;&nbsp;index&nbsp;&nbsp;I_staff;<br />
drop&nbsp;&nbsp;index&nbsp;&nbsp;I_agent;<br />
<br />
6、&nbsp; &nbsp; &nbsp; &nbsp; 查询索引的语句<br />
法一：利用数据字典<br />
表一：all_indexes&nbsp;&nbsp;查看一张表有哪些索引以及索引状态是否有效<br />
主要字段： index_name,&nbsp;&nbsp;table_name,&nbsp;&nbsp;status<br />
例如：select&nbsp; &nbsp;index_name,&nbsp;&nbsp;status&nbsp;&nbsp;<br />
from&nbsp;&nbsp;all_indexes<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;where&nbsp;&nbsp;table_name=&#8217;STAFF_INFO&#8217;;<br />
&nbsp; &nbsp;&nbsp; &nbsp;INDEX_NAME&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;STATUS<br />
&nbsp; &nbsp;&nbsp; &nbsp;---------------------&nbsp; &nbsp;&nbsp; &nbsp; -----------<br />
&nbsp; &nbsp;&nbsp; &nbsp;I_STAFF&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; VALID&nbsp;&nbsp;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;表二：all_ind_columns&nbsp;&nbsp;查看一张表在哪些字段上建了索引<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;主要字段： table_name,&nbsp;&nbsp;index_name,&nbsp;&nbsp;column_name,&nbsp;&nbsp;column_position<br />
例如： select&nbsp;&nbsp;index_name,&nbsp;&nbsp;column_name,&nbsp;&nbsp;column_position<br />
from&nbsp;&nbsp;all_ind_columns<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;where&nbsp;&nbsp;table_name=&#8217;AGENT&#8217;<br />
&nbsp; &nbsp;&nbsp; &nbsp;INDEX_NAME&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;COLUMN_NAME&nbsp; &nbsp;&nbsp;&nbsp;COLUMN_POSITON<br />
&nbsp; &nbsp;&nbsp; &nbsp;---------------------&nbsp; &nbsp;&nbsp; &nbsp; -----------------------&nbsp; &nbsp;&nbsp; &nbsp;--------------------------<br />
&nbsp; &nbsp;&nbsp;&nbsp;I_AGENT&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; EMPNO&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;1<br />
&nbsp; &nbsp;&nbsp;&nbsp;I_AGENT&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; START_DATE&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;2<br />
由此可见，agent表中有一个复合索引（empno, start_date ）<br />
&nbsp; &nbsp;&nbsp;&nbsp;法二：利用toad工具<br />
toad用户界面比sql*plus友好，并且功能强大。你可以在toad编辑器中键入表名，按F4，便可见到这张表的表结构以及所有索引列等基本信息。<br />
<br />
7、&nbsp; &nbsp; &nbsp; &nbsp; 索引的一些特点<br />
1): 不同值较多的列上可建立检索，不同值少的列上则不要建。比如在雇员表的&#8220;性别&#8221;列上只有&#8220;男&#8221;与&#8220;女&#8221;两个不同值，因此就没必要建立索引。如果建立索引不但不会提高查询效率，反而会严重降低更新速度。<br />
2): 如果在索引列上加表达式，则索引不能正常使用<br />
&nbsp; &nbsp;例如：b1,c1分别是表b,c的索引列<br />
select&nbsp;&nbsp;*&nbsp;&nbsp;from&nbsp;&nbsp;b&nbsp;&nbsp;where&nbsp;&nbsp;b1/30&lt; 1000 ;<br />
select&nbsp;&nbsp;*&nbsp;&nbsp;from&nbsp;&nbsp;c&nbsp;&nbsp;where&nbsp;&nbsp;to_char(c1,&#8217;YYYYMMDD HH24:MI:SS&#8217;) = &#8216;200203 14:01:01&#8217;;<br />
以上都是不正确的写法<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;3): where子句中如果使用in、or、like、!=，均会导致索引不能正常使用<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;例如：select&nbsp;&nbsp;*&nbsp;&nbsp;from&nbsp;&nbsp;b&nbsp;&nbsp;where&nbsp;&nbsp;b1=30&nbsp;&nbsp;or&nbsp;&nbsp;b1=40;<br />
&nbsp; &nbsp;&nbsp; &nbsp;4): 使用复合索引进行查询时必须使用前置列<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;例如表a上有一个复合索引（c1,c2,c3）,则c1为其前置列<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;如果用c1或c1+c2或c1+c2+c3为条件进行查询，则该复合索引可以发挥作用，反之，用c2或c3或c2+c3进行查询，则该索引不能起作用。<br />
<br />
<br />
二. 书写sql注意事项：<br />
<br />
1、&nbsp; &nbsp; &nbsp; &nbsp; 避免给sql语句中引用的索引列添加表达式：<br />
典型实例：<br />
b1,c1分别是表b,c的索引列：<br />
1）&nbsp; &nbsp; &nbsp; &nbsp; select&nbsp;&nbsp;*&nbsp;&nbsp;from&nbsp;&nbsp;b&nbsp;&nbsp;where&nbsp;&nbsp;b1/30&lt; 1000 ;<br />
2）&nbsp; &nbsp; &nbsp; &nbsp; select&nbsp;&nbsp;*&nbsp;&nbsp;from&nbsp;&nbsp;c&nbsp;&nbsp;where to_char(c1,&#8217;YYYYMMDD HH24:MI:SS&#8217;) = &#8216;200203 14:01:01&#8217;;<br />
替代方案：<br />
1)&nbsp; &nbsp; &nbsp; &nbsp; select&nbsp;&nbsp;*&nbsp;&nbsp;from&nbsp;&nbsp;b where&nbsp;&nbsp;b1 &lt; 30000;<br />
2)&nbsp; &nbsp; &nbsp; &nbsp; select * from c&nbsp;&nbsp;where c1 = to_date(&#8216;20020301 14:01:01&#8217;, &#8216;YYYYMMDD HH24:MI:SS&#8217;);<br />
注：在lbs中有两个重要字段，pol_info中的undwrt_date和prem_info中的payment_date，这两个日期是带时分秒的，所以经常有同事用to_char 来查询某一时间段的数据。<br />
例如：select&nbsp;&nbsp;count(*)&nbsp;&nbsp;from&nbsp;&nbsp;pol_info&nbsp;&nbsp;where&nbsp;&nbsp;to_char(undwrt_date,&#8217;YYYYMMDD&#8217;)=&#8217;20020416&#8217;;<br />
&nbsp; &nbsp;&nbsp; &nbsp;select&nbsp;&nbsp;count(*)&nbsp;&nbsp;from&nbsp;&nbsp;prem_info&nbsp;&nbsp;where&nbsp;&nbsp;to_char(undwrt_date,&#8217;YYYYMM&#8217;)=&#8217;200203&#8217;;<br />
替代方案：<br />
select&nbsp;&nbsp;count(*)&nbsp;&nbsp;from&nbsp;&nbsp;pol_info&nbsp;&nbsp;<br />
where&nbsp;&nbsp;undwrt_date&gt;=to_date(&#8217;20020416&#8217;,&#8217;YYYYMMDD&#8217;)&nbsp;&nbsp;and<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;undwrt_date&lt;to_date(&#8217;20020417&#8217;,&#8217;YYYYMMDD&#8217;);<br />
select&nbsp;&nbsp;count(*)&nbsp;&nbsp;from&nbsp;&nbsp;prem_info&nbsp;&nbsp;<br />
where&nbsp;&nbsp;payment_date&gt;=to_date(&#8217;20020301&#8217;,&#8217;YYYYMMDD&#8217;)&nbsp;&nbsp;and<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;payment_date&lt;to_date(&#8217;20020401&#8217;,&#8217;YYYYMMDD&#8217;);<br />
<br />
2、&nbsp; &nbsp; &nbsp; &nbsp; 避免在where子句中使用in、or、like、!=<br />
典型实例：<br />
a1是a表上的索引列：<br />
1) select&nbsp;&nbsp;*&nbsp;&nbsp;from&nbsp;&nbsp;a<br />
&nbsp; &nbsp;where&nbsp;&nbsp;( a1 = &#8216;0&#8217; and ...)&nbsp;&nbsp;or&nbsp;&nbsp;(a1 = &#8216;1&#8217; and ...);<br />
2) select&nbsp;&nbsp;count(*)&nbsp;&nbsp;from&nbsp;&nbsp;a&nbsp;&nbsp;where&nbsp;&nbsp;a1&nbsp;&nbsp;in&nbsp;&nbsp;(&#8216;0&#8217;,&#8217;1&#8217;) ;<br />
替代方案：<br />
1）&nbsp; &nbsp; &nbsp; &nbsp; select&nbsp;&nbsp;*&nbsp;&nbsp;from&nbsp;&nbsp;a&nbsp;&nbsp;where&nbsp;&nbsp;a1 = &#8216;0&#8217;&nbsp;&nbsp;and ...<br />
union<br />
select&nbsp;&nbsp;*&nbsp;&nbsp;from&nbsp;&nbsp;a&nbsp;&nbsp;where&nbsp;&nbsp;a1 = &#8216;1&#8217;&nbsp;&nbsp;and ...<br />
2) select&nbsp;&nbsp;count(*)&nbsp;&nbsp;from&nbsp;&nbsp;a&nbsp;&nbsp;where&nbsp;&nbsp;a1 = &#8216;0&#8217;;<br />
&nbsp;&nbsp;select&nbsp;&nbsp;count(*)&nbsp;&nbsp;from&nbsp;&nbsp;a&nbsp;&nbsp;where a1 = &#8216;1&#8217;;<br />
&nbsp; &nbsp;然后做一次加法运算；或者直接用存储过程来实现；<br />
小结：<br />
对字段使用了 &#8216;in，or，like&#8217; 做条件、对字段使用了不等号 &#8216;!=&#8217;，均会使索引失效；如果不产生大量重复值，可以考虑把子句拆开；拆开的子句中应该包含索引，或者使用union连结符代替。另一种方式是使用存储过程，它使SQL变得更加灵活和高效。<br />
<br />
3、&nbsp; &nbsp; &nbsp; &nbsp; 建立适当的索引<br />
曾经接过开发的一个统计sql， select &#8230;&nbsp;&nbsp;from&nbsp;&nbsp;tablea&nbsp;&nbsp;where&nbsp;&nbsp;cola=&#8230;&nbsp;&nbsp;and&nbsp;&nbsp;&#8230;<br />
运行效率非常慢，经查tablea数据量巨大，再查all_ind_columns，发现cola是tablea的一个复合索引中的一列，但不是前置列。象这种情况，就需要与开发商量，是否针对cola建一个索引。<br />
<br />
4、&nbsp; &nbsp; &nbsp; &nbsp; like和substr<br />
对于&#8216;like&#8217;和&#8216;substr&#8217;，其效率并没有多大分别。但是，当所搜索的值不存在时，使用&#8216;like&#8217;的速度明显大于&#8216;substr&#8217;。<br />
所以：select&nbsp;&nbsp;*&nbsp;&nbsp;from&nbsp;&nbsp;a&nbsp;&nbsp;where&nbsp;&nbsp;substr(a1,1,4) = '5378'&nbsp;&nbsp;可以用like替代<br />
select&nbsp;&nbsp;*&nbsp;&nbsp;from&nbsp;&nbsp;a&nbsp;&nbsp;where&nbsp;&nbsp;a1&nbsp;&nbsp;like&nbsp;&nbsp;&#8216;5378%&#8217;;<br />
<br />
5、 写where条件时，有索引字段的判断在前，其它字段的判断在后；如果where条件中用到复合索引，按照索引列在复合索引中出现的顺序来依次写where条件；<br />
<br />
6、使用多表连接时，在from子句中，将记录数少的表放在后面，可提高执行效率；<br />
<br />
7、避免使用not in <br />
not&nbsp;&nbsp;in 是效率极低的写法，尽量使用minus或外连接加以替代<br />
典型实例：<br />
1) select col1 from tab1 where col1 not in (select col1 from tab2);<br />
2) select sum(col2) from tab1 where col1 not in (select col1 from tab2);<br />
替代方案<br />
select col1 from tab1 minus&nbsp;&nbsp;select col1 from tab2;<br />
&nbsp; &nbsp; select&nbsp;&nbsp;sum(a.col2)&nbsp;&nbsp;from&nbsp;&nbsp;tab1 a, tab2&nbsp;&nbsp;b <br />
where a.col1=b.col2(+) and b.col1 is null;<br />
<br />
8、多表查询时，如果其中一个表的记录数量明显大于其他表，则可以先对此表进行查询后，再与其他小表进行表连接。<br />
典型实例：<br />
select&nbsp;&nbsp;a.plan_code,&nbsp;&nbsp;b.dno,&nbsp;&nbsp;c,tno,&nbsp;&nbsp;sum(a.tot_modal_prem),<br />
from&nbsp;&nbsp;prem_info a,&nbsp;&nbsp;dept_ref b,&nbsp;&nbsp;plan_type c<br />
where&nbsp;&nbsp;substr(a.deptno,1,7) = substr(b.deptno,1,7)<br />
and a.plan_code = c.plan_code<br />
group by b.dno,&nbsp;&nbsp;c.tno,&nbsp;&nbsp;a.plan_code;<br />
替代方案：<br />
select&nbsp;&nbsp;b.dno,&nbsp;&nbsp;c.tno,&nbsp;&nbsp;a.plan_code,&nbsp;&nbsp;a.tot_amount<br />
from&nbsp;&nbsp;(select&nbsp;&nbsp;plan_code,&nbsp;&nbsp;deptno,&nbsp;&nbsp;sum(tot_modal_prem)&nbsp;&nbsp;tot_amount<br />
from&nbsp;&nbsp;prem_info<br />
group&nbsp;&nbsp;by&nbsp;&nbsp;deptno,&nbsp;&nbsp;plan_code) a<br />
dept_ref&nbsp;&nbsp;b,<br />
plan_type&nbsp;&nbsp;c<br />
&nbsp;&nbsp;where&nbsp;&nbsp;substr(a.deptno,1,7) = substr(b.deptno,1,7)<br />
&nbsp; &nbsp;&nbsp; &nbsp; and&nbsp;&nbsp;a.plan_code = c.plan_code<br />
group&nbsp;&nbsp;by&nbsp;&nbsp;b.dno,&nbsp;&nbsp;c.tno,&nbsp;&nbsp;a.plan_code;<br />
小结：<br />
由于prem_info表的记录数远远大于dept_ref表和plan_type表中的记录数， 所以首先从prem_info表中查询需要的记录，此时记录数已经被大量缩小，然后再和其他两个表连接，速度会得到很大改善！<br />
<br />
9、查询数量较大时，使用表连接代替IN，EXISTS，NOT IN，NOT EXISTS等。<br />
典型实例：<br />
a、使用IN：<br />
select sum(col2) from tab1 where col1 in (select col1 from tab2);<br />
使用EXISTS:：<br />
select sum(col2) from tab1 a <br />
where exists ( select * from tab2 where col1=a.col1);<br />
b、使用NOT IN：<br />
select sum(col2) from tab1 where col1 not in (select col1 from tab2);<br />
使用NOT EXISTS：<br />
select sum(col2) from tab1 a <br />
where not exists ( select * from tab2 where col1=a.col1);<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 替代方案：<br />
a、使用连接：<br />
select sum(a.col2) from tab1 a,tab2 b where a.col1=b.col2;<br />
b、使用外连接：<br />
select sum(a.col2) from tab1 a,tab2 b <br />
where a.col1=b.col2(+) and b.col1 is null;
<img src ="http://www.blogjava.net/jelver/aggbug/224421.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-08-26 10:52 <a href="http://www.blogjava.net/jelver/articles/224421.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql数据库中的索引与优化</title><link>http://www.blogjava.net/jelver/articles/205573.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Tue, 03 Jun 2008 07:37:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/205573.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/205573.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/205573.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/205573.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/205573.html</trackback:ping><description><![CDATA[mysql数据库中的索引与优化、理解与用途&#8230;&#8230;
<div class="tpc_content"><br />
这是一个面试的题目：mysql数据库中的索引有那些、有什么用？<br />
<br />
&nbsp; &nbsp; &nbsp; 就这个问题？在没有web、书籍、资料的情况下我真的不知到怎么作答！汗、当回到电脑前baidu\google，让我汗汗啊，看了这篇文章就该知道答案了&#8230;&#8230;<br />
<br />
============================================================================<br />
<br />
本文主要讲述了如何加速动态网站的MySQL索引分析和优化。 <br />
<br />
一、什么是索引？ <br />
<br />
索引用来快速地寻找那些具有特定值的记录，所有MySQL索引都以B-树的形式保存。如果没有索引，执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录，直至找到符合要求的记录。表里面的记录数量越多，这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引，MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录，通过索引查找记录至少要比顺序扫描记录快100倍。 <br />
<br />
假设我们创建了一个名为people的表： <br />
<br />
CREATE TABLE people ( peopleid SMALLINT NOT NULL, <br />
<br />
name CHAR(50) NOT NULL );<br />
<br />
然后，我们完全随机把1000个不同name值插入到people表。在数据文件中name列没有任何明确的次序。如果我们创建了name列的索引，MySQL将在索引中排序name列,对于索引中的每一项，MySQL在内部为它保存一个数据文件中实际记录所在位置的&#8220;指针&#8221;。因此，如果我们要查找name等于&#8220;Mike&#8221;记录的peopleid（SQL命令为&#8220;SELECT peopleid FROM people WHERE name='Mike';&#8221;），MySQL能够在name的索引中查找&#8220;Mike&#8221;值，然后直接转到数据文件中相应的行，准确地返回该行的peopleid（999）。在这个过程中，MySQL只需处理一个行就可以返回结果。如果没有&#8220;name&#8221;列的索引，MySQL要扫描数据文件中的所有记录，即1000个记录！显然，需要MySQL处理的记录数量越少，则它完成任务的速度就越快。 <br />
<br />
二、索引的类型 <br />
<br />
MySQL提供多种索引类型供选择： <br />
<br />
普通索引 : <br />
<br />
这是最基本的索引类型，而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建： <br />
<br />
创建索引，例如CREATE INDEX &lt;索引的名字&gt; ON tablename (列的列表)； <br />
<br />
修改表，例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表)； <br />
<br />
创建表的时候指定索引，例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) )； <br />
<br />
唯一性索引: <br />
<br />
这种索引和前面的&#8220;普通索引&#8221;基本相同，但有一个区别：索引列的所有值都只能出现一次，即必须唯一。唯一性索引可以用以下几种方式创建： <br />
<br />
创建索引，例如CREATE UNIQUE INDEX &lt;索引的名字&gt; ON tablename (列的列表)； <br />
<br />
修改表，例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表)； <br />
<br />
创建表的时候指定索引，例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) )； <br />
<br />
主键 : <br />
<br />
主键是一种唯一性索引，但它必须指定为&#8220;PRIMARY KEY&#8221;。如果你曾经用过AUTO_INCREMENT类型的列，你可能已经熟悉主键之类的概念了。主键一般在创建表的时候指定，例如&#8220;CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); &#8221;。但是，我们也可以通过修改表的方式加入主键，例如&#8220;ALTER TABLE tablename ADD PRIMARY KEY (列的列表); &#8221;。每个表只能有一个主键。 <br />
<br />
全文索引: <br />
<br />
MySQL从3.23.23版开始支持全文索引和全文检索。在MySQL中，全文索引的索引类型为FULLTEXT。全文索引可以在VARCHAR或者TEXT类型的列上创建。它可以通过CREATE TABLE命令创建，也可以通过ALTER TABLE或CREATE INDEX命令创建。对于大规模的数据集，通过ALTER TABLE（或者CREATE INDEX）命令创建全文索引要比把记录插入带有全文索引的空表更快。本文下面的讨论不再涉及全文索引，要了解更多信息，请参见MySQL documentation。 <br />
<br />
三、单列索引与多列索引 <br />
<br />
索引可以是单列索引，也可以是多列索引。下面我们通过具体的例子来说明这两种索引的区别。假设有这样一个people表： <br />
<br />
CREATE TABLE people ( peopleid <br />
<br />
SMALLINT NOT NULL AUTO_INCREMENT,<br />
<br />
firstname CHAR(50) NOT NULL, lastname CHAR(50) NOT NULL, <br />
<br />
age SMALLINT NOT NULL,<br />
<br />
townid SMALLINT NOT NULL, PRIMARY KEY (peopleid) );<br />
<br />
下面是我们插入到这个people表的数据： <br />
<br />
这个数据片段中有四个名字为&#8220;Mikes&#8221;的人（其中两个姓Sullivans，两个姓McConnells），有两个年龄为17岁的人，还有一个名字与众不同的Joe Smith。 <br />
<br />
这个表的主要用途是根据指定的用户姓、名以及年龄返回相应的peopleid。例如，我们可能需要查找姓名为Mike Sullivan、年龄17岁用户的peopleid（SQL命令为SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan' AND age=17；）。由于我们不想让MySQL每次执行查询就去扫描整个表，这里需要考虑运用索引。 <br />
<br />
首先，我们可以考虑在单个列上创建索引，比如firstname、lastname或者age列。如果我们创建firstname列的索引（ALTER TABLE people ADD INDEX firstname (firstname)；），MySQL将通过这个索引迅速把搜索范围限制到那些firstname='Mike'的记录，然后再在这个&#8220;中间结果集&#8221;上进行其他条件的搜索：它首先排除那些lastname不等于&#8220;Sullivan&#8221;的记录，然后排除那些age不等于17的记录。当记录满足所有搜索条件之后，MySQL就返回最终的搜索结果。 <br />
<br />
由于建立了firstname列的索引，与执行表的完全扫描相比，MySQL的效率提高了很多，但我们要求MySQL扫描的记录数量仍旧远远超过了实际所需要的。虽然我们可以删除firstname列上的索引，再创建lastname或者age列的索引，但总地看来，不论在哪个列上创建索引搜索效率仍旧相似。 <br />
<br />
为了提高搜索效率，我们需要考虑运用多列索引。如果为firstname、lastname和age这三个列创建一个多列索引，MySQL只需一次检索就能够找出正确的结果！下面是创建这个多列索引的SQL命令： <br />
<br />
ALTER TABLE people ADD INDEX fname_lname_age (firstname,lastname,age)； <br />
<br />
由于索引文件以B-树格式保存，MySQL能够立即转到合适的firstname，然后再转到合适的lastname，最后转到合适的age。在没有扫描数据文件任何一个记录的情况下，MySQL就正确地找出了搜索的目标记录！ <br />
<br />
那么，如果在firstname、lastname、age这三个列上分别创建单列索引，效果是否和创建一个firstname、lastname、age的多列索引一样呢？答案是否定的，两者完全不同。当我们执行查询的时候，MySQL只能使用一个索引。如果你有三个单列的索引，MySQL会试图选择一个限制最严格的索引。但是，即使是限制最严格的单列索引，它的限制能力也肯定远远低于firstname、lastname、age这三个列上的多列索引。 <br />
<br />
四、最左前缀 <br />
<br />
多列索引还有另外一个优点，它通过称为最左前缀（Leftmost Prefixing）的概念体现出来。继续考虑前面的例子，现在我们有一个firstname、lastname、age列上的多列索引，我们称这个索引为fname_lname_age。当搜索条件是以下各种列的组合时，MySQL将使用fname_lname_age索引： <br />
<br />
firstname，lastname，age<br />
<br />
firstname，lastname<br />
<br />
firstname<br />
<br />
从另一方面理解，它相当于我们创建了(firstname，lastname，age)、(firstname，lastname)以及(firstname)这些列组合上的索引。下面这些查询都能够使用这个fname_lname_age索引： <br />
<br />
SELECT peopleid FROM people <br />
<br />
WHERE firstname='Mike' AND lastname='Sullivan' AND age='17'; <br />
<br />
SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan'; <br />
<br />
SELECT peopleid FROM people WHERE firstname='Mike'; <br />
<br />
The following queries cannot use the index at all: <br />
<br />
SELECT peopleid FROM people WHERE lastname='Sullivan'; <br />
<br />
SELECT peopleid FROM people WHERE age='17'; <br />
<br />
SELECT peopleid FROM people WHERE lastname='Sullivan' AND age='17';<br />
<br />
五、选择索引列 <br />
<br />
在性能优化过程中，选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列：在WHERE子句中出现的列，在join子句中出现的列。请看下面这个查询： <br />
<br />
SELECT age ## 不使用索引<br />
<br />
FROM people WHERE firstname='Mike' ## 考虑使用索引<br />
<br />
AND lastname='Sullivan' ## 考虑使用索引<br />
<br />
这个查询与前面的查询略有不同，但仍属于简单查询。由于age是在SELECT部分被引用，MySQL不会用它来限制列选择操作。因此，对于这个查询来说，创建age列的索引没有什么必要。下面是一个更复杂的例子： <br />
<br />
　 <br />
<br />
　<br />
<br />
SELECT people.age, ##不使用索引<br />
<br />
town.name ##不使用索引<br />
<br />
FROM people LEFT JOIN town ON<br />
<br />
people.townid=town.townid ##考虑使用索引<br />
<br />
WHERE firstname='Mike' ##考虑使用索引<br />
<br />
AND lastname='Sullivan' ##考虑使用索引<br />
<br />
与前面的例子一样，由于firstname和lastname出现在WHERE子句中，因此这两个列仍旧有创建索引的必要。除此之外，由于town表的townid列出现在join子句中，因此我们需要考虑创建该列的索引。那么，我们是否可以简单地认为应该索引WHERE子句和join子句中出现的每一个列呢？差不多如此，但并不完全。我们还必须考虑到对列进行比较的操作符类型。MySQL只有对以下操作符才使用索引：&lt;，&lt;=，=，&gt;，&gt;=，BETWEEN，IN，以及某些时候的LIKE。可以在LIKE操作中使用索引的情形是指另一个操作数不是以通配符（%或者_）开头的情形。例如，&#8220;SELECT peopleid FROM people WHERE firstname LIKE 'Mich%';&#8221;这个查询将使用索引，但&#8220;SELECT peopleid FROM people WHERE firstname LIKE '%ike';&#8221;这个查询不会使用索引。</div>
<img src ="http://www.blogjava.net/jelver/aggbug/205573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-06-03 15:37 <a href="http://www.blogjava.net/jelver/articles/205573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL面试题</title><link>http://www.blogjava.net/jelver/articles/205571.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Tue, 03 Jun 2008 07:35:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/205571.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/205571.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/205571.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/205571.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/205571.html</trackback:ping><description><![CDATA[<h3><a title="Permanent Link to MySQL面试题 基础" href="http://www.interview.org.cn/?p=15" rel="bookmark">MySQL面试题 基础</a><a href="http://www.interview.org.cn/?p=15">http://www.interview.org.cn/?p=15</a></h3>
<div class="entry">
<p>1、MySQL取得当前时间的函数是?，格式化日期的函数是<br />
2、写出 SQL语句的格式 : 插入 ，更新 ，删除<br />
表名User<br />
Name Tel Content Date<br />
张三 13333663366 大专毕业 2006-10-11<br />
张三 13612312331 本科毕业 2006-10-15<br />
张四 021-55665566 中专毕业 2006-10-15<br />
(a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中<br />
(b) 请用sql语句把张三的时间更新成为当前系统时间<br />
(c) 请写出删除名为张四的全部记录<br />
3、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别<br />
4、MySQL自增类型(通常为表ID字段)必需将其设为(?)字段<br />
5、以下请用PHPMYADMIN完成<br />
(一)创建新闻发布系统，表名为message有如下字段</p>
<p>id 文章id<br />
title 文章标题<br />
content 文章内容<br />
category_id 文章分类id<br />
hits 点击量</p>
<p>(二)同样上述新闻发布系统：表comment记录用户回复内容，字段如下</p>
<p>comment_id 回复id<br />
id 文章id，关联message表中的id<br />
comment_content 回复内容<br />
现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序，回复最高的排在最前面<br />
文章id 文章标题 点击量 回复数量<br />
用一个SQL语句完成上述查询，如果文章没有回复则回复数量显示为0</p>
<p>(三)上述内容管理系统，表category保存分类信息，字段如下</p>
<p>category_id int(4) not null auto_increment;<br />
categroy_name varchar(40) not null;<br />
用户输入文章时，通过选择下拉菜单选定文章分类<br />
写出如何实现这个下拉菜单</p>
</div>
<img src ="http://www.blogjava.net/jelver/aggbug/205571.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-06-03 15:35 <a href="http://www.blogjava.net/jelver/articles/205571.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE中LOB字段的使用和维护 </title><link>http://www.blogjava.net/jelver/articles/192240.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Fri, 11 Apr 2008 09:41:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/192240.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/192240.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/192240.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/192240.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/192240.html</trackback:ping><description><![CDATA[ORACLE中LOB字段的使用和维护 &nbsp; &nbsp; <br />
&nbsp; -------------------------------------------------------------------------------- &nbsp; <br />
&nbsp; 摘要：本文通过实例介绍了在ORACLE数据库中通过DBMS_LOB包使用和维护LOB数据类型的基本方法。 &nbsp; &nbsp; <br />
&nbsp; 关键词：ORACLE &nbsp; &nbsp; DBMS_LOB &nbsp; &nbsp; LOB &nbsp; &nbsp; 维护 &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 中图分类号：TP31 &nbsp; &nbsp; &nbsp; <br />
&nbsp; 1、引言 &nbsp; &nbsp; &nbsp; <br />
&nbsp; 随着社会的发展，在现代信息系统的开发中，需要存储的已不仅仅是简单的文字信息，同时还包括一些图片和音像资料或者是超长的文本。比如开发一套旅游信息系统，每一个景点都有丰富的图片、音像资料和大量的文字介绍。这就要求后台数据库要有存储这些数据的能力。ORACLE公司在其Oracle8i中通过提供LOB字段实现了该功能。 &nbsp; &nbsp; <br />
&nbsp; 为了便于读者的理解，我们先介绍一些基本的概念： &nbsp; &nbsp; <br />
&nbsp; 在ORACLE数据库中，LOB（Large &nbsp; Objects—大对象）是用来存储大量的二进制和文本数据的一种数据类型（一个LOB字段可存储可多达4GB的数据）。目前，它又分为两种类型：内部LOB和外部LOB。内部LOB将数据以字节流的形式存储在数据库的内部。因而，内部LOB的许多操作都可以参与事务，也可以像处理普通数据一样对其进行备份和恢复操作。Oracle8i支持三种类型的内部LOB：BLOB（二进制数据）、CLOB（单字节字符数据）、NCLOB（多字节国家字符数据）。其中CLOB和NCLOB类型适用于存储超长的文本数据，BLOB字段适用于存储大量的二进制数据，如图像、视频、音频等。目前，Oracle8i只支持一种外部LOB类型，即BFILE类型。在数据库内，该类型仅存储数据在操作系统中的位置信息，而数据的实体以外部文件的形式存在于操作系统的文件系统中。因而，该类型所表示的数据是只读的，不参与事务。该类型可帮助用户管理大量的由外部程序访问的文件。 &nbsp; &nbsp; <br />
&nbsp; 为了方便下文的叙述，我们假定使用如下语句在数据库中创建了一张表。 &nbsp; &nbsp; <br />
&nbsp; CREATE &nbsp; TABLE &nbsp; view_sites_info &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; ( &nbsp; &nbsp; &nbsp; <br />
&nbsp; site_id &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NUMBER(3), &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; audio &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BLOB &nbsp; &nbsp; DEFAULT &nbsp; empty_blob(), &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; document &nbsp; &nbsp; &nbsp; CLOB &nbsp; &nbsp; DEFAULT &nbsp; empty_clob(), &nbsp; &nbsp; <br />
&nbsp; video_file &nbsp; &nbsp; &nbsp; BFILE &nbsp; &nbsp; DEFAULT &nbsp; NULL, &nbsp; &nbsp; <br />
&nbsp; constraint &nbsp; PK_TAB_view_sites_info &nbsp; primary &nbsp; key &nbsp; (site_id) &nbsp; &nbsp; <br />
&nbsp; ); &nbsp; <br />
&nbsp; 2、LOB的使用和维护 &nbsp; &nbsp; <br />
&nbsp; ORACL提供了多种使用和维护LOB的方式，如使用PL/SQL &nbsp; DBMS_LOB包、调用OCI（Oracle &nbsp; Call &nbsp; Interface）、使用Proc &nbsp; * &nbsp; C/C++、使用JDBC等。其中最为方便有效的是使用PL/SQL调用DBMS_LOB包，本文就将介绍该方法。 &nbsp; &nbsp; <br />
&nbsp; 在Oracle中，存储在LOB中数据称为LOB的值，如使用Select &nbsp; 对某一LOB字段进行选择，则返回的不是LOB的值，而是该LOB字段的定位器（可以理解为指向LOB值的指针）。如执行如下的SQL语句： &nbsp; &nbsp; <br />
&nbsp; DELCARE &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AUDIO_INFO &nbsp; &nbsp; BLOB； &nbsp; &nbsp; <br />
&nbsp; BENGIN &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SELECT &nbsp; audio &nbsp; INTO &nbsp; AUDIO_INFO &nbsp; FROM &nbsp; view_sites_info &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WHERE &nbsp; site_id=100; &nbsp; &nbsp; <br />
&nbsp; END; &nbsp; &nbsp; <br />
&nbsp; / &nbsp; &nbsp; <br />
&nbsp; 存储在AUDIO_INFO变量中的就是LOB定位器，而不是LOB的值。而要对某一LOB的值进行访问和维护操作，必需通过其定位器来进行。DBMS_LOB包中提供的所有函数和过程都以LOB定位器作为参数。 &nbsp; &nbsp; <br />
&nbsp; 2.1内部LOB &nbsp; &nbsp; <br />
&nbsp; DBMS_LOB包中主要提供了以下几个过程供用户对内部LOB字段进行维护。 &nbsp; &nbsp; <br />
&nbsp; APPEND（） &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 将源LOB中的内容加到目的LOB中 &nbsp; &nbsp; <br />
&nbsp; COPY（） &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 从源LOB中复制数据到目的LOB &nbsp; &nbsp; <br />
&nbsp; ERASE（） &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 删除LOB中全部或部分内容 &nbsp; &nbsp; <br />
&nbsp; TRIM（） &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 将LOB值减少到指定的长度 &nbsp; &nbsp; <br />
&nbsp; WRITE（） &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 向LOB &nbsp; 中写入数据 &nbsp; &nbsp; <br />
&nbsp; COMPARE（） &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 比较两个同种数据类型的LOB的部分或全部值是否相同 &nbsp; &nbsp; <br />
&nbsp; GETLENGTH（） &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 获取LOB的长度 &nbsp; &nbsp; <br />
&nbsp; READ（） &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 从LOB中读出数据 &nbsp; &nbsp; <br />
&nbsp; 下面我们以最为常用的读和写为例详细介绍这些过程的用法。 &nbsp; &nbsp; <br />
&nbsp; 首先介绍一下写过程。该过程的语法为： &nbsp; &nbsp; <br />
&nbsp; PROCEDURE &nbsp; WRITE &nbsp; ( &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lob_loc &nbsp; &nbsp; IN &nbsp; OUT &nbsp; &nbsp; BLOB, &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; amount &nbsp; &nbsp; &nbsp; IN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BINARY_INTEGER, &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offset &nbsp; &nbsp; &nbsp; IN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; INTEGER, &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buffer &nbsp; &nbsp; &nbsp; IN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RAW); &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PROCEDURE &nbsp; WRITE &nbsp; ( &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lob_loc &nbsp; &nbsp; IN &nbsp; OUT &nbsp; &nbsp; CLOB &nbsp; &nbsp; &nbsp; CHARACTER &nbsp; SET &nbsp; ANY_CS, &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; amount &nbsp; &nbsp; &nbsp; IN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BINARY_INTEGER, &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offset &nbsp; &nbsp; &nbsp; IN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; INTEGER, &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buffer &nbsp; &nbsp; &nbsp; IN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; VARCHAR2 &nbsp; CHARACTER &nbsp; SET &nbsp; lob_loc%CHARSET); &nbsp; &nbsp; <br />
&nbsp; 各参数的含义为： &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lob_loc：要写入的LOB定位器 &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; amount：写入LOB中的字节数 &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offset：指定开始操作的偏移量 &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buffer： &nbsp; 指定写操作的缓冲区 &nbsp; &nbsp; <br />
&nbsp; 下面的代码就是运用该过程向LOB字段写入数据的示例。 &nbsp; &nbsp; <br />
&nbsp; DECLARE &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lobloc &nbsp; CLOB; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buffer &nbsp; VARCHAR2(2000); &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; amount &nbsp; NUMBER &nbsp; := &nbsp; 20; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offset &nbsp; NUMBER &nbsp; := &nbsp; 1; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; BEGIN &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --初始化要写入的数据 &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buffer &nbsp; := &nbsp; 'This &nbsp; is &nbsp; a &nbsp; writing &nbsp; example'; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; amount &nbsp; := &nbsp; length(buffer); &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SELECT &nbsp; document &nbsp; INTO &nbsp; lobloc &nbsp; &nbsp; -- &nbsp; 获取定位器并锁定行 &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FROM &nbsp; &nbsp; view_sites_info &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WHERE &nbsp; site_id &nbsp; = &nbsp; 100 &nbsp; FOR &nbsp; UPDATE; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dbms_lob.write(lobloc,amount,1,buffer); &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; COMMIT; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; END; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; / &nbsp; &nbsp; <br />
&nbsp; 需要特别指出的是： &nbsp; &nbsp; <br />
&nbsp; I. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 在调用写过程前一定要使用SELECT语句检索到定位器且用 &nbsp; FOR &nbsp; UPDATE &nbsp; 子句锁定行，否则不能更新LOB； &nbsp; &nbsp; <br />
&nbsp; II. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 写过程从offset指定的位置开始，向LOB中写入长度为amount的数据，原LOB中在这个范围内的任何数据都将被覆盖。 &nbsp; &nbsp; <br />
&nbsp; III. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 缓冲区的最大容量为32767字节，因此在写入大量数据时需多次调用该过程。 &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; 下面再来介绍一下读过程： &nbsp; &nbsp; <br />
&nbsp; 该过程的语法为： &nbsp; &nbsp; <br />
&nbsp; PROCEDURE &nbsp; READ &nbsp; ( &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lob_loc &nbsp; &nbsp; &nbsp; IN &nbsp; &nbsp; &nbsp; &nbsp; BLOB, &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; amount &nbsp; &nbsp; &nbsp; &nbsp; IN &nbsp; OUT &nbsp; &nbsp; BINARY_INTEGER, &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offset &nbsp; &nbsp; &nbsp; &nbsp; IN &nbsp; &nbsp; &nbsp; &nbsp; INTEGER, &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buffer &nbsp; &nbsp; &nbsp; &nbsp; OUT &nbsp; &nbsp; &nbsp; RAW); &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; PROCEDURE &nbsp; READ &nbsp; ( &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lob_loc &nbsp; &nbsp; &nbsp; IN &nbsp; &nbsp; &nbsp; &nbsp; CLOB &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CHARACTER &nbsp; SET &nbsp; ANY_CS, &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; amount &nbsp; &nbsp; &nbsp; &nbsp; IN &nbsp; OUT &nbsp; &nbsp; BINARY_INTEGER, &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offset &nbsp; &nbsp; &nbsp; &nbsp; IN &nbsp; &nbsp; &nbsp; &nbsp; INTEGER, &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buffer &nbsp; &nbsp; &nbsp; &nbsp; OUT &nbsp; &nbsp; &nbsp; VARCHAR2 &nbsp; CHARACTER &nbsp; SET &nbsp; lob_loc%CHARSET); &nbsp; &nbsp; <br />
&nbsp; 各参数的含义为： &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lob_loc：要读取的LOB定位器 &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; amount：要读取的字节数 &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offset：开始读取操作的偏移量 &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buffer： &nbsp; 存储读操作结果的缓冲区 &nbsp; &nbsp; <br />
&nbsp; 下面的代码演示了如何使用该过程读取LOB字段中的数据： &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; DECLARE &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lobloc &nbsp; CLOB; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buffer &nbsp; VARCHAR2(2000); &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; amount &nbsp; NUMBER &nbsp; := &nbsp; 2; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offset &nbsp; NUMBER &nbsp; := &nbsp; 6; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; BEGIN &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SELECT &nbsp; document &nbsp; INTO &nbsp; lobloc &nbsp; &nbsp; --获取定位器 &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FROM &nbsp; lob_store &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WHERE &nbsp; lob_id &nbsp; = &nbsp; 100; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dbms_lob.read(lobloc,amount,offset,buffer);--读取数据到缓冲区 &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dbms_output.put_line(buffer);--显示缓冲区中的数据 &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; COMMIT; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; END; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; /&nbsp;&nbsp; <br />
<img src ="http://www.blogjava.net/jelver/aggbug/192240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-04-11 17:41 <a href="http://www.blogjava.net/jelver/articles/192240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>处理CLOB字段的动态PL/SQL  (zhuan)   </title><link>http://www.blogjava.net/jelver/articles/192127.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Fri, 11 Apr 2008 03:40:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/192127.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/192127.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/192127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/192127.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/192127.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">动态PL</span><span style="color: #808080">/</span><span style="color: #000000">SQL,对CLOB字段操作可传递表名table_name，表的唯一标志字段名field_id，clob字段名field_name，记录号v_id，开始处理字符的位置v_pos，传入的字符串变量v_clob<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />修改CLOB的PL</span><span style="color: #808080">/</span><span style="color: #000000">SQL过程：updateclob<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">or</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">replace</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">procedure</span><span style="color: #000000">&nbsp;updateclob(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">number</span><span style="color: #000000">,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_pos&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">number</span><span style="color: #000000">,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_clob&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">is</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lobloc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clob;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c_clob&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">32767</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;amt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;binary_integer;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;binary_integer;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query_str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">1000</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;pos:</span><span style="color: #808080">=</span><span style="color: #000000">v_pos</span><span style="color: #808080">*</span><span style="font-weight: bold; color: #800000">32766</span><span style="color: #808080">+</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;amt&nbsp;:</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;length(v_clob);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;c_clob:</span><span style="color: #808080">=</span><span style="color: #000000">v_clob;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;query_str&nbsp;:</span><span style="color: #808080">=</span><span style="color: #ff0000">'</span><span style="color: #ff0000">select&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">field_name</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;from&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">table_name</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;where&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">field_id</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000">=&nbsp;:id&nbsp;for&nbsp;update&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">initialize&nbsp;buffer&nbsp;with&nbsp;data&nbsp;to&nbsp;be&nbsp;inserted&nbsp;or&nbsp;updated</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">EXECUTE</span><span style="color: #000000">&nbsp;IMMEDIATE&nbsp;query_str&nbsp;</span><span style="color: #0000ff">INTO</span><span style="color: #000000">&nbsp;lobloc&nbsp;USING&nbsp;v_id;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">from&nbsp;pos&nbsp;position,&nbsp;write&nbsp;32766&nbsp;varchar2&nbsp;into&nbsp;lobloc</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;dbms_lob.write(lobloc,&nbsp;amt,&nbsp;pos,&nbsp;c_clob);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">commit</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />exception<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;others&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">rollback</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #808080">/</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />用法说明：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />在插入或修改以前，先把其它字段插入或修改，CLOB字段设置为空empty_clob()，<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />然后调用以上的过程插入大于2048到32766个字符。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />如果需要插入大于32767个字符，编一个循环即可解决问题。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />查询CLOB的PL</span><span style="color: #808080">/</span><span style="color: #000000">SQL函数：getclob<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">or</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">replace</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;getclob(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">number</span><span style="color: #000000">,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_pos&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">number</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">is</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lobloc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clob;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">32767</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;amount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">number</span><span style="color: #000000">&nbsp;:</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">2000</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">number</span><span style="color: #000000">&nbsp;:</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query_str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">1000</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;query_str&nbsp;:</span><span style="color: #808080">=</span><span style="color: #ff0000">'</span><span style="color: #ff0000">select&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">field_name</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;from&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">table_name</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;where&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">field_id</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000">=&nbsp;:id&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">initialize&nbsp;buffer&nbsp;with&nbsp;data&nbsp;to&nbsp;be&nbsp;found</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">EXECUTE</span><span style="color: #000000">&nbsp;IMMEDIATE&nbsp;query_str&nbsp;</span><span style="color: #0000ff">INTO</span><span style="color: #000000">&nbsp;lobloc&nbsp;USING&nbsp;v_id;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;offset:</span><span style="color: #808080">=</span><span style="color: #000000">offset</span><span style="color: #808080">+</span><span style="color: #000000">(v_pos</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">)</span><span style="color: #808080">*</span><span style="font-weight: bold; color: #800000">2000</span><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">read&nbsp;2000&nbsp;varchar2&nbsp;from&nbsp;the&nbsp;buffer</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;dbms_lob.</span><span style="color: #0000ff">read</span><span style="color: #000000">(lobloc,amount,offset,buffer);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;buffer;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />exception<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;no_data_found&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;buffer;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #808080">/</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />用法说明：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />用select&nbsp;getclob(table_name,field_id,field_name,v_id,v_pos)&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;partstr&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;dual;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />可以从CLOB字段中取2000个字符到partstr中，<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />编一个循环可以把partstr组合成dbms_lob.getlength(field_name)长度的目标字符串。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />调用PL</span><span style="color: #808080">/</span><span style="color: #000000">SQL过程的方法:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;SQL</span><span style="color: #808080">*</span><span style="color: #000000">PLUS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL</span><span style="color: #808080">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">EXEC</span><span style="color: #000000">&nbsp;过程名</span><span style="color: #ff0000">[</span><span style="color: #ff0000">(参数)</span><span style="color: #ff0000">]</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Procedure</span><span style="color: #000000">&nbsp;Builder&nbsp;&nbsp;&nbsp;&nbsp;PL</span><span style="color: #808080">/</span><span style="color: #000000">SQL</span><span style="color: #808080">&gt;</span><span style="color: #000000">过程名</span><span style="color: #ff0000">[</span><span style="color: #ff0000">(参数)</span><span style="color: #ff0000">]</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;JAVA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL&nbsp;{&nbsp;过程名</span><span style="color: #ff0000">[</span><span style="color: #ff0000">(参数)</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;};<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;PHP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">BEGIN</span><span style="color: #000000">&nbsp;{&nbsp;过程名</span><span style="color: #ff0000">[</span><span style="color: #ff0000">(参数)</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;}&nbsp;</span><span style="color: #0000ff">END</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/jelver/aggbug/192127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-04-11 11:40 <a href="http://www.blogjava.net/jelver/articles/192127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle常见日期处理</title><link>http://www.blogjava.net/jelver/articles/173985.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Wed, 09 Jan 2008 05:34:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/173985.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/173985.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/173985.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/173985.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/173985.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">TO_DATE格式&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #ff00ff">Day</span><span style="color: #000000">:&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />dd&nbsp;</span><span style="font-weight: bold; color: #000000">number</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">12</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />dy&nbsp;abbreviated&nbsp;fri&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #ff00ff">day</span><span style="color: #000000">&nbsp;spelled&nbsp;out&nbsp;friday&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />ddspth&nbsp;spelled&nbsp;out,&nbsp;ordinal&nbsp;twelfth&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #ff00ff">Month</span><span style="color: #000000">:&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />mm&nbsp;</span><span style="font-weight: bold; color: #000000">number</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">03</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />mon&nbsp;abbreviated&nbsp;mar&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #ff00ff">month</span><span style="color: #000000">&nbsp;spelled&nbsp;out&nbsp;march&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #ff00ff">Year</span><span style="color: #000000">:&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />yy&nbsp;two&nbsp;digits&nbsp;</span><span style="font-weight: bold; color: #800000">98</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />yyyy&nbsp;four&nbsp;digits&nbsp;</span><span style="font-weight: bold; color: #800000">1998</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />24小时格式下时间范围为：&nbsp;</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">:</span><span style="font-weight: bold; color: #800000">00</span><span style="color: #000000">:</span><span style="font-weight: bold; color: #800000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">-</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">23</span><span style="color: #000000">:</span><span style="font-weight: bold; color: #800000">59</span><span style="color: #000000">:</span><span style="font-weight: bold; color: #800000">59</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />12小时格式下时间范围为：&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">:</span><span style="font-weight: bold; color: #800000">00</span><span style="color: #000000">:</span><span style="font-weight: bold; color: #800000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">-</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">12</span><span style="color: #000000">:</span><span style="font-weight: bold; color: #800000">59</span><span style="color: #000000">:</span><span style="font-weight: bold; color: #800000">59</span><span style="color: #000000">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />日期和字符转换函数用法（to_date,to_char）&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000">.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;to_char(&nbsp;to_date(</span><span style="font-weight: bold; color: #800000">222</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">J</span><span style="color: #ff0000">'</span><span style="color: #000000">),</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Jsp</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;dual&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />显示Two&nbsp;Hundred&nbsp;Twenty</span><span style="color: #808080">-</span><span style="color: #000000">Two&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />求某天是星期几&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;to_char(to_date(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2002-08-26</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">yyyy-mm-dd</span><span style="color: #ff0000">'</span><span style="color: #000000">),</span><span style="color: #ff0000">'</span><span style="color: #ff0000">day</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;dual;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />星期一&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;to_char(to_date(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2002-08-26</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">yyyy-mm-dd</span><span style="color: #ff0000">'</span><span style="color: #000000">),</span><span style="color: #ff0000">'</span><span style="color: #ff0000">day</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">NLS_DATE_LANGUAGE&nbsp;=&nbsp;American</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;dual;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />monday&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />设置日期语言&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">ALTER</span><span style="color: #000000">&nbsp;SESSION&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;NLS_DATE_LANGUAGE</span><span style="color: #808080">=</span><span style="color: #ff0000">'</span><span style="color: #ff0000">AMERICAN</span><span style="color: #ff0000">'</span><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />也可以这样&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />TO_DATE&nbsp;(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2002-08-26</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">YYYY-mm-dd</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">NLS_DATE_LANGUAGE&nbsp;=&nbsp;American</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">4</span><span style="color: #000000">.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />两个日期间的天数&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">floor</span><span style="color: #000000">(sysdate&nbsp;</span><span style="color: #808080">-</span><span style="color: #000000">&nbsp;to_date(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">20020405</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">yyyymmdd</span><span style="color: #ff0000">'</span><span style="color: #000000">))&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;dual;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">5</span><span style="color: #000000">.&nbsp;时间为null的用法&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;id,&nbsp;active_date&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;table1&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">UNION</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,&nbsp;TO_DATE(</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;dual;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />注意要用TO_DATE(</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">6</span><span style="color: #000000">.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />a_date&nbsp;</span><span style="color: #808080">between</span><span style="color: #000000">&nbsp;to_date(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">20011201</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">yyyymmdd</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;to_date(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">20011231</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">yyyymmdd</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />所以，当时间需要精确的时候，觉得to_char还是必要的&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">7</span><span style="color: #000000">.&nbsp;日期格式冲突问题&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />输入的格式要看你安装的ORACLE字符集的类型,&nbsp;比如:&nbsp;US7ASCII,&nbsp;date格式的类型就是:&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">01-Jan-01</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">alter</span><span style="color: #000000">&nbsp;system&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;NLS_DATE_LANGUAGE&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;American&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">alter</span><span style="color: #000000">&nbsp;session&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;NLS_DATE_LANGUAGE&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;American&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />或者在to_date中写&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;to_char(to_date(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2002-08-26</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">yyyy-mm-dd</span><span style="color: #ff0000">'</span><span style="color: #000000">),</span><span style="color: #ff0000">'</span><span style="color: #ff0000">day</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">NLS_DATE_LANGUAGE&nbsp;=&nbsp;American</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;dual;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />注意我这只是举了NLS_DATE_LANGUAGE，当然还有很多，&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />可查看&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></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;nls_session_parameters&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></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;V$NLS_PARAMETERS&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">8</span><span style="color: #000000">.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></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;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;(&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;rownum</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;rnum&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;all_objects&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;rownum&nbsp;</span><span style="color: #808080">&lt;=</span><span style="color: #000000">&nbsp;to_date(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2002-02-28</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">yyyy-mm-dd</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">-</span><span style="color: #000000">&nbsp;to_date(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2002-&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />02-01</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">yyyy-mm-dd</span><span style="color: #ff0000">'</span><span style="color: #000000">)</span><span style="color: #808080">+</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;to_char(&nbsp;to_date(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2002-02-01</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">yyyy-mm-dd</span><span style="color: #ff0000">'</span><span style="color: #000000">)</span><span style="color: #808080">+</span><span style="color: #000000">rnum</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">D</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #808080">not</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;(&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">1</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">7</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />查找2002</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">02</span><span style="color: #808080">-</span><span style="color: #000000">28至2002</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">02</span><span style="color: #808080">-</span><span style="color: #000000">01间除星期一和七的天数&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />在前后分别调用DBMS_UTILITY.GET_TIME,&nbsp;让后将结果相减(得到的是1</span><span style="color: #808080">/</span><span style="color: #000000">100秒,&nbsp;而不是毫秒).&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">9</span><span style="color: #000000">.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;months_between(to_date(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">01-31-1999</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">MM-DD-YYYY</span><span style="color: #ff0000">'</span><span style="color: #000000">),&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />to_date(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">12-31-1998</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">MM-DD-YYYY</span><span style="color: #ff0000">'</span><span style="color: #000000">))&nbsp;"MONTHS"&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;DUAL;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;months_between(to_date(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">02-01-1999</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">MM-DD-YYYY</span><span style="color: #ff0000">'</span><span style="color: #000000">),&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />to_date(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">12-31-1998</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">MM-DD-YYYY</span><span style="color: #ff0000">'</span><span style="color: #000000">))&nbsp;"MONTHS"&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;DUAL;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">1.03225806451613</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">.&nbsp;Next_day的用法&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Next_day(date,&nbsp;</span><span style="color: #ff00ff">day</span><span style="color: #000000">)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Monday</span><span style="color: #808080">-</span><span style="color: #000000">Sunday,&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;format&nbsp;code&nbsp;</span><span style="color: #ff00ff">DAY</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Mon</span><span style="color: #808080">-</span><span style="color: #000000">Sun,&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;format&nbsp;code&nbsp;DY&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">1</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">7</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;format&nbsp;code&nbsp;D&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">11</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;to_char(sysdate,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">hh:mi:ss</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;TIME&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;all_objects&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />注意：第一条记录的TIME&nbsp;与最后一行是一样的&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />可以建立一个函数来处理这个问题&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">or</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">replace</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;sys_date&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;date&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">begin</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;sysdate;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;to_char(sys_date,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">hh:mi:ss</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;all_objects;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">12</span><span style="color: #000000">.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />获得小时数&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;EXTRACT(HOUR&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">TIMESTAMP</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2001-02-16&nbsp;2:38:40</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;offer&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />SQL</span><span style="color: #808080">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;sysdate&nbsp;,to_char(sysdate,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">hh</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;dual;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />SYSDATE&nbsp;TO_CHAR(SYSDATE,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">HH</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">------------------&nbsp;---------------------&nbsp;</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">2003</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">13</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">19</span><span style="color: #000000">:</span><span style="font-weight: bold; color: #800000">35</span><span style="color: #000000">:</span><span style="font-weight: bold; color: #800000">21</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">07</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />SQL</span><span style="color: #808080">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;sysdate&nbsp;,to_char(sysdate,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">hh24</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;dual;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />SYSDATE&nbsp;TO_CHAR(SYSDATE,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">HH24</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">------------------&nbsp;-----------------------&nbsp;</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">2003</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">13</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">19</span><span style="color: #000000">:</span><span style="font-weight: bold; color: #800000">35</span><span style="color: #000000">:</span><span style="font-weight: bold; color: #800000">21</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">19</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />获取年月日与此类似&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">13</span><span style="color: #000000">.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />年月日的处理&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;older_date,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />newer_date,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />years,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />months,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #ff00ff">abs</span><span style="color: #000000">(&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />trunc(&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />newer_date</span><span style="color: #808080">-</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />add_months(&nbsp;older_date,years</span><span style="color: #808080">*</span><span style="font-weight: bold; color: #800000">12</span><span style="color: #808080">+</span><span style="color: #000000">months&nbsp;)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />)&nbsp;days&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;(&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />trunc(months_between(&nbsp;newer_date,&nbsp;older_date&nbsp;)</span><span style="color: #808080">/</span><span style="font-weight: bold; color: #800000">12</span><span style="color: #000000">)&nbsp;YEARS,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />mod(trunc(months_between(&nbsp;newer_date,&nbsp;older_date&nbsp;)),&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">12</span><span style="color: #000000">&nbsp;)&nbsp;MONTHS,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />newer_date,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />older_date&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;(&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;hiredate&nbsp;older_date,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />add_months(hiredate,rownum)</span><span style="color: #808080">+</span><span style="color: #000000">rownum&nbsp;newer_date&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;emp&nbsp;)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">14</span><span style="color: #000000">.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />处理月份天数不定的办法&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;to_char(add_months(last_day(sysdate)&nbsp;</span><span style="color: #808080">+</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000">),&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">yyyymmdd</span><span style="color: #ff0000">'</span><span style="color: #000000">),last_day(sysdate)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;dual&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">16</span><span style="color: #000000">.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />找出今年的天数&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;add_months(trunc(sysdate,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">year</span><span style="color: #ff0000">'</span><span style="color: #000000">),&nbsp;</span><span style="font-weight: bold; color: #800000">12</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">-</span><span style="color: #000000">&nbsp;trunc(sysdate,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">year</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;dual&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />闰年的处理方法&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />to_char(&nbsp;last_day(&nbsp;to_date(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">02</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">||</span><span style="color: #000000">&nbsp;:</span><span style="color: #ff00ff">year</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">mmyyyy</span><span style="color: #ff0000">'</span><span style="color: #000000">)&nbsp;),&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">dd</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />如果是28就不是闰年&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">17</span><span style="color: #000000">.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />yyyy与rrrr的区别&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #ff0000">'</span><span style="color: #ff0000">YYYY99&nbsp;TO_C&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />-------&nbsp;----&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />yyyy&nbsp;99&nbsp;0099&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />rrrr&nbsp;99&nbsp;1999&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />yyyy&nbsp;01&nbsp;0001&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />rrrr&nbsp;01&nbsp;2001&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />18.不同时区的处理&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />select&nbsp;to_char(&nbsp;NEW_TIME(&nbsp;sysdate,&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">GMT</span><span style="color: #ff0000">'</span><span style="color: #ff0000">,</span><span style="color: #ff0000">'</span><span style="color: #000000">EST</span><span style="color: #ff0000">'</span><span style="color: #ff0000">),&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">dd</span><span style="color: #808080">/</span><span style="color: #000000">mm</span><span style="color: #808080">/</span><span style="color: #000000">yyyy&nbsp;hh:mi:ss</span><span style="color: #ff0000">'</span><span style="color: #ff0000">)&nbsp;,sysdate&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />from&nbsp;dual;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />19.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />5秒钟一个间隔&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Select&nbsp;TO_DATE(FLOOR(TO_CHAR(sysdate,</span><span style="color: #ff0000">'</span><span style="color: #000000">SSSSS</span><span style="color: #ff0000">'</span><span style="color: #ff0000">)/300)&nbsp;*&nbsp;300,</span><span style="color: #ff0000">'</span><span style="color: #000000">SSSSS</span><span style="color: #ff0000">'</span><span style="color: #ff0000">)&nbsp;,TO_CHAR(sysdate,</span><span style="color: #ff0000">'</span><span style="color: #000000">SSSSS</span><span style="color: #ff0000">'</span><span style="color: #ff0000">)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />from&nbsp;dual&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />2002-11-1&nbsp;9:55:00&nbsp;35786&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />SSSSS表示5位秒数&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />20.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />一年的第几天&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />select&nbsp;TO_CHAR(SYSDATE,</span><span style="color: #ff0000">'</span><span style="color: #000000">DDD</span><span style="color: #ff0000">'</span><span style="color: #ff0000">),sysdate&nbsp;from&nbsp;dual&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />310&nbsp;2002-11-6&nbsp;10:03:51&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />21.计算小时,分,秒,毫秒&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />select&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Days,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />A,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />TRUNC(A*24)&nbsp;Hours,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />TRUNC(A*24*60&nbsp;-&nbsp;60*TRUNC(A*24))&nbsp;Minutes,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />TRUNC(A*24*60*60&nbsp;-&nbsp;60*TRUNC(A*24*60))&nbsp;Seconds,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />TRUNC(A*24*60*60*100&nbsp;-&nbsp;100*TRUNC(A*24*60*60))&nbsp;mSeconds&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />from&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />(&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />select&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />trunc(sysdate)&nbsp;Days,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />sysdate&nbsp;-&nbsp;trunc(sysdate)&nbsp;A&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />from&nbsp;dual&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />select&nbsp;*&nbsp;from&nbsp;tabname&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />order&nbsp;by&nbsp;decode(mode,</span><span style="color: #ff0000">'</span><span style="color: #000000">FIFO</span><span style="color: #ff0000">'</span><span style="color: #ff0000">,1,-1)*to_char(rq,</span><span style="color: #ff0000">'</span><span style="color: #000000">yyyymmddhh24miss</span><span style="color: #ff0000">'</span><span style="color: #ff0000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />//&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />floor((date2-date1)&nbsp;/365)&nbsp;作为年&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />floor((date2-date1,&nbsp;365)&nbsp;/30)&nbsp;作为月&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />mod(mod(date2-date1,&nbsp;365),&nbsp;30)作为日.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />23.next_day函数&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。</span></div>
<img src ="http://www.blogjava.net/jelver/aggbug/173985.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-01-09 13:34 <a href="http://www.blogjava.net/jelver/articles/173985.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> oracle SQL性能优化(转)</title><link>http://www.blogjava.net/jelver/articles/172298.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Wed, 02 Jan 2008 11:51:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/172298.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/172298.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/172298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/172298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/172298.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; （1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择最有效率的表名顺序(只在基于规则的优化器中有效)：ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名，FROM子句中写在最后的表(基础表 driving table)将被最先处理，在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选...&nbsp;&nbsp;<a href='http://www.blogjava.net/jelver/articles/172298.html'>阅读全文</a><img src ="http://www.blogjava.net/jelver/aggbug/172298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-01-02 19:51 <a href="http://www.blogjava.net/jelver/articles/172298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle复杂查询语句</title><link>http://www.blogjava.net/jelver/articles/172295.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Wed, 02 Jan 2008 11:38:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/172295.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/172295.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/172295.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/172295.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/172295.html</trackback:ping><description><![CDATA[<p>1.查询语句的使用<br />
使用 select语句和子查询(subquery)可以从一个或多个表,视图,实体试图中返回数据.<br />
&nbsp;<br />
1.1相关子查询<br />
可以将子查询(as subquery)或in或exists当成where的一个条件的一部分,这样的查询称为子查询<br />
&nbsp; .where中可以包含一个select语句的子查询<br />
&nbsp; .where中可以包含in,exists语句<br />
&nbsp; .最多可以嵌套16层<br />
&nbsp; .层次过多会影响性能<br />
&nbsp; [例]简单子查询实例<br />
&nbsp; 查询是否有的专家既以研究所的名义来申请基金项目,又以大学系为单位申请项目<br />
&nbsp; (按规定只能以一个单位来申请)<br />
&nbsp; SQL&gt; create table univ_subject<br />
&nbsp; 2&nbsp;&nbsp;&nbsp; (<br />
&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varchar2(12) not null,<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; per_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; number&nbsp;&nbsp;&nbsp;&nbsp; not null,<br />
&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dept_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varchar2(20)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 6&nbsp;&nbsp;&nbsp; );<br />
&nbsp; SQL&gt; insert into univ_subject&nbsp; values('gaoqianjing',1001,'信息工程系');<br />
&nbsp; SQL&gt; insert into univ_subject&nbsp; values('wangbing',1002,'物理系');<br />
&nbsp; SQL&gt; insert into univ_subject&nbsp; values('liming',1003,'化学系');<br />
&nbsp; ===============<br />
&nbsp;&nbsp; SQL&gt; create table&nbsp; colle_subject<br />
&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; (<br />
&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; colle_name&nbsp;&nbsp;&nbsp; varchar2(20),<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; per_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; number <br />
&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp; );<br />
&nbsp; SQL&gt; insert into colle_subject values('电子研究所',1001);<br />
&nbsp; SQL&gt;&nbsp; insert into colle_subject values('物理研究所',1005);<br />
&nbsp; ================<br />
&nbsp; SQL&gt; select name,per_id,dept_name from univ_subject where per_id in <br />
&nbsp; 2&nbsp;&nbsp;&nbsp; (select per_id from colle_subject);</p>
<p>&nbsp; NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PER_ID&nbsp;&nbsp; DEPT_NAME<br />
&nbsp; ------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---------&nbsp;&nbsp;&nbsp;&nbsp; --------------------<br />
&nbsp; gaoqianjing&nbsp; 1001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 信息工程系</p>
<p>1.2外连接<br />
&nbsp;[例]外连接实例<br />
&nbsp;招生中所有学生的信息放在students表中,而部分有特长的学生在另一个表中stuent_skill中同样有该学生<br />
&nbsp;的信息。现在要全部列出所有学生,如果某个学生在表student_skill中就有其特长信息,并显示特长信息,如果<br />
&nbsp;某个学生没有特长就显示特长问空.<br />
&nbsp;SQL&gt;&nbsp; create table students<br />
&nbsp; 2&nbsp;&nbsp;&nbsp; (<br />
&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; st_id&nbsp;&nbsp;&nbsp; varchar2(20),<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp; varchar2(10),<br />
&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; age&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; number(2),<br />
&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tol_score&nbsp;&nbsp; number(3)<br />
&nbsp; 7&nbsp;&nbsp;&nbsp; ) ;<br />
SQL&gt;&nbsp;&nbsp; insert into students values('973231','wangbindu',22,501);<br />
SQL&gt;&nbsp;&nbsp; insert into students values('973232','zhuzhijing',21,538);<br />
SQL&gt;&nbsp; insert into students values('973233','gaojing',21,576);<br />
===================</p>
<p>SQL&gt;&nbsp; create table student_skill<br />
&nbsp; 2&nbsp;&nbsp; (<br />
&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; st_id&nbsp; varchar2(20),<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; skill&nbsp;&nbsp;&nbsp; varchar2(20)<br />
&nbsp; 5&nbsp; );<br />
SQL&gt;&nbsp; insert into student_skill values('973231','篮球');<br />
SQL&gt;&nbsp; insert into student_skill(st_id) values('973232');<br />
SQL&gt;&nbsp; insert into student_skill values('973233','足球');<br />
===================</p>
<p>SQL&gt;&nbsp;&nbsp; select a.* , b.skill from students a,student_skill b where a.st_id=b.st_id(+) <br />
order by a.st_id;</p>
<p>ST_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AGE TOL_SCORE SKILL<br />
-------------------- ---------- --------- --------- ------------------&nbsp; --<br />
973231&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wangbindu&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 501&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 篮球<br />
973232&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zhuzhijing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 538<br />
973233&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gaojing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 576&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 足球</p>
<p>1.3自我连接<br />
自我连接是在同一个表或视图内进行条件连接.<br />
[例]自我连接实例<br />
查询每个雇员的名字和该雇员的经理的名字:<br />
SQL&gt; select e1.ename||'&nbsp;&nbsp; work for&nbsp;&nbsp; '||e2.ename "Employees and their Managers"<br />
&nbsp; 2&nbsp; from&nbsp; scott.emp e1,scott.emp e2 where e1.mgr=e2.empno;</p>
<p>Employees and their Managers<br />
-------------------------------------------------<br />
SMITH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; work for&nbsp;&nbsp; FORD<br />
ALLEN&nbsp;&nbsp;&nbsp;&nbsp; work for&nbsp;&nbsp; BLAKE<br />
WARD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; work for&nbsp;&nbsp; BLAKE<br />
JONES&nbsp;&nbsp;&nbsp;&nbsp; work for&nbsp;&nbsp; KING<br />
MARTIN&nbsp;&nbsp; work for&nbsp;&nbsp; BLAKE<br />
BLAKE&nbsp;&nbsp;&nbsp;&nbsp; work for&nbsp;&nbsp; KING<br />
CLARK&nbsp;&nbsp;&nbsp;&nbsp; work for&nbsp;&nbsp; KING<br />
SCOTT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; work for&nbsp;&nbsp; JONES<br />
TURNER&nbsp; work for&nbsp;&nbsp; BLAKE<br />
ADAMS&nbsp;&nbsp;&nbsp;&nbsp; work for&nbsp;&nbsp; SCOTT<br />
JAMES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; work for&nbsp;&nbsp; BLAKE<br />
FORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; work for&nbsp;&nbsp; JONES<br />
MILLER&nbsp;&nbsp;&nbsp;&nbsp; work for&nbsp;&nbsp; CLARK</p>
<p>1.4UNION , INTERSECT及 MINUS<br />
UNION:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以将两个以上的表的相类似的查询结果放在一起 (union all则表示返回所有的行)<br />
具体语法:<br />
select ...<br />
union[all]<br />
select...<br />
==========</p>
<p>INTERSECT:&nbsp; 返回两个表中相同的信息<br />
具体语法:<br />
select ...<br />
intersect<br />
select...<br />
==========</p>
<p>MINUS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; 返回一个表中出现的信息<br />
具体语法:<br />
select ...<br />
minus<br />
select...<br />
[例1]UNION操作实例<br />
SQL&gt; select&nbsp; st_id&nbsp; from students <br />
&nbsp; 2&nbsp; union <br />
&nbsp; 3&nbsp; select&nbsp; st_id&nbsp; from student_skill;</p>
<p>ST_ID<br />
--------------------<br />
973231<br />
973232<br />
973233</p>
<p>[例2]INTERSECT操作实例<br />
列出有特长的学生的学号<br />
SQL&gt; select st_id from students<br />
&nbsp; 2&nbsp; intersect<br />
&nbsp; 3&nbsp; select st_id from student_skill;<br />
ST_ID<br />
--------------------<br />
973231<br />
973233</p>
<p>[例3]MINUS操作实例<br />
列出没有特长学生的学号<br />
select st_id from students<br />
minus<br />
select st_id from student_skill;<br />
ST_ID<br />
--------------------<br />
973232</p>
<p><br />
2.创建复杂的视图<br />
许多应用系统有统计等功能,建议最好把这些复杂语句写成视图.下面是几个常用的视图.<br />
2.1分组视图<br />
[例1]简单的分组视图<br />
SQL&gt; create or replace view dept_tot as <br />
&nbsp; 2&nbsp; select a.dname dept,sum(b.sal) total_sal from scott.dept a,scott.emp b <br />
&nbsp; 3&nbsp; where a.deptno=b.deptno group by a.dname;</p>
<p>查看已建立。<br />
SQL&gt; select * from dept_tot;</p>
<p>DEPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TOTAL_SAL<br />
--------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---------<br />
ACCOUNTING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8750<br />
RESEARCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10875<br />
SALES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9400</p>
<p>[例2]带复杂函数视图<br />
SQL&gt; create or replace view itemtot as<br />
&nbsp; 2&nbsp; select persion,sum(amount) itemtot from ledger<br />
&nbsp; 3&nbsp; where actiondate between <br />
&nbsp; 4&nbsp; to_date('01-MAR-1901','dd-mon-yyyy') and<br />
&nbsp; 5&nbsp; to_date('31-MAR-1901','dd-mon-yyyy')<br />
&nbsp; 6&nbsp; and action in('bought','raid') group by persion;</p>
<p>2.2合计视图<br />
[例]合计函数视图实例<br />
SQL&gt; create or replace view emp_no1&nbsp; as <br />
&nbsp; 2&nbsp; select deptno,sum(sal) 工资和,sum(comm) 总和<br />
&nbsp; 3&nbsp; from scott.emp group by deptno;<br />
SQL&gt; select * from emp_no1;<br />
DEPTNO&nbsp;&nbsp;&nbsp; 工资和&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 总和<br />
--------- --------- ---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8750<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp; 10875<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9400&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2200</p>
<p>2.3组合视图<br />
[例]带组合函数的视图<br />
SQL&gt; create or replace view byitem as<br />
&nbsp; 2&nbsp; select l.persion persion.item, amount, 100*amount/item bypersion,100*amount/total bytotal<br />
&nbsp; 3&nbsp; from ledgent l,itemtotal i,total where l.persion=i.persion where l.persion=i.persion<br />
&nbsp; 4&nbsp; and actiondate between<br />
&nbsp; 5&nbsp; to_date('01-MAR-1901','dd-mon-yyyy') and<br />
&nbsp; 6&nbsp; to_date('31-MAR-1901','dd-mon-yyyy')<br />
&nbsp; 7&nbsp;&nbsp; and action in('bought','raid') ;</p>
<p>3.家族树<br />
语法:<br />
select column from table_name start with column=value<br />
connect by prior 父主键=子主键</p>
<p>3.1排除单一性和分枝<br />
以ORACLE中的EMP表为例<br />
[例]从顶到底列出各雇员的信息<br />
SQL&gt; select lpad(' ',4*(level-1))||ename name,empno,mgr from emp start with mgr is null<br />
&nbsp; 2&nbsp; connect by prior empno=mgr;</p>
<p>NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EMPNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MGR<br />
---------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---------<br />
KING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; JONES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7566&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SCOTT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7788&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7566<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ADAMS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7876&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7788</p>
<p>3.2遍历至根<br />
[例1]现在要从某个雇员开始向他的上级列出该雇员的层次结构<br />
SQL&gt; col ename for a30;<br />
SQL&gt; select lpad(' ',4*(level-1))||ename ename,mgr,empno from scott.emp <br />
&nbsp; 2&nbsp; start with mgr=7788 connect by prior mgr=empno;<br />
ENAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MGR&nbsp;&nbsp;&nbsp;&nbsp; EMPNO<br />
------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---------&nbsp;&nbsp;&nbsp; ---------<br />
ADAMS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7788&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7876<br />
&nbsp;&nbsp;&nbsp; SCOTT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7566&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7788<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JONES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7566<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839</p>
<p>[例2]列出所有雇员的层次结构<br />
SQL&gt; select lpad(' ',4*(level-1))||ename ename,empno,mgr from scott.emp<br />
&nbsp; 2&nbsp; start with mgr is not null<br />
&nbsp; 3&nbsp; connect by empno=prior mgr;</p>
<p>ENAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EMPNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MGR<br />
------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---------<br />
SMITH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7369&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7902<br />
&nbsp;&nbsp;&nbsp; FORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7902&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7566<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JONES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7566&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
ALLEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7499&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7698<br />
&nbsp;&nbsp;&nbsp; BLAKE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7698&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
WARD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7521&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7698<br />
&nbsp;&nbsp;&nbsp; BLAKE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7698&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
JONES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7566&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
&nbsp;&nbsp;&nbsp; KING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
MARTIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7654&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7698<br />
&nbsp;&nbsp;&nbsp; BLAKE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7698&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
BLAKE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7698&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
&nbsp;&nbsp;&nbsp; KING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
CLARK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7782&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
&nbsp;&nbsp;&nbsp; KING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839<br />
SCOTT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7788&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7566<br />
&nbsp;&nbsp;&nbsp; JONES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7566&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7839</p>
<img src ="http://www.blogjava.net/jelver/aggbug/172295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-01-02 19:38 <a href="http://www.blogjava.net/jelver/articles/172295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单表级联查询优化</title><link>http://www.blogjava.net/jelver/articles/169998.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Mon, 24 Dec 2007 03:35:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/169998.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/169998.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/169998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/169998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/169998.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">优化前的糟糕语句<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;t.userid&nbsp;,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;snsjob.mxt_temp_lxw_voice_info&nbsp;m&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;&nbsp;m.statename</span><span style="color: #808080">=</span><span style="color: #ff0000">'</span><span style="color: #ff0000">广东</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;m.userid</span><span style="color: #808080">=</span><span style="color: #000000">t.userid&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;totals,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;snsjob.mxt_temp_lxw_voice_info&nbsp;m&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;&nbsp;m.statename</span><span style="color: #808080">=</span><span style="color: #ff0000">'</span><span style="color: #ff0000">广东</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m.userid</span><span style="color: #808080">=</span><span style="color: #000000">t.userid&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;m.isvalid&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;)&nbsp;uncheck,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;snsjob.mxt_temp_lxw_voice_info&nbsp;n&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;&nbsp;m.statename</span><span style="color: #808080">=</span><span style="color: #ff0000">'</span><span style="color: #ff0000">广东</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;n.userid</span><span style="color: #808080">=</span><span style="color: #000000">t.userid&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;&nbsp;n.isvalid&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;&nbsp;)&nbsp;checkedpass&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;snsjob.mxt_temp_lxw_voice_info&nbsp;t&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">group</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;t.userid&nbsp;</span><span style="color: #0000ff">order</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;checkedpass&nbsp;</span><span style="color: #0000ff">desc</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />优化后如下<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;t.userid,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff00ff">count</span><span style="color: #000000">(</span><span style="color: #808080">*</span><span style="color: #000000">),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff00ff">sum</span><span style="color: #000000">(</span><span style="color: #ff00ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;&nbsp;isvalid&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">end</span><span style="color: #000000">&nbsp;),<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff00ff">sum</span><span style="color: #000000">(</span><span style="color: #ff00ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;&nbsp;isvalid&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">end</span><span style="color: #000000">&nbsp;)&nbsp;checkedpass<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;snsjob.mxt_temp_lxw_voice_info&nbsp;t&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;statename</span><span style="color: #808080">=</span><span style="color: #ff0000">'</span><span style="color: #ff0000">广东</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">group</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;t.useridby&nbsp;checkedpass&nbsp;</span><span style="color: #0000ff">desc</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">order</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />速度快20倍以上，数据越多越明显</span></div>
<img src ="http://www.blogjava.net/jelver/aggbug/169998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2007-12-24 11:35 <a href="http://www.blogjava.net/jelver/articles/169998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>教你自动恢复MySQL数据库的日志文件</title><link>http://www.blogjava.net/jelver/articles/166231.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Sat, 08 Dec 2007 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/166231.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/166231.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/166231.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/166231.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/166231.html</trackback:ping><description><![CDATA[<span class="tpc_content"><br />
如果MySQL服务器启用了二进制日志，你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如，从你最后一次备份)直到现在或另一个指定的时间点的数据。&#8220;mysqlbinlog：用于处理二进制日志文件的实用工具&#8221;。 <br />
<br />
要想从二进制日志恢复数据，你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini，取决于你的系统)中找到路径。如果未包含在选项文件中，当服务器启动时，可以在命令行中以选项的形式给出。启用二进制日志的选项为--log-bin。要想确定当前的二进制日志文件的文件名，输入下面的MySQL语句： <br />
<br />
<br />
SHOW BINLOG EVENTS \G<br />
<br />
<br />
你还可以从命令行输入下面的内容： <br />
<br />
<br />
mysql --user=root -pmy_pwd -e 'SHOW BINLOG EVENTS \G'<br />
<br />
<br />
将密码my_pwd替换为服务器的root密码。 <br />
<br />
1. 指定恢复时间 <br />
<br />
对于MySQL 4.1.4，可以在mysqlbinlog语句中通过--start-date和--stop-date选项指定DATETIME格式的起止时间。举例说明，假设在今天上午10:00(今天是2006年4月20日)，执行SQL语句来删除一个大表。要想恢复表和数据，你可以恢复前晚上的备份，并输入： <br />
<br />
<br />
mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 \ <br />
&nbsp; | mysql -u root -pmypwd<br />
<br />
<br />
该命令将恢复截止到在--stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句，可能你想要恢复后面发生的活动。根据这些，你可以用起使日期和时间再次运行mysqlbinlog： <br />
<br />
<br />
mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 \ <br />
&nbsp; | mysql -u root -pmypwd \<br />
<br />
<br />
在该行中，从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。 <br />
<br />
2. 指定恢复位置 <br />
<br />
也可以不指定日期和时间，而使用mysqlbinlog的选项--start-position和--stop-position来指定日志位置。它们的作用与起止日选项相同，不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法，特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号，可以运行mysqlbinlog寻找执行了不期望的事务的时间范围，但应将结果重新指向文本文件以便进行检查。操作方法为： <br />
<br />
<br />
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" \ <br />
&nbsp; /var/log/mysql/bin.123456 &gt; /tmp/mysql_restore.sql<br />
<br />
<br />
该命令将在/tmp目录创建小的文本文件，将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件，寻找你不要想重复的语句。如果二进制日志中的位置号用于停止和继续恢复操作，应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了以前的备份文件后，你应从命令行输入下面内容： <br />
<br />
<br />
mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 \ <br />
| mysql -u root -pmypwd <br />
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 \ <br />
| mysql -u root -pmypwd \<br />
<br />
<br />
上面的第1行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。因为mysqlbinlog的输出包括每个SQL语句记录之前的SET TIMESTAMP语句，恢复的数据和相关MySQL日志将反应事务执行的原时间。<br />
</span><br />
<p><br />
1、mysql 数据库没有增量备份的机制，当数据量太大的时候备份是一个很大的问题。还好 mysql 数据库提供了一种主从备份的机制，其实就是把主数据库的所有的数据同时写到备份数据库中。实现 mysql 数据库的热备份。</p>
<p>　　2、要想实现双机的热备首先要了解主从数据库服务器的版本的需求。要实现热备 mysql 的版本都要高于3.2，还有一个基本的原则就是作为从数据库的数据库版本可以高于主服务器数据库的版本，但是不可以低于主服务器的数据库版本。</p>
<p>　　3、设置主数据库服务器：</p>
<p>　　a. 首先查看主服务器的版本是否是支持热备的版本。然后查看 my.cnf(类 unix)或者 my.ini(windows)中 mysqld 配置块的配置有没有 log-bin (记录数据库更改日志)，因为 mysql 的复制机制是基于日志的复制机制，所以主服务器一定要支持更改日志才行。然后设置要写入日志的数据库或者不要写入日志的数据库。这样只有您感兴趣的数据库的更改才写入到数据库的日志中。</p>
<p>　　server-id=1 //数据库的 id 这个应该默认是1就不用改动</p>
<p>　　log-bin=log_name //日志文件的名称，这里可以制定日志到别的目录 如果没有设置则默认主机名的一个日志名称</p>
<p>　　binlog-do-db=db_name //记录日志的数据库</p>
<p>　　binlog-ignore-db=db_name //不记录日志的数据库</p>
<p>　　以上的如果有多个数据库用","分割开，然后设置同步数据库的用户帐号</p>
<p>　　mysql&gt; GRANT REPLICATION SLAVE ON *.*</p>
<p>　　-&gt; TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';</p>
<p>　　4.0.2 以前的版本, 因为不支持 REPLICATION 要使用下面的语句来实现这个功能</p>
<p>　　mysql&gt; GRANT FILE ON *.*</p>
<p>　　-&gt; TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';</p>
<p>　　设置好主服务器的配置文件后重新启动数据库</p>
<p>　　b.锁定现有的数据库并备份现在的数据</p>
<p>　　锁定数据库</p>
<p>　　mysql&gt; FLUSH TABLES WITH READ LOCK;</p>
<p>　　备份数据库有两种办法一种是直接进入到 mysql 的 data 目录然后打包你需要备份数据库的文件夹，第二种是使用 mysqldump 的方式来备份数据库但是要加上"--master-data " 这个参数，建议使用第一种方法来备份数据库</p>
<p>　　c.查看主服务器的状态</p>
<p>　　mysql&gt; show master statusG;<br />
　　+---------------+----------+--------------+------------------+<br />
　　| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |<br />
　　+---------------+----------+--------------+------------------+<br />
　　| mysql-bin.003 | 73 | test | manual,mysql |<br />
　　+---------------+----------+--------------+------------------+<br />
　　记录 File 和 Position 项目的值，以后要用的。<br />
本贴来自ZDNetChina中文社区 http://bbs.zdnet.com.cn ,本贴地址：http://bbs.zdnet.com.cn/viewthread.php?tid=55070</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
&nbsp;
<img src ="http://www.blogjava.net/jelver/aggbug/166231.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2007-12-08 11:15 <a href="http://www.blogjava.net/jelver/articles/166231.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>随机抽取前N条记录的问题(zhuant)</title><link>http://www.blogjava.net/jelver/articles/165300.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Tue, 04 Dec 2007 13:30:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/165300.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/165300.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/165300.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/165300.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/165300.html</trackback:ping><description><![CDATA[<p><font size="2">[A]8i以上版本 <br />
select * from (select * from tablename order by sys_guid()) where rownum &lt; N; <br />
select * from (select * from tablename order by dbms_random.value) where rownum&lt; N; <br />
注：dbms_random包需要手工安装，位于$ORACLE_HOME/rdbms/admin/dbmsrand.sql <br />
dbms_random.value(100,200)可以产生100到200范围的随机数 <br />
</font></p>
<p><font size="2"><font color="#ff0000">[Q]抽取从N行到M行的记录，如从20行到30行的记录</font> <br />
[A]select * from (select rownum id,t.* from table where &#8230;&#8230;&nbsp;&nbsp;<br />
and rownum &lt;= 30) where id &gt; 20; <br />
</font></p>
<br />
<p><font size="2"><font color="#ff0000">[Q]怎么样实现分组取前N条记录</font> <br />
[A]8i以上版本，利用分析函数 <br />
如获取每个部门薪水前三名的员工或每个班成绩前三名的学生。 <br />
Select * from&nbsp;&nbsp;<br />
(select depno,ename,sal,row_number() over (partition by depno <br />
&nbsp; &nbsp;&nbsp;&nbsp;order by sal desc) rn&nbsp;&nbsp;<br />
from emp) <br />
&nbsp; &nbsp; where rn&lt;=3 <br />
</font></p>
<p><font size="2"><font color="#ff0000">[Q]如何取得一列中第N大的值？</font> <br />
[A]select * from&nbsp;&nbsp;<br />
(select t.*,dense_rank() over (order by t2 desc) rank from t)&nbsp;&nbsp;<br />
where rank = [$N] <br />
<br />
<br />
实例：<br />
<br />
<br />
</font></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">建立測試環境<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;表(學生名稱&nbsp;</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">),學生性別&nbsp;</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">),年齡&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">,所屬班級&nbsp;</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">),分數&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">)<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;表&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">張三</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">男</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">18</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">三年一班</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">85</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">union</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">all</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">張四</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">男</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">18</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">三年一班</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">90</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">union</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">all</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">張五</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">男</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">18</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">三年一班</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">84</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">union</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">all</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">張六</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">男</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">18</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">三年一班</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">75</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">union</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">all</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">李三</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">男</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">18</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">三年二班</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">96</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">union</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">all</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">李四</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">男</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">18</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">三年二班</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">82</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">union</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">all</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">李五</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">男</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">18</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">三年二班</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">86</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">union</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">all</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">李六</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">男</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">18</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">三年二班</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">74</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">union</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">all</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">王一</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">男</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">18</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">四年一班</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">85</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">union</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">all</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">王二</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">男</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">18</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">四年一班</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">86</span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">union</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">all</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">王三</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">男</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">18</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">四年一班</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">84</span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">union</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">all</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">王四</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">男</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">18</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">四年一班</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">75</span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">go</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></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;表<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />第一中方法<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></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;表&nbsp;a<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;分數&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">(<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">top</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">&nbsp;分數&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;表&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;所屬班級</span><span style="color: #808080">=</span><span style="color: #000000">a.所屬班級<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">order</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;分數&nbsp;</span><span style="color: #0000ff">desc</span><span style="color: #000000">)<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">第二中方法<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></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;表&nbsp;a<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;學生名稱&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">(<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">top</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">&nbsp;學生名稱&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;表&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;所屬班級</span><span style="color: #808080">=</span><span style="color: #000000">a.所屬班級<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">order</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;分數&nbsp;</span><span style="color: #0000ff">desc</span><span style="color: #000000">)<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">order</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;所屬班級,分數&nbsp;</span><span style="color: #0000ff">desc</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />第三中方法<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">select</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;a.</span><span style="color: #808080">*</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">from</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;表&nbsp;a<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">where</span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;a.學生名稱&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">top</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">&nbsp;學生名稱&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;表&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;所屬班級</span><span style="color: #808080">=</span><span style="color: #000000">a.所屬班級&nbsp;</span><span style="color: #0000ff">order</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;分數&nbsp;</span><span style="color: #0000ff">desc</span><span style="color: #000000">)<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">order</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;a.所屬班級,a.分數&nbsp;</span><span style="color: #0000ff">desc</span><span style="color: #000000">&nbsp;</span></div>
实例2：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;成绩<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />(<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />id&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">identity</span><span style="color: #000000">,<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />班级&nbsp;</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">20</span><span style="color: #000000">),<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />姓名&nbsp;</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">20</span><span style="color: #000000">),<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />分数&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />)<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;成绩(班级,姓名,分数)</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">aa</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">89</span><span style="color: #000000">)<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;成绩(班级,姓名,分数)</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">bb</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">45</span><span style="color: #000000">)<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;成绩(班级,姓名,分数)</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">cc</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">65</span><span style="color: #000000">)<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;成绩(班级,姓名,分数)</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">dd</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">67</span><span style="color: #000000">)<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;成绩(班级,姓名,分数)</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">ff</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">23</span><span style="color: #000000">)<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;成绩(班级,姓名,分数)</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">aeea</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">76</span><span style="color: #000000">)<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;成绩(班级,姓名,分数)</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">sfdsad</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">26</span><span style="color: #000000">)<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;成绩(班级,姓名,分数)</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">afdsf</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">34</span><span style="color: #000000">)<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;成绩(班级,姓名,分数)</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">dsf</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">75</span><span style="color: #000000">)<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;成绩(班级,姓名,分数)</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">fdfdg</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">23</span><span style="color: #000000">)<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;成绩(班级,姓名,分数)</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">dfg</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">74</span><span style="color: #000000">)<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;成绩(班级,姓名,分数)</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">sdf</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">23</span><span style="color: #000000">)<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;成绩(班级,姓名,分数)</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">sdf</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">56</span><span style="color: #000000">)<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;成绩(班级,姓名,分数)</span><span style="color: #0000ff">values</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">jhj</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">74</span><span style="color: #000000">)<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></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;成绩&nbsp;a&nbsp;</span><span style="color: #0000ff">where</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;成绩&nbsp;b&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;a.班级&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;b.班级&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;a.分数</span><span style="color: #808080">&lt;=</span><span style="color: #000000">&nbsp;b.分数)</span><span style="color: #808080">&lt;=</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">order</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;班级,分数&nbsp;</span><span style="color: #0000ff">desc</span></div>
<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_1_151_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1_151_Open_Text.style.display='none'; Codehighlighter1_1_151_Closed_Image.style.display='inline'; Codehighlighter1_1_151_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1_151_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1_151_Closed_Text.style.display='none'; Codehighlighter1_1_151_Open_Image.style.display='inline'; Codehighlighter1_1_151_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="font-weight: bold; color: #800000">1</span><span id="Codehighlighter1_1_151_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_1_151_Open_Text"><span style="color: #008080">/*</span><span style="color: #008080">实例四：语句中的30,31,40,58表示不同类型的数据，如：新闻，音乐，小说等类型，查询语句的具体条件就是：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />从4个不同模块中各取最新的前10条记录（不够10条则取全部数据）总共不超过40条记录来随机取4条，注意其中有可能4条都是同个类型，如果要限制每样都要有一条，则可以对限制条件做处理即可</span><span style="color: #008080">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />3</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;id,module_id,title,msg,obj1,obj2,obj3,obj5,add_date&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">4</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;mxt_msginfo&nbsp;a&nbsp;&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">5</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;mxt_msginfo&nbsp;b&nbsp;&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;&nbsp;a.module_id&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;b.module_id&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;a.add_date</span><span style="color: #808080">&lt;=</span><span style="color: #000000">&nbsp;b.add_date&nbsp;)</span><span style="color: #808080">&lt;=</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;a.module_id&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;(</span><span style="font-weight: bold; color: #800000">30</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">31</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">40</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">58</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">6</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">order</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;dbms_random.value&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">7</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;rownum</span><span style="color: #808080">&lt;</span><span style="font-weight: bold; color: #800000">5</span><span style="color: #000000">&nbsp;&nbsp;</span></div>
<br />
<img src ="http://www.blogjava.net/jelver/aggbug/165300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2007-12-04 21:30 <a href="http://www.blogjava.net/jelver/articles/165300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中随机抽取N条记录</title><link>http://www.blogjava.net/jelver/articles/165239.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Tue, 04 Dec 2007 09:22:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/165239.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/165239.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/165239.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/165239.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/165239.html</trackback:ping><description><![CDATA[<p>工作中经常用到随机数，比如随机抽取奖券，随机抽取某地区的客户样本等。在Oracle中可以非常方便地实现这个功能。</p>
<p>方法1：使用SAMPLE()。</p>
<p>使用sample的语法是：</p>
<pre>SAMPLE [ BLOCK ]
(sample_percent)
[ SEED (seed_value) ]</pre>
<p>BLOCK: 表示使用随机块例举而不是随机行例举。</p>
<p>sample_percent是随机获取一张表中记录的百分比。比如值为10，那就是表中的随机的百分之10的记录。值必须大于等于.000001，小于100。</p>
<p>seed表示从哪条记录返回，类似于预先设定例举结果，因而每次返回的结果都是固定的。该值必须介于0和4294967295之间。</p>
<p>接下来举例说明：</p>
<div class="codeblock"><code>SQL&gt; create table zeeno as select * from dba_objects;
<p>&nbsp;</p>
<p>Table created.</p>
<p>SQL&gt; select object_name from zeeno sample(10) where rownum=1;</p>
<p>OBJECT_NAME<br />
-------------------------------------------------------------</p>
<p>UET$</p>
<p>SQL&gt; /</p>
<p>OBJECT_NAME<br />
-------------------------------------------------------------</p>
<p>ICOL$</code></p>
</div>
<p>上面的示例表示从表zeeno中随机抽取10%的记录，并从中选择一条记录。</p>
<p>如果使用seed，则返回固定的集。</p>
<div class="codeblock"><code>1* select object_name from zeeno sample(10) seed(10) where rownum=1<br />
SQL&gt; /
<p>&nbsp;</p>
<p>OBJECT_NAME<br />
---------------------------------------------------------------------</p>
<p>PROXY_ROLE_DATA$</p>
<p>SQL&gt; /</p>
<p>OBJECT_NAME<br />
---------------------------------------------------------------------</p>
<p>PROXY_ROLE_DATA$</code></p>
</div>
<p>只所以建临时表是因为如下原因：</p>
<div class="codeblock"><code>SQL&gt; select object_name from dba_objects sample(10)where rownum=1;<br />
select object_name from dba_objects sample(10)where rownum=1<br />
*<br />
ERROR at line 1:<br />
ORA-01446: cannot select ROWID from, or sample, a view with DISTINCT, GROUP BY,<br />
etc.</code></div>
<p>方法2：使用DBMS_RANDOM包。</p>
<p>DBMS_RANDOM有两种主要的使用方法，分别是DBMS_RANDOM.VALUE()和DBMS_RANDOM.RANDOM。</p>
<div class="codeblock"><code>SQL&gt; select dbms_random.value() from dual;
<p>&nbsp;</p>
<p>DBMS_RANDOM.VALUE()<br />
-------------------<br />
.638206012</p>
<p>SQL&gt; /</p>
<p>DBMS_RANDOM.VALUE()<br />
-------------------<br />
.312828706</p>
<p>SQL&gt; select dbms_random.value(1,10) from dual</p>
<p>DBMS_RANDOM.VALUE(1,10)<br />
-----------------------<br />
2.49371361</p>
<p>SQL&gt; /</p>
<p>DBMS_RANDOM.VALUE(1,10)<br />
-----------------------<br />
1.6890498</code></p>
</div>
<p>有了随机数，抽取随机记录就是一件非常轻松的事情了：</p>
<div class="codeblock"><code>SQL&gt; select * from (select object_name from zeeno<br />
2 order by dbms_random.random)<br />
3 where rownum=1;
<p>&nbsp;</p>
<p>OBJECT_NAME<br />
-------------------------------------------------</p>
<p>DBMS_JAVA_TEST</p>
<p>SQL&gt; /</p>
<p>OBJECT_NAME<br />
-------------------------------------------------</p>
<p>USER_SNAPSHOT_REFRESH_TIMES</p>
<p>SQL&gt; select * from (select object_name from zeeno<br />
1 order by ceil(dbms_random.value(1,3))<br />
2 )<br />
3* where rownum=1</p>
<p>OBJECT_NAME<br />
----------------------------------------------------------</p>
<p>UNDO$</p>
<p>SQL&gt; /</p>
<p>OBJECT_NAME<br />
----------------------------------------------------------</p>
<p>I_USER1</code></p>
</div>
<p>通常情况下我更喜欢使用SAMPLE，因为更加方便。</p>
<img src ="http://www.blogjava.net/jelver/aggbug/165239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2007-12-04 17:22 <a href="http://www.blogjava.net/jelver/articles/165239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>总结一下关于行列转置的实现方法（CSDN）</title><link>http://www.blogjava.net/jelver/articles/164930.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Mon, 03 Dec 2007 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/164930.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/164930.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/164930.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/164930.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/164930.html</trackback:ping><description><![CDATA[<span style="color: #000000"><br />
<br />
</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">、固定列数的行列转换<br />
如<br />
student subject grade<br />
</span><span style="color: #008080">--</span><span style="color: #008080">------- ---------- --------</span><span style="color: #008080"><br />
</span><span style="color: #000000">student1 语文 </span><span style="font-weight: bold; color: #800000">80</span><span style="color: #000000"><br />
student1 数学 </span><span style="font-weight: bold; color: #800000">70</span><span style="color: #000000"><br />
student1 英语 </span><span style="font-weight: bold; color: #800000">60</span><span style="color: #000000"><br />
student2 语文 </span><span style="font-weight: bold; color: #800000">90</span><span style="color: #000000"><br />
student2 数学 </span><span style="font-weight: bold; color: #800000">80</span><span style="color: #000000"><br />
student2 英语 </span><span style="font-weight: bold; color: #800000">100</span><span style="color: #000000"><br />
&#8230;&#8230;<br />
转换为<br />
语文 数学 英语<br />
student1 </span><span style="font-weight: bold; color: #800000">80</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">70</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">60</span><span style="color: #000000"><br />
student2 </span><span style="font-weight: bold; color: #800000">90</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">80</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">100</span><span style="color: #000000"><br />
&#8230;&#8230;<br />
语句如下：</span><span style="color: #0000ff">select</span><span style="color: #000000"> student, <br />
</span><span style="color: #ff00ff">sum</span><span style="color: #000000">(decode(subject,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">语文</span><span style="color: #ff0000">'</span><span style="color: #000000">, grade,</span><span style="color: #0000ff">null</span><span style="color: #000000">)) "语文",<br />
</span><span style="color: #ff00ff">sum</span><span style="color: #000000">(decode(subject,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">数学</span><span style="color: #ff0000">'</span><span style="color: #000000">, grade,</span><span style="color: #0000ff">null</span><span style="color: #000000">)) "数学",<br />
</span><span style="color: #ff00ff">sum</span><span style="color: #000000">(decode(subject,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">英语</span><span style="color: #ff0000">'</span><span style="color: #000000">, grade,</span><span style="color: #0000ff">null</span><span style="color: #000000">)) "英语"<br />
</span><span style="color: #0000ff">from</span><span style="color: #000000"> </span><span style="color: #0000ff">table</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">group</span><span style="color: #000000"> </span><span style="color: #0000ff">by</span><span style="color: #000000"> student;<br />
　<br />
<br />
</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000">、不定列行列转换<br />
如<br />
c1 c2<br />
</span><span style="color: #008080">--</span><span style="color: #008080">- -----------</span><span style="color: #008080"><br />
</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000"> 我<br />
</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000"> 是<br />
</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000"> 谁<br />
</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000"> 知<br />
</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000"> 道<br />
</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000"> 不<br />
&#8230;&#8230;<br />
转换为<br />
</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000"> 我是谁<br />
</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000"> 知道<br />
</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000"> 不<br />
<br />
这一类型的转换可以借助于PL</span><span style="color: #808080">/</span><span style="color: #000000">SQL来完成，这里给一个例子<br />
</span><span style="color: #0000ff">CREATE</span><span style="color: #000000"> </span><span style="color: #808080">OR</span><span style="color: #000000"> </span><span style="color: #ff00ff">REPLACE</span><span style="color: #000000"> </span><span style="color: #0000ff">FUNCTION</span><span style="color: #000000"> get_c2(tmp_c1 </span><span style="color: #0000ff">NUMBER</span><span style="color: #000000">)<br />
</span><span style="color: #0000ff">RETURN</span><span style="color: #000000"> </span><span style="color: #0000ff">VARCHAR2</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">IS</span><span style="color: #000000"><br />
Col_c2 </span><span style="color: #0000ff">VARCHAR2</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">4000</span><span style="color: #000000">);<br />
</span><span style="color: #0000ff">BEGIN</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">FOR</span><span style="color: #000000"> cur </span><span style="color: #808080">IN</span><span style="color: #000000"> (</span><span style="color: #0000ff">SELECT</span><span style="color: #000000"> c2 </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> t </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> c1</span><span style="color: #808080">=</span><span style="color: #000000">tmp_c1) LOOP<br />
Col_c2 :</span><span style="color: #808080">=</span><span style="color: #000000"> Col_c2</span><span style="color: #808080">||</span><span style="color: #000000">cur.c2;<br />
</span><span style="color: #0000ff">END</span><span style="color: #000000"> LOOP;<br />
Col_c2 :</span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="color: #ff00ff">rtrim</span><span style="color: #000000">(Col_c2,</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">);<br />
</span><span style="color: #0000ff">RETURN</span><span style="color: #000000"> Col_c2;<br />
</span><span style="color: #0000ff">END</span><span style="color: #000000">;<br />
<br />
</span><span style="color: #0000ff">select</span><span style="color: #000000"> </span><span style="color: #0000ff">distinct</span><span style="color: #000000"> c1 ,get_c2(c1) cc2 </span><span style="color: #0000ff">from</span><span style="color: #000000"> </span><span style="color: #0000ff">table</span><span style="color: #000000">;<br />
<br />
<br />
或者不用pl</span><span style="color: #808080">/</span><span style="color: #000000">sql，利用分析函数和 CONNECT_BY 实现：<br />
<br />
</span><span style="color: #0000ff">SELECT</span><span style="color: #000000"> c1, SUBSTR (</span><span style="color: #ff00ff">MAX</span><span style="color: #000000"> (SYS_CONNECT_BY_PATH (c2, </span><span style="color: #ff0000">'</span><span style="color: #ff0000">;</span><span style="color: #ff0000">'</span><span style="color: #000000">)), </span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000">) NAME<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> (</span><span style="color: #0000ff">SELECT</span><span style="color: #000000"> c1, c2, rn, LEAD (rn) </span><span style="color: #0000ff">OVER</span><span style="color: #000000"> (PARTITION </span><span style="color: #0000ff">BY</span><span style="color: #000000"> c1 </span><span style="color: #0000ff">ORDER</span><span style="color: #000000"> </span><span style="color: #0000ff">BY</span><span style="color: #000000"> rn) rn1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> (</span><span style="color: #0000ff">SELECT</span><span style="color: #000000"> c1, c2, ROW_NUMBER () </span><span style="color: #0000ff">OVER</span><span style="color: #000000"> (</span><span style="color: #0000ff">ORDER</span><span style="color: #000000"> </span><span style="color: #0000ff">BY</span><span style="color: #000000"> c2) rn<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> t))<br />
START </span><span style="color: #0000ff">WITH</span><span style="color: #000000"> rn1 </span><span style="color: #0000ff">IS</span><span style="color: #000000"> </span><span style="color: #0000ff">NULL</span><span style="color: #000000"><br />
CONNECT </span><span style="color: #0000ff">BY</span><span style="color: #000000"> rn1 </span><span style="color: #808080">=</span><span style="color: #000000"> PRIOR rn<br />
</span><span style="color: #0000ff">GROUP</span><span style="color: #000000"> </span><span style="color: #0000ff">BY</span><span style="color: #000000"> c1;<br />
<br />
<br />
</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">、列数不固定（交叉表行列转置）<br />
这种是比较麻烦的一种，需要借助pl</span><span style="color: #808080">/</span><span style="color: #000000">sql：<br />
<br />
原始数据：<br />
CLASS1&nbsp;&nbsp;&nbsp;&nbsp; CALLDATE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALLCOUNT<br />
</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">2005</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">40</span><span style="color: #000000"><br />
</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">2005</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">07</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">6</span><span style="color: #000000"><br />
</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">2005</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">77</span><span style="color: #000000"><br />
</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">2005</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">09</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">33</span><span style="color: #000000"><br />
</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">2005</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">9</span><span style="color: #000000"><br />
</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">2005</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">07</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">21</span><span style="color: #000000"><br />
<br />
转置后：<br />
CALLDATE&nbsp;&nbsp;&nbsp;&nbsp; CallCount1 CallCount2 CallCount3<br />
</span><span style="color: #008080">--</span><span style="color: #008080">---------- ---------- ---------- ----------</span><span style="color: #008080"><br />
</span><span style="font-weight: bold; color: #800000">2005</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">09</span><span style="color: #000000">&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">33</span><span style="color: #000000"><br />
</span><span style="font-weight: bold; color: #800000">2005</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #000000">&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">40</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">77</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">9</span><span style="color: #000000"><br />
</span><span style="font-weight: bold; color: #800000">2005</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">07</span><span style="color: #000000"> 　</span><span style="font-weight: bold; color: #800000">6</span><span style="color: #000000"> 　　　　　</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">21</span><span style="color: #000000"><br />
<br />
试验如下：<br />
</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">）. 建立测试表和数据<br />
</span><span style="color: #0000ff">CREATE</span><span style="color: #000000"> </span><span style="color: #0000ff">TABLE</span><span style="color: #000000"> t(<br />
&nbsp;&nbsp;&nbsp; class1 </span><span style="color: #0000ff">VARCHAR2</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000"> BYTE),<br />
&nbsp;&nbsp;&nbsp; calldate DATE,<br />
&nbsp;&nbsp;&nbsp; callcount </span><span style="color: #0000ff">INTEGER</span><span style="color: #000000"><br />
);<br />
<br />
</span><span style="color: #0000ff">INSERT</span><span style="color: #000000"> </span><span style="color: #0000ff">INTO</span><span style="color: #000000"> t(class1, calldate, callcount)<br />
</span><span style="color: #0000ff">VALUES</span><span style="color: #000000"> (</span><span style="color: #ff0000">'</span><span style="color: #ff0000">1</span><span style="color: #ff0000">'</span><span style="color: #000000">, TO_DATE (</span><span style="color: #ff0000">'</span><span style="color: #ff0000">08/08/2005</span><span style="color: #ff0000">'</span><span style="color: #000000">, </span><span style="color: #ff0000">'</span><span style="color: #ff0000">MM/DD/YYYY</span><span style="color: #ff0000">'</span><span style="color: #000000">), </span><span style="font-weight: bold; color: #800000">40</span><span style="color: #000000">);<br />
<br />
</span><span style="color: #0000ff">INSERT</span><span style="color: #000000"> </span><span style="color: #0000ff">INTO</span><span style="color: #000000"> t(class1, calldate, callcount)<br />
</span><span style="color: #0000ff">VALUES</span><span style="color: #000000"> (</span><span style="color: #ff0000">'</span><span style="color: #ff0000">1</span><span style="color: #ff0000">'</span><span style="color: #000000">, TO_DATE (</span><span style="color: #ff0000">'</span><span style="color: #ff0000">08/07/2005</span><span style="color: #ff0000">'</span><span style="color: #000000">, </span><span style="color: #ff0000">'</span><span style="color: #ff0000">MM/DD/YYYY</span><span style="color: #ff0000">'</span><span style="color: #000000">), </span><span style="font-weight: bold; color: #800000">6</span><span style="color: #000000">);<br />
<br />
</span><span style="color: #0000ff">INSERT</span><span style="color: #000000"> </span><span style="color: #0000ff">INTO</span><span style="color: #000000"> t(class1, calldate, callcount)<br />
</span><span style="color: #0000ff">VALUES</span><span style="color: #000000"> (</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2</span><span style="color: #ff0000">'</span><span style="color: #000000">, TO_DATE (</span><span style="color: #ff0000">'</span><span style="color: #ff0000">08/08/2005</span><span style="color: #ff0000">'</span><span style="color: #000000">, </span><span style="color: #ff0000">'</span><span style="color: #ff0000">MM/DD/YYYY</span><span style="color: #ff0000">'</span><span style="color: #000000">), </span><span style="font-weight: bold; color: #800000">77</span><span style="color: #000000">);<br />
<br />
</span><span style="color: #0000ff">INSERT</span><span style="color: #000000"> </span><span style="color: #0000ff">INTO</span><span style="color: #000000"> t(class1, calldate, callcount)<br />
</span><span style="color: #0000ff">VALUES</span><span style="color: #000000"> (</span><span style="color: #ff0000">'</span><span style="color: #ff0000">3</span><span style="color: #ff0000">'</span><span style="color: #000000">, TO_DATE (</span><span style="color: #ff0000">'</span><span style="color: #ff0000">08/09/2005</span><span style="color: #ff0000">'</span><span style="color: #000000">, </span><span style="color: #ff0000">'</span><span style="color: #ff0000">MM/DD/YYYY</span><span style="color: #ff0000">'</span><span style="color: #000000">), </span><span style="font-weight: bold; color: #800000">33</span><span style="color: #000000">);<br />
<br />
</span><span style="color: #0000ff">INSERT</span><span style="color: #000000"> </span><span style="color: #0000ff">INTO</span><span style="color: #000000"> t(class1, calldate, callcount)<br />
</span><span style="color: #0000ff">VALUES</span><span style="color: #000000"> (</span><span style="color: #ff0000">'</span><span style="color: #ff0000">3</span><span style="color: #ff0000">'</span><span style="color: #000000">, TO_DATE (</span><span style="color: #ff0000">'</span><span style="color: #ff0000">08/08/2005</span><span style="color: #ff0000">'</span><span style="color: #000000">, </span><span style="color: #ff0000">'</span><span style="color: #ff0000">MM/DD/YYYY</span><span style="color: #ff0000">'</span><span style="color: #000000">), </span><span style="font-weight: bold; color: #800000">9</span><span style="color: #000000">);<br />
<br />
</span><span style="color: #0000ff">INSERT</span><span style="color: #000000"> </span><span style="color: #0000ff">INTO</span><span style="color: #000000"> t(class1, calldate, callcount)<br />
</span><span style="color: #0000ff">VALUES</span><span style="color: #000000"> (</span><span style="color: #ff0000">'</span><span style="color: #ff0000">3</span><span style="color: #ff0000">'</span><span style="color: #000000">, TO_DATE (</span><span style="color: #ff0000">'</span><span style="color: #ff0000">08/07/2005</span><span style="color: #ff0000">'</span><span style="color: #000000">, </span><span style="color: #ff0000">'</span><span style="color: #ff0000">MM/DD/YYYY</span><span style="color: #ff0000">'</span><span style="color: #000000">), </span><span style="font-weight: bold; color: #800000">21</span><span style="color: #000000">); <br />
<br />
</span><span style="color: #0000ff">COMMIT</span><span style="color: #000000"> ; <br />
<br />
</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000">）. 建立ref cursor准备输出结果集 <br />
</span><span style="color: #0000ff">CREATE</span><span style="color: #000000"> </span><span style="color: #808080">OR</span><span style="color: #000000"> </span><span style="color: #ff00ff">REPLACE</span><span style="color: #000000"> PACKAGE pkg_getrecord<br />
</span><span style="color: #0000ff">IS</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp; TYPE myrctype </span><span style="color: #0000ff">IS</span><span style="color: #000000"> REF </span><span style="color: #0000ff">CURSOR</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">END</span><span style="color: #000000"> pkg_getrecord;<br />
</span><span style="color: #808080">/</span><span style="color: #000000"><br />
<br />
</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">）. 建立动态sql交叉表函数，输出结果集 <br />
</span><span style="color: #0000ff">CREATE</span><span style="color: #000000"> </span><span style="color: #808080">OR</span><span style="color: #000000"> </span><span style="color: #ff00ff">REPLACE</span><span style="color: #000000"> </span><span style="color: #0000ff">FUNCTION</span><span style="color: #000000"> fn_rs<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">RETURN</span><span style="color: #000000"> pkg_getrecord.myrctype<br />
</span><span style="color: #0000ff">IS</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp; s </span><span style="color: #0000ff">VARCHAR2</span><span style="color: #000000"> (</span><span style="font-weight: bold; color: #800000">4000</span><span style="color: #000000">); <br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">CURSOR</span><span style="color: #000000"> c1 </span><span style="color: #0000ff">IS</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">SELECT</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000">,sum(case when Class1=</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #808080">||</span><span style="color: #000000"> class1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #808080">||</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000"> then CallCount else 0 end)</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #808080">||</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000"> "CallCount</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #808080">||</span><span style="color: #000000"> class1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #808080">||</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000">"</span><span style="color: #ff0000">'</span><span style="color: #000000"> c2<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> t<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">GROUP</span><span style="color: #000000"> </span><span style="color: #0000ff">BY</span><span style="color: #000000"> class1;<br />
&nbsp;&nbsp;&nbsp; r1 c1</span><span style="color: #808080">%</span><span style="color: #000000">ROWTYPE;<br />
&nbsp;&nbsp;&nbsp; list_cursor pkg_getrecord.myrctype;<br />
</span><span style="color: #0000ff">BEGIN</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp; s :</span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000">select CallDate </span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">OPEN</span><span style="color: #000000"> c1;<br />
&nbsp;&nbsp;&nbsp; LOOP<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">FETCH</span><span style="color: #000000"> c1 </span><span style="color: #0000ff">INTO</span><span style="color: #000000"> r1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">EXIT</span><span style="color: #000000"> </span><span style="color: #0000ff">WHEN</span><span style="color: #000000"> c1</span><span style="color: #808080">%</span><span style="color: #000000">NOTFOUND;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s :</span><span style="color: #808080">=</span><span style="color: #000000"> s </span><span style="color: #808080">||</span><span style="color: #000000"> r1.c2;<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">END</span><span style="color: #000000"> LOOP;<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">CLOSE</span><span style="color: #000000"> c1;<br />
&nbsp;&nbsp;&nbsp; s :</span><span style="color: #808080">=</span><span style="color: #000000"> s </span><span style="color: #808080">||</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000"> from T group by CallDate order by CallDate desc </span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">OPEN</span><span style="color: #000000"> list_cursor </span><span style="color: #0000ff">FOR</span><span style="color: #000000"> s;<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">RETURN</span><span style="color: #000000"> list_cursor;<br />
</span><span style="color: #0000ff">END</span><span style="color: #000000"> fn_rs;<br />
</span><span style="color: #808080">/</span><span style="color: #000000"> <br />
<br />
</span><span style="font-weight: bold; color: #800000">4</span><span style="color: #000000">）. 测试在sql plus下执行：<br />
</span><span style="color: #ff00ff">var</span><span style="color: #000000"> results refcursor;<br />
</span><span style="color: #0000ff">exec</span><span style="color: #000000"> :results :</span><span style="color: #808080">=</span><span style="color: #000000"> fn_rs;<br />
</span><span style="color: #0000ff">print</span><span style="color: #000000"> results;<br />
CALLDATE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CallCount1 CallCount2 CallCount3<br />
</span><span style="color: #008080">--</span><span style="color: #008080">------------- ---------- ---------- ----------</span><span style="color: #008080"><br />
</span><span style="font-weight: bold; color: #800000">2005</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">09</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">33</span><span style="color: #000000"><br />
</span><span style="font-weight: bold; color: #800000">2005</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">40</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">77</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">9</span><span style="color: #000000"><br />
</span><span style="font-weight: bold; color: #800000">2005</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">08</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">07</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">6</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-weight: bold; color: #800000">21</span>
<img src ="http://www.blogjava.net/jelver/aggbug/164930.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2007-12-03 17:06 <a href="http://www.blogjava.net/jelver/articles/164930.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PL/SQL开发中动态SQL的使用方法(zhuan)</title><link>http://www.blogjava.net/jelver/articles/153443.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Wed, 17 Oct 2007 00:57:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/153443.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/153443.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/153443.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/153443.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/153443.html</trackback:ping><description><![CDATA[一般的PL/SQL程序设计中，在DML和事务控制的语句中可以直接使用SQL，但是DDL语句及系统控制语句却不能在PL/SQL中直接使用，要想实现在PL/SQL中使用DDL语句及系统控制语句，可以通过使用动态SQL来实现。<br />
<br />
　　首先我们应该了解什么是动态SQL，在Oracle数据库开发PL/SQL块中我们使用的SQL分为：静态SQL语句和动态SQL语句。所谓静态SQL指在PL/SQL块中使用的SQL语句在编译时是明确的，执行的是确定对象。而动态SQL是指在PL/SQL块编译时SQL语句是不确定的，如根据用户输入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理，只是在程序运行时动态地创建语句、对语句进行语法分析并执行该语句。<br />
<br />
　　Oracle中动态SQL可以通过本地动态SQL来执行，也可以通过DBMS_SQL包来执行。下面就这两种情况分别进行说明：<br />
<br />
　　一、本地动态SQL<br />
　　本地动态SQL是使用EXECUTE IMMEDIATE语句来实现的。<br />
<br />
　　1、本地动态SQL执行DDL语句：<br />
　　需求：根据用户输入的表名及字段名等参数动态建表。<br />
create or replace procedure proc_test <br />
　　( <br />
　　table_name in varchar2, --表名 <br />
　　field1 in varchar2, --字段名 <br />
　　datatype1 in varchar2, --字段类型 <br />
　　field2 in varchar2, --字段名 <br />
　　datatype2 in varchar2 --字段类型 <br />
　　) as <br />
　　str_sql varchar2(500); <br />
　　begin <br />
　　str_sql:=&#8217;create table &#8217;||table_name||&#8217;(&#8217;||field1||&#8217; &#8217;||datatype1||&#8217;,&#8217;||field2||&#8217; &#8217;||datatype2||&#8217;)&#8217;; <br />
　　execute immediate str_sql; --动态执行DDL语句 <br />
　　exception <br />
　　when others then <br />
　　null; <br />
　　end ; <br />
　　以上是编译通过的存储过程代码。下面执行存储过程动态建表。　　<br />
<br />
SQL＞ execute proc_test(&#8217;dinya_test&#8217;,&#8217;id&#8217;,&#8217;number(8) not null&#8217;,&#8217;name&#8217;,&#8217;varchar2(100)&#8217;); <br />
　　PL/SQL procedure successfully completed <br />
　　SQL＞ desc dinya_test; <br />
　　Name Type Nullable Default Comments <br />
　　---- ------------- -------- ------- -------- <br />
　　ID NUMBER(8) <br />
　　NAME VARCHAR2(100) Y <br />
　　SQL＞ <br />
<br />
　　到这里，就实现了我们的需求，使用本地动态SQL根据用户输入的表名及字段名、字段类型等参数来实现动态执行DDL语句。<br />
<br />
　　2、本地动态SQL执行DML语句。<br />
　　需求：将用户输入的值插入到上例中建好的dinya_test表中。　　<br />
create or replace procedure proc_insert <br />
　　( <br />
　　id in number, --输入序号 <br />
　　name in varchar2 --输入姓名 <br />
　　) as <br />
　　str_sql varchar2(500); <br />
　　begin <br />
　　str_sql:=&#8217;insert into dinya_test values(:1,:2)&#8217;; <br />
　　execute immediate str_sql using id,name; --动态执行插入操作 <br />
　　exception <br />
　　when others then <br />
　　null; <br />
　　end ; <br />
　　执行存储过程，插入数据到测试表中。 <br />
　　SQL＞ execute proc_insert(1,&#8217;dinya&#8217;); <br />
　　PL/SQL procedure successfully completed <br />
　　SQL＞select * from dinya_test; <br />
　　ID NAME <br />
　　1 dinya <br />
　　在上例中，本地动态SQL执行DML语句时使用了using子句，按顺序将输入的值绑定到变量，如果需要输出参数，可以在执行动态SQL的时候，使用RETURNING INTO 子句，如：　<br />
declare <br />
　　p_id number:=1; <br />
　　v_count number; <br />
　　begin <br />
　　v_string:=&#8217;select count(*) from table_name a where a.id=:id&#8217;; <br />
　　execute immediate v_string into v_count using p_id; <br />
　　end ; <br />
　　更多的关于动态SQL中关于返回值及为输出输入绑定变量执行参数模式的问题，请读者自行做测试。<br />
<br />
　　二、使用DBMS_SQL包<br />
　　使用DBMS_SQL包实现动态SQL的步骤如下：A、先将要执行的SQL语句或一个语句块放到一个字符串变量中。B、使用DBMS_SQL包的parse过程来分析该字符串。C、使用DBMS_SQL包的bind_variable过程来绑定变量。D、使用DBMS_SQL包的execute函数来执行语句。<br />
<br />
　　1、使用DBMS_SQL包执行DDL语句<br />
　　需求：使用DBMS_SQL包根据用户输入的表名、字段名及字段类型建表。<br />
create or replace procedure proc_dbms_sql <br />
　　( <br />
　　table_name in varchar2, --表名 <br />
　　field_name1 in varchar2, --字段名 <br />
　　datatype1 in varchar2, --字段类型 <br />
　　field_name2 in varchar2, --字段名 <br />
　　datatype2 in varchar2 --字段类型 <br />
　　)as <br />
　　v_cursor number; --定义光标 <br />
　　v_string varchar2(200); --定义字符串变量 <br />
　　v_row number; --行数 <br />
　　begin <br />
　　v_cursor:=dbms_sql.open_cursor; --为处理打开光标 <br />
　　v_string:=&#8217;create table &#8217;||table_name||&#8217;(&#8217;||field_name1||&#8217; &#8217;||datatype1||&#8217;,&#8217;||field_name2||&#8217; &#8217;||datatype2||&#8217;)&#8217;; <br />
　　dbms_sql.parse(v_cursor,v_string,dbms_sql.native); --分析语句 <br />
　　v_row:=dbms_sql.execute(v_cursor); --执行语句 <br />
　　dbms_sql.close_cursor(v_cursor); --关闭光标 <br />
　　exception <br />
　　when others then <br />
　　dbms_sql.close_cursor(v_cursor); --关闭光标 <br />
　　raise; <br />
　　end; <br />
<br />
　　以上过程编译通过后，执行过程创建表结构：<br />
<br />
SQL＞ execute proc_dbms_sql(&#8217;dinya_test2&#8217;,&#8217;id&#8217;,&#8217;number(8) not null&#8217;,&#8217;name&#8217;,&#8217;varchar2(100)&#8217;); <br />
　　PL/SQL procedure successfully completed <br />
　　SQL＞ desc dinya_test2; <br />
　　Name Type Nullable Default Comments <br />
　　---- ------------- -------- ------- -------- <br />
　　ID NUMBER(8) <br />
　　NAME VARCHAR2(100) Y <br />
　　SQL＞<br />
<br />
　　2、使用DBMS_SQL包执行DML语句<br />
　　需求：使用DBMS_SQL包根据用户输入的值更新表中相对应的记录。<br />
<br />
　　查看表中已有记录：　<br />
<br />
SQL＞select * from dinya_test2; <br />
　　ID NAME <br />
　　1 Oracle <br />
　　2 CSDN <br />
　　3 ERP <br />
　　SQL＞<br />
<br />
建存储过程，并编译通过：　　<br />
<br />
create or replace procedure proc_dbms_sql_update <br />
　　( <br />
　　id number, <br />
　　name varchar2 <br />
　　)as <br />
　　v_cursor number; --定义光标 <br />
　　v_string varchar2(200); --字符串变量 <br />
　　v_row number; --行数 <br />
　　begin <br />
　　v_cursor:=dbms_sql.open_cursor; --为处理打开光标 <br />
　　v_string:=&#8217;update dinya_test2 a set a.name=:p_name where a.id=:p_id&#8217;; <br />
　　dbms_sql.parse(v_cursor,v_string,dbms_sql.native); --分析语句 <br />
　　dbms_sql.bind_variable(v_cursor,&#8217;:p_name&#8217;,name); --绑定变量 <br />
　　dbms_sql.bind_variable(v_cursor,&#8217;:p_id&#8217;,id); --绑定变量 <br />
　　v_row:=dbms_sql.execute(v_cursor); 　　　　　　　　　　　--执行动态SQL <br />
　　dbms_sql.close_cursor(v_cursor); --关闭光标 <br />
　　exception <br />
　　when others then <br />
　　dbms_sql.close_cursor(v_cursor); --关闭光标 <br />
　　raise; <br />
　　end; <br />
　　执行过程，根据用户输入的参数更新表中的数据：　　<br />
<br />
SQL＞ execute proc_dbms_sql_update(2,&#8217;csdn_dinya&#8217;); <br />
　　PL/SQL procedure successfully completed <br />
　　SQL＞select * from dinya_test2; <br />
　　ID NAME <br />
　　1 Oracle <br />
　　2 csdn_dinya <br />
　　3 ERP <br />
　　SQL＞<br />
　<br />
　　执行过程后将第二条的name字段的数据更新为新值csdn_dinya。这样就完成了使用dbms_sql包来执行DML语句的功能。<br />
<br />
　　使用DBMS_SQL中，如果要执行的动态语句不是查询语句，使用DBMS_SQL.Execute或DBMS_SQL.Variable_Value来执行，如果要执行动态语句是查询语句，则要使用DBMS_SQL.define_column定义输出变量，然后使用DBMS_SQL.Execute, DBMS_SQL.Fetch_Rows, DBMS_SQL.Column_Value及DBMS_SQL.Variable_Value来执行查询并得到结果。<br />
<br />
　　总结说明：<br />
<br />
　　在Oracle开发过程中，我们可以使用动态SQL来执行DDL语句、DML语句、事务控制语句及系统控制语句。但是需要注意的是，PL/SQL块中使用动态SQL执行DDL语句的时候与别的不同，在DDL中使用绑定变量是非法的(bind_variable(v_cursor,&#8217;:p_name&#8217;,name))，分析后不需要执行DBMS_SQL.Bind_Variable，直接将输入的变量加到字符串中即可。另外，DDL是在调用DBMS_SQL.PARSE时执行的，所以DBMS_SQL.EXECUTE也可以不用，即在上例中的v_row:=dbms_sql.execute(v_cursor)部分可以不要。
<img src ="http://www.blogjava.net/jelver/aggbug/153443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2007-10-17 08:57 <a href="http://www.blogjava.net/jelver/articles/153443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中取前几名的方法（转）</title><link>http://www.blogjava.net/jelver/articles/153305.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Tue, 16 Oct 2007 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/153305.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/153305.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/153305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/153305.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/153305.html</trackback:ping><description><![CDATA[与SQL SERVER相比,Oracle没有Top n 这样简单方便取前几名的方法.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但也有相对应的方法可以实现，使用的是Oracle中的伪列：rownum.<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最简单的方法如下：<br />
<br />
一：最简单的问题：直接取前几名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT A.* from Company_Expense&nbsp; A WHERE ROWNUM&lt;=N&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (注意,在上句中我们没有指定按哪列进行排序,而具体rownum序号是依据哪一列，现在我都不确定。但可以明确一点的是，如果我们按主键进行排序，rownum号不会乱，但如果指定其它列的号，序号有可能会乱)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
二：麻烦一点的：取后几名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面方法的一点变通,首先在内部以某列进行排列，在外面取<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select V.* from<br />
(<br />
select rownum,A.* from company_expense A<br />
order by a.expenseid desc<br />
)V where rownum&lt;3<br />
<br />
三：变态一点的：取前几名，但值相同的记录为同一名次<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 比如：对班级学生成绩进行排名，第一名:100,共2名，第二名,98,共5名........如此类推，取出排名前十名的所有学生。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;基本思路是：先使用Distinct取得成绩的前十名,并使用rownum排序.这样可以得出第十名的值，然后取所有成绩大于等于第十名的所有学生信息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 记录得到后,然后再与刚使用Distinct取得成绩为前十名，且有rownum序号的表Join,以成绩为条件。就可以得到正常的排名次序。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 相关代码请参考如下脚本：<br />
<div style="font-size: 10pt"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />select&nbsp;rownum,&nbsp;T.Row_Num,&nbsp;v.*<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;from&nbsp;(select&nbsp;A.Name,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A.Employee_Code,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.STATUS,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;To_Char(v.JOIN_DATE,&nbsp;'yyyy-mm-dd')&nbsp;Join_Date,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V.Unit_Name,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.line_description&nbsp;Line_Num,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum(a.last_result)&nbsp;Sum_result<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;QM_QUALITY_LEVEL_JUDGE&nbsp;&nbsp;&nbsp;A,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hr_lbr_employee_tl_tbl_v&nbsp;v,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Qm_Product_Line&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Where&nbsp;a.employee_code&nbsp;=&nbsp;v.EMPLOYEE_CODE<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;And&nbsp;A.LINE_NUM&nbsp;=&nbsp;P.Line_Num<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;And&nbsp;To_Char(A.Index_Date,&nbsp;'yyyy-mm-dd')&nbsp;&gt;=&nbsp;'2006-05-01'<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;And&nbsp;To_Char(A.Index_Date,&nbsp;'yyyy-mm-dd')&nbsp;&lt;=&nbsp;'2006-07-24'<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;And&nbsp;A.Last_Result&nbsp;&gt;&nbsp;0<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group&nbsp;by&nbsp;A.Name,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A.Employee_Code,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V.STATUS,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V.JOIN_DATE,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V.Unit_Name,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A.Line_Num,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P.LINE_DESCRIPTION<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order&nbsp;by&nbsp;Sum_Result&nbsp;desc,&nbsp;employee_code&nbsp;desc)&nbsp;v&nbsp;&nbsp;&nbsp;---基本的信息<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;left&nbsp;join&nbsp;(select&nbsp;rownum&nbsp;row_Num,&nbsp;v.*<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;(select&nbsp;distinct&nbsp;sum(a.last_result)&nbsp;Sum_result<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;QM_QUALITY_LEVEL_JUDGE&nbsp;&nbsp;&nbsp;A,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hr_lbr_employee_tl_tbl_v&nbsp;v,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Qm_Product_Line&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Where&nbsp;a.employee_code&nbsp;=&nbsp;v.EMPLOYEE_CODE<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;And&nbsp;A.LINE_NUM&nbsp;=&nbsp;P.Line_Num<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;And&nbsp;To_Char(A.Index_Date,&nbsp;'yyyy-mm-dd')&nbsp;&gt;=<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'2006-05-01'<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;And&nbsp;To_Char(A.Index_Date,&nbsp;'yyyy-mm-dd')&nbsp;&lt;=<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'2006-07-24'<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;And&nbsp;A.Last_Result&nbsp;&gt;&nbsp;0<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group&nbsp;by&nbsp;A.Name,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A.Employee_Code,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V.STATUS,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V.JOIN_DATE,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V.Unit_Name,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A.Line_Num,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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.LINE_DESCRIPTION<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Order&nbsp;by&nbsp;Sum_Result&nbsp;Desc)&nbsp;v<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Where&nbsp;rownum&nbsp;&lt;=&nbsp;10)&nbsp;T&nbsp;On&nbsp;v.Sum_Result&nbsp;=&nbsp;T.Sum_Result&nbsp;&nbsp;--得到正确的排名序号<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />-----以下条件是取得所有大于第十名成绩的记录&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;where&nbsp;V.sum_Result&nbsp;&gt;=<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(select&nbsp;min(Sum_Result)&nbsp;Sum_Result<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;(select&nbsp;rownum&nbsp;row_Num,&nbsp;v.*<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;(select&nbsp;distinct&nbsp;sum(a.last_result)&nbsp;Sum_result<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;QM_QUALITY_LEVEL_JUDGE&nbsp;&nbsp;&nbsp;A,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hr_lbr_employee_tl_tbl_v&nbsp;v,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Qm_Product_Line&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Where&nbsp;a.employee_code&nbsp;=&nbsp;v.EMPLOYEE_CODE<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;And&nbsp;A.LINE_NUM&nbsp;=&nbsp;P.Line_Num<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;And&nbsp;To_Char(A.Index_Date,&nbsp;'yyyy-mm-dd')&nbsp;&gt;=<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'2006-05-01'<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;And&nbsp;To_Char(A.Index_Date,&nbsp;'yyyy-mm-dd')&nbsp;&lt;=<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'2006-07-24'<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;And&nbsp;A.Last_Result&nbsp;&gt;&nbsp;0<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group&nbsp;by&nbsp;A.Name,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A.Employee_Code,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V.STATUS,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V.JOIN_DATE,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V.Unit_Name,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A.Line_Num,<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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.LINE_DESCRIPTION<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Order&nbsp;By&nbsp;Sum_Result&nbsp;Desc)&nbsp;v<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Where&nbsp;rownum&nbsp;&lt;=&nbsp;10))</div>
<p style="font-size: 10pt"><br />
</p>
<img src ="http://www.blogjava.net/jelver/aggbug/153305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2007-10-16 16:28 <a href="http://www.blogjava.net/jelver/articles/153305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle常用查询（转）</title><link>http://www.blogjava.net/jelver/articles/153301.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Tue, 16 Oct 2007 08:23:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/153301.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/153301.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/153301.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/153301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/153301.html</trackback:ping><description><![CDATA[<font color="#555555"><font color="#555555">最近有许多学员问了一些面试中的问题，总结起来看，一是关于怎样找出和去除重复数据，这在另一个帖子利已有详细介绍。二是关于找出某一列里最大或最小的前几个，或是大于或小于某一个值（最大值或平均值）的数据。针对这种情况，再此做一个介绍。 <br />
<br />
1：找出公司里收入最高的前三名员工： <br />
<br />
SQL&gt; select rownum, last_name, salary <br />
&nbsp;2 &nbsp;from (select last_name, salary <br />
&nbsp;3 &nbsp; &nbsp; &nbsp; &nbsp;from s_emp <br />
&nbsp;4 &nbsp; &nbsp; &nbsp; &nbsp;order by salary desc) <br />
&nbsp;5 &nbsp;where rownum&lt;=3; <br />
<br />
&nbsp; &nbsp;ROWNUM LAST_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SALARY <br />
---------- ------------------------- ---------- <br />
&nbsp; &nbsp; &nbsp; &nbsp; 1 Velasquez &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4750 <br />
&nbsp; &nbsp; &nbsp; &nbsp; 2 Ropeburn &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2945 <br />
&nbsp; &nbsp; &nbsp; &nbsp; 3 Nguyen &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2897.5 <br />
<br />
<br />
注意：请大家分析一下一下语句为什么不对： <br />
<br />
SQL&gt; select rownum, last_name, salary <br />
&nbsp;2 &nbsp;from s_emp <br />
&nbsp;3 &nbsp;where rownum&lt;=3 <br />
&nbsp;4 &nbsp;order by salary desc; <br />
<br />
&nbsp; &nbsp;ROWNUM LAST_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SALARY <br />
---------- ------------------------- ---------- <br />
&nbsp; &nbsp; &nbsp; &nbsp; 1 Velasquez &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4750 <br />
&nbsp; &nbsp; &nbsp; &nbsp; 3 Nagayama &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2660 <br />
&nbsp; &nbsp; &nbsp; &nbsp; 2 Ngao &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2000 <br />
<br />
<font color="#ff0000">注：在informix里的查询用：select first 10 * from table where .....<br />
<br />
</font>2： 找出表中的某一行或某几行的数据： <br />
<br />
（1）：找出表中第三行数据： <br />
用以下方法是不行的，因为rownum后面至可以用&lt;或&lt;=号,不可以用=,&gt;号和其它的比较符号。 <br />
<br />
SQL&gt; select * from s_emp <br />
&nbsp;2 &nbsp;where rownum=3; <br />
<br />
no rows selected <br />
<br />
SQL&gt; select * from s_emp <br />
&nbsp;2 &nbsp;where rownum between 3 and 5; <br />
<br />
no rows selected <br />
<br />
正确的方法如下： <br />
<br />
SQL&gt; l <br />
&nbsp;1 &nbsp;select last_name, salary <br />
&nbsp;2 &nbsp;from (select rownum a, b.* <br />
&nbsp;3 &nbsp; &nbsp; &nbsp; &nbsp;from s_emp b) <br />
&nbsp;4* where a=3 <br />
SQL&gt; / <br />
<br />
LAST_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SALARY <br />
------------------------- ---------- <br />
Nagayama &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2660 <br />
<br />
（2）：找出第三行到第五行之间的数据： <br />
SQL&gt; l <br />
&nbsp;1 &nbsp;select last_name, salary <br />
&nbsp;2 &nbsp;from (select rownum a, b.* <br />
&nbsp;3 &nbsp; &nbsp; &nbsp; &nbsp;from s_emp b) <br />
&nbsp;4* where a between 3 and 5 <br />
SQL&gt; / <br />
<br />
LAST_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SALARY <br />
------------------------- ---------- <br />
Nagayama &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2660 <br />
Quick-To-See &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2755 <br />
Ropeburn &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2945 <br />
<br />
3：找出那些工资高于他们所在部门的平均工资的员工。 <br />
<br />
（1）：第一种方法： <br />
SQL&gt; select last_name, dept_id, salary <br />
&nbsp;2 &nbsp;from s_emp a <br />
&nbsp;3 &nbsp;where salary&gt;(select avg(salary) <br />
&nbsp;4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;from s_emp <br />
&nbsp;5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;where dept_id=a.dept_id); <br />
<br />
LAST_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DEPT_ID &nbsp; &nbsp; SALARY <br />
------------------------- ---------- ---------- <br />
Velasquez &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 50 &nbsp; &nbsp; &nbsp; 4750 <br />
Urguhart &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;41 &nbsp; &nbsp; &nbsp; 2280 <br />
Menchu &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;42 &nbsp; &nbsp; &nbsp; 2375 <br />
Biri &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;43 &nbsp; &nbsp; &nbsp; 2090 <br />
Catchpole &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 44 &nbsp; &nbsp; &nbsp; 2470 <br />
Havel &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 45 &nbsp; &nbsp; 2483.3 <br />
Nguyen &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;34 &nbsp; &nbsp; 2897.5 <br />
Maduro &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;41 &nbsp; &nbsp; &nbsp; 2660 <br />
Nozaki &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;42 &nbsp; &nbsp; &nbsp; 2280 <br />
Schwartz &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;45 &nbsp; &nbsp; &nbsp; 2090 <br />
<br />
10 rows selected. <br />
<br />
（2）：第二种方法： <br />
SQL&gt; l <br />
&nbsp;1 &nbsp;select a.last_name, a.salary, a.dept_id, b.avgsal <br />
&nbsp;2 &nbsp;from s_emp a, (select dept_id, avg(salary) avgsal <br />
&nbsp;3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; from s_emp <br />
&nbsp;4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; group by dept_id) b <br />
&nbsp;5 &nbsp;where a.dept_id=b.dept_id <br />
&nbsp;6* and a.salary&gt;b.avgsal <br />
SQL&gt; / <br />
<br />
LAST_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SALARY &nbsp; &nbsp;DEPT_ID &nbsp; &nbsp; AVGSAL <br />
------------------------- ---------- ---------- ---------- <br />
Velasquez &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4750 &nbsp; &nbsp; &nbsp; &nbsp; 50 &nbsp; &nbsp; 3847.5 <br />
Urguhart &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2280 &nbsp; &nbsp; &nbsp; &nbsp; 41 &nbsp; &nbsp; 2181.5 <br />
Menchu &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2375 &nbsp; &nbsp; &nbsp; &nbsp; 42 2055.16667 <br />
Biri &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2090 &nbsp; &nbsp; &nbsp; &nbsp; 43 &nbsp; &nbsp; &nbsp; 1710 <br />
Catchpole &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2470 &nbsp; &nbsp; &nbsp; &nbsp; 44 &nbsp; &nbsp; &nbsp; 1995 <br />
Havel &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2483.3 &nbsp; &nbsp; &nbsp; &nbsp; 45 &nbsp; &nbsp; 2069.1 <br />
Nguyen &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2897.5 &nbsp; &nbsp; &nbsp; &nbsp; 34 &nbsp; &nbsp; &nbsp; 2204 <br />
Maduro &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2660 &nbsp; &nbsp; &nbsp; &nbsp; 41 &nbsp; &nbsp; 2181.5 <br />
Nozaki &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2280 &nbsp; &nbsp; &nbsp; &nbsp; 42 2055.16667 <br />
Schwartz &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2090 &nbsp; &nbsp; &nbsp; &nbsp; 45 &nbsp; &nbsp; 2069.1 <br />
<br />
10 rows selected. <br />
<br />
4：找出那些工资高于他们所在部门的manager的工资的员工。 <br />
<br />
SQL&gt; l <br />
&nbsp;1 &nbsp;select id, last_name, salary, manager_id <br />
&nbsp;2 &nbsp;from s_emp a <br />
&nbsp;3 &nbsp;where salary&gt;(select salary <br />
&nbsp;4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;from s_emp <br />
&nbsp;5* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; where id=a.manager_id) <br />
SQL&gt; / <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp;ID LAST_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SALARY MANAGER_ID <br />
---------- ------------------------- ---------- ---------- <br />
&nbsp; &nbsp; &nbsp; &nbsp; 6 Urguhart &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2280 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 <br />
&nbsp; &nbsp; &nbsp; &nbsp; 7 Menchu &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2375 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 <br />
&nbsp; &nbsp; &nbsp; &nbsp; 8 Biri &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2090 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 <br />
&nbsp; &nbsp; &nbsp; &nbsp; 9 Catchpole &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2470 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 <br />
&nbsp; &nbsp; &nbsp; &nbsp;10 Havel &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2483.3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 <br />
&nbsp; &nbsp; &nbsp; &nbsp;12 Giljum &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2831 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 <br />
&nbsp; &nbsp; &nbsp; &nbsp;13 Sedeghi &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2878.5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 <br />
&nbsp; &nbsp; &nbsp; &nbsp;14 Nguyen &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2897.5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 <br />
&nbsp; &nbsp; &nbsp; &nbsp;15 Dumas &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2755 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 <br />
&nbsp; &nbsp; &nbsp; &nbsp;16 Maduro &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2660 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;6 <br />
<br />
10 rows selected. <br />
<br />
<font color="#ff0000">附注：查询数据库有那些表：</font><br />
informix: select * from systables;<br />
Oracle:select * from user_all_tables;<br />
</font></font></td>
<br />
<img src ="http://www.blogjava.net/jelver/aggbug/153301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2007-10-16 16:23 <a href="http://www.blogjava.net/jelver/articles/153301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>