﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-想飞就别怕摔-随笔分类-数据库</title><link>http://www.blogjava.net/hhhaaawwwkkk/category/48651.html</link><description>大爷的并TM骂人</description><language>zh-cn</language><lastBuildDate>Mon, 10 Oct 2011 18:28:57 GMT</lastBuildDate><pubDate>Mon, 10 Oct 2011 18:28:57 GMT</pubDate><ttl>60</ttl><item><title>Oracle强杀进程，解决表锁死等问题</title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2011/10/09/360285.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Sun, 09 Oct 2011 08:22:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2011/10/09/360285.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/360285.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2011/10/09/360285.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/360285.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/360285.html</trackback:ping><description><![CDATA[<div id="cnblogs_post_body">
<p>&nbsp;1、找到sid,serial#；</p>
<div></div>
<div>SELECT&nbsp;/*+&nbsp;rule&nbsp;*/&nbsp;s.username,&nbsp;l.type,</div>
<div>decode(l.type,'TM','TABLE&nbsp;LOCK',&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'TX','ROW&nbsp;LOCK',&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL)&nbsp;LOCK_LEVEL,&nbsp;</div>
<div>o.owner,o.object_name,o.object_type,&nbsp;</div>
<div>s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser,s.status&nbsp;</div>
<div>FROM&nbsp;v$session&nbsp;s,v$lock&nbsp;l,dba_objects&nbsp;o&nbsp;</div>
<div>WHERE&nbsp;l.sid&nbsp;=&nbsp;s.sid&nbsp;</div>
<div>AND&nbsp;l.id1&nbsp;=&nbsp;o.object_id(+)&nbsp;</div>
<div>AND&nbsp;s.username&nbsp;is&nbsp;NOT&nbsp;NULL&nbsp;order&nbsp;by&nbsp;l.type;<br /><br /></div>
<div></div>
<div></div>
<div>2、根据找到的sid,serial#，执行以下语句，清除进程。</div>
<div></div>
<div>alter&nbsp;system&nbsp;kill&nbsp;session&nbsp;'~sid~,~serial#~';</div>
<div></div>
<div></div>
<div>例如： alter&nbsp;system&nbsp;kill&nbsp;session&nbsp;'14,4820';<br /><br />
<div>如果死锁不能自动释放，就需要我们手工的kill session。 步骤如下：</div>
<div>&nbsp;<wbr></div>
<div>1. &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 查看有无死锁对象，如有kill session</div>
<div>&nbsp;<wbr></div>
<div>SELECT &nbsp;<wbr> 'alter system kill session ''' || sid || ',' || serial# || ''';' &nbsp;<wbr>"Deadlock"</div>
<div>&nbsp;<wbr>&nbsp;<wbr>FROM &nbsp;<wbr> v$session</div>
<div>&nbsp;<wbr>WHERE &nbsp;<wbr> sid IN (SELECT &nbsp;<wbr> sid</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> FROM &nbsp;<wbr> v$lock</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>WHERE &nbsp;<wbr> block = 1);</div>
<div>如果有，会返回类似与如下的信息：</div>
<div><wbr><wbr><wbr><wbr><wbr>alter system kill session '132,731';</div>
<div>alter system kill session '275,15205';</div>
<div>alter system kill session '308,206';</div>
<div>alter system kill session '407,3510';</div>
<div>&nbsp;<wbr></div>
<div>kill session：</div>
<div>执行alter system kill session '391,48398'(sid为391);</div>
<div>注意：应当注意对于sid在100以下的应当谨慎，可能该进程对应某个application，如对应某个事务,可以kill.</div>
<div>&nbsp;<wbr></div>
<div>&nbsp;<wbr></div>
<div>2. &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 查看导致死锁的SQL</div>
<div>&nbsp;<wbr></div>
<div>&nbsp;<wbr>&nbsp;<wbr>SELECT &nbsp;<wbr> s.sid, q.sql_text</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>FROM &nbsp;<wbr> v$sqltext q, v$session s</div>
<div>&nbsp;<wbr>&nbsp;<wbr> WHERE &nbsp;<wbr> q.address = s.sql_address AND s.sid = &amp;sid &nbsp;<wbr>-- 这个&amp;sid 是第一步查询出来的</div>
<div>ORDER BY &nbsp;<wbr> piece;</div>
<div>&nbsp;<wbr></div>
<div>返回：</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>SID SQL_TEXT</div>
<div>---------- ----------------------------------------------------------------</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 77 UPDATE PROFILE_USER SET ID=1,COMPANY_ID=2,CUSTOMER_ID=3,NAMED &nbsp;<wbr></div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 77 _INSURED_ID=4,LOGIN=5,ROLE_ID=6,PASSWORD=7,EMAIL=8,TIME_ZON</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 77 E=9 WHERE PROFILE_USER.ID=:34</div>
<div>3 rows selected.</div>
<div>&nbsp;<wbr></div>
<div>&nbsp;<wbr></div>
<div>3. 查看谁锁了谁</div>
<div>SELECT &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>s1.username</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> || '@'</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> || s1.machine</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> || ' ( SID='</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> || s1.sid</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> || ' ) &nbsp;<wbr>is blocking '</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> || s2.username</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> || '@'</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> || s2.machine</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> || ' ( SID='</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> || s2.sid</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> || ' ) '</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>AS blocking_status</div>
<div>&nbsp;<wbr>&nbsp;<wbr>FROM &nbsp;<wbr> v$lock l1,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> v$session s1,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> v$lock l2,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> v$session s2</div>
<div>&nbsp;<wbr>WHERE &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> s1.sid = l1.sid</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> AND s2.sid = l2.sid</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> AND l1.BLOCK = 1</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> AND l2.request &gt; 0</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> AND l1.id1 = l2.id1</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> AND l2.id2 = l2.id2;</div>
<div>&nbsp;<wbr></div>
<div>或者</div>
<div>&nbsp;<wbr></div>
<div>&nbsp;<wbr>&nbsp;<wbr>SELECT &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr></div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>LPAD (' ', DECODE (l.xidusn, 0, 3, 0))</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> || l.oracle_username</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>User_name,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> o.owner,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> o.object_name,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> o.object_type,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> s.sid,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> s.serial#</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>FROM &nbsp;<wbr> v$locked_object l, dba_objects o, v$session s</div>
<div>&nbsp;<wbr>&nbsp;<wbr> WHERE &nbsp;<wbr> l.object_id = o.object_id AND l.session_id = s.sid</div>
<div>ORDER BY &nbsp;<wbr> o.object_id, xidusn DESC</div>
<div>&nbsp;<wbr></div>
<div>&nbsp;<wbr></div>
<div>&nbsp;<wbr></div>
<div>三．锁 和 阻塞</div>
<div>&nbsp;<wbr></div>
<div>3.1 相关概念</div>
<div>&nbsp;<wbr></div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 通常来讲，系统如果平时运行正常，突然会停止不动，多半是被阻塞（Blocked）住了。 我们可以通过v$lock 这张视图，看查看阻塞的信息。</div>
<div>&nbsp;<wbr></div>
<div>SQL&gt; desc v$lock;</div>
<div>&nbsp;<wbr>名称 &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>是否为空? 类型</div>
<div>&nbsp;<wbr>----------------------------------------- -------- -----------------</div>
<div>&nbsp;<wbr>ADDR &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> RAW(4)</div>
<div>&nbsp;<wbr>KADDR &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>RAW(4)</div>
<div>&nbsp;<wbr>SID &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> NUMBER</div>
<div>&nbsp;<wbr>TYPE &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>VARCHAR2(2)</div>
<div>&nbsp;<wbr>ID1 &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> NUMBER</div>
<div>&nbsp;<wbr>ID2 &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> NUMBER</div>
<div>&nbsp;<wbr>LMODE &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>NUMBER</div>
<div>&nbsp;<wbr>REQUEST &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> NUMBER</div>
<div>&nbsp;<wbr>CTIME &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> NUMBER</div>
<div>&nbsp;<wbr>BLOCK &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> NUMBER</div>
<div>&nbsp;<wbr></div>
<div>&nbsp;<wbr></div>
<div>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></div>
<div>&nbsp;<wbr></div>
<div>我们关注的比较多的是request 和 block 字段。</div>
<div>如果某个request列是一个非0值，那么它就是在等待一个锁。 &nbsp;<wbr>如果block列是1，这个SID 就持有了一个锁，并且阻塞别人获得这个锁。 这个锁的类型由TYPE 字段定义。锁的模式有LMODE 字段定义，ID1和ID2 字段定义了这个锁的相关信息。ID1相同，就代表指向同一个资源。这样就有可能有加锁者和等待者。 &nbsp;<wbr>LMODE 的6中模式参考上面的TM锁类型表。</div>
<div>&nbsp;<wbr></div>
<div>可以结合v$lock 和 v$session 视图来查询相关的信息：</div>
<div>&nbsp;<wbr></div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr></div>
<div>&nbsp;<wbr>&nbsp;<wbr>SELECT &nbsp;<wbr> sn.username,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> m.SID,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> sn.SERIAL#,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> m.TYPE,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> DECODE (m.lmode,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 0,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 'None',</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 1,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 'Null',</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 2,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 'Row Share',</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 3,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 'Row Excl.',</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 4,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 'Share',</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 5,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 'S/Row Excl.',</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 6,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 'Exclusive',</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> lmode,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> LTRIM (TO_CHAR (lmode, '990')))</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>lmode,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> DECODE (m.request,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 0,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 'None',</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 1,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 'Null',</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 2,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 'Row Share',</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 3,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 'Row Excl.',</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 4,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 'Share',</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 5,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 'S/Row Excl.',</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 6,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> 'Exclusive',</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> request,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> LTRIM (TO_CHAR (m.request, '990')))</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>request,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> m.id1,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> m.id2</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>FROM &nbsp;<wbr> v$session sn, v$lock m</div>
<div>&nbsp;<wbr>&nbsp;<wbr> WHERE &nbsp;<wbr> (sn.SID = m.SID AND m.request != 0) &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>--存在锁请求，即被阻塞</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> OR (sn.SID = m.SID &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> --不存在锁请求，但是锁定的对象被其他会话请求锁定</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> AND m.request = 0 AND lmode != 4</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> AND (id1, id2) IN</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>(SELECT &nbsp;<wbr> s.id1, s.id2</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> FROM &nbsp;<wbr> v$lock s</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>WHERE &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> request != 0</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>AND s.id1 = m.id1</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>AND s.id2 = m.id2))</div>
<div>ORDER BY &nbsp;<wbr> id1, id2, m.request;</div>
<div>&nbsp;<wbr></div>
<div>或者</div>
<div>&nbsp;<wbr></div>
<div>SELECT &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr></div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>s &nbsp;<wbr>.username,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> DECODE (l.TYPE, 'TM', 'TABLE LOCK', 'TX', 'ROW LOCK', NULL)</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>LOCK_LEVEL,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> o.owner,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> o.object_name,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> o.object_type,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> s.sid,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> s.serial#,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> s.terminal,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> s.machine,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> s.program,</div>
<div>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> s.osuser</div>
<div>&nbsp;<wbr>&nbsp;<wbr>FROM &nbsp;<wbr> v$session s, v$lock l, dba_objects o</div>
<div>&nbsp;<wbr>WHERE &nbsp;<wbr> l.sid = s.sid AND l.id1 = o.object_id(+) AND s.username IS NOT NULL</div></div></div><img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/360285.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2011-10-09 16:22 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2011/10/09/360285.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 10g 下载地址 </title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2011/09/15/358680.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Thu, 15 Sep 2011 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2011/09/15/358680.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/358680.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2011/09/15/358680.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/358680.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/358680.html</trackback:ping><description><![CDATA[<div id="cnblogs_post_body"><strong>Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (32-bit)</strong> 
<blockquote>http://download.oracle.com/otn/nt/oracle10g/10201/10201_database_win32.zip<br />http://download.oracle.com/otn/nt/oracle10g/10201/10201_client_win32.zip<br />http://download.oracle.com/otn/nt/oracle10g/10201/10201_clusterware_win32.zip<br />http://download.oracle.com/otn/nt/oracle10g/10201/10201_gateways_win32.zip</blockquote>
<p><wbr></p>
<p><strong>Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (x64)</strong></p>
<blockquote>http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_database.zip<br />http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_client.zip<br />http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_clusterware.zip</blockquote>
<p><wbr></p>
<p><strong>Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Linux x86</strong></p>
<blockquote>http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux32.zip<br />http://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux32.zip<br />http://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux32.zip</blockquote>
<p><wbr></p>
<p><strong>Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Linux x86-64</strong></p>
<blockquote>http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux_x86_64.cpio.gz<br />http://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux_x86_64.cpio.gz<br />http://download.oracle.com/otn/linux/oracle10g/10201/10201_clusterware_linux_x86_64.cpio.gz<br />http://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux_x86_64.cpio.gz</blockquote>
<p><wbr></p>
<p><strong>Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for AIX5L</strong></p>
<blockquote>http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_database.cpio.gz<br />http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_client.cpio.gz<br />http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_cluster.cpio.gz<br />http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_gateways.cpio.gz</blockquote>
<p><wbr></p>
<p><strong>Oracle Database 10g Release 2 (10.2.0.2) Enterprise/Standard Edition for Solaris Operating System (x86)</strong></p>
<blockquote>http://download.oracle.com/otn/solaris/oracle10g/10202/10202_database_solx86.zip<br />http://download.oracle.com/otn/solaris/oracle10g/10202/10202_client_solx86.zip<br />http://download.oracle.com/otn/solaris/oracle10g/10202/10202_clusterware_solx86.zip</blockquote>
<p><wbr></p>
<p><strong>Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Solaris Operating System (x86-64)</strong></p>
<blockquote>http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_database_solx86_64.zip<br />http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_client_solx86_64.zip<br />http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_clusterware_solx86_64.zip</blockquote><br /><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#83;&#104;&#97;&#110;&#83;&#104;&#97;&#110;&#49;&#49;&#50;&#52;&#49;&#49;&#55;&#51;&#48;&#55;&#55;&#51;&#64;&#113;&#113;&#46;&#99;&#111;&#109;">ShanShan112411730773@qq.com</a>&nbsp;&nbsp;</div><img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/358680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2011-09-15 10:35 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2011/09/15/358680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server创建存储过程(转)</title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/09/19/295646.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Sat, 19 Sep 2009 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/09/19/295646.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/295646.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/09/19/295646.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/295646.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/295646.html</trackback:ping><description><![CDATA[<p>什么是存储过程？</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存储过程（procedure）类似于C语言中的函数</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用来执行管理任务或应用复杂的业务规则</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存储过程可以带参数，也可以返回结果</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存储过程可以包含数据操纵语句、变量、逻辑 控制语句等</p>
<p>&nbsp;</p>
<p>存储过程的优点</p>
<p>(1)执行速度快。</p>
<p>存储过程创建是就已经通过语法检查和性能优化，在执行时无需每次编译。</p>
<p>存储在数据库服务器，性能高。</p>
<p>(2)允许模块化设计。</p>
<p>只需创建存储过程一次并将其存储在数据库中，以后即可在程序中调用该过程任意次。存储过程可由在数据库编程方面有专长的人员创建，并可独立于程序源代码而单独修改 。</p>
<p>(3)提高系统安全性。</p>
<p>&nbsp;&nbsp;&nbsp; 可将存储过程作为用户存取数据的管道。可以限制用户对数据表的存取权限，建立特定的存储过程供用户使用，完成对数据的访问。</p>
<p>&nbsp;&nbsp;&nbsp; 存储过程的定义文本可以被加密，使用户不能查看其内容。</p>
<p>(4)减少网络流量：</p>
<p>一个需要数百行Transact-SQL代码的操作由一条执行过程代码的单独语句就可实现，而不需要在网络中发送数百行代码。</p>
<p>&nbsp;</p>
<p>存储过程的分类 </p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 系统存储过程</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由系统定义，存放在master数据库中</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类似C语言中的系统函数</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 系统存储过程的名称都以&#8220;sp_&#8221;开头或&#8221;xp_&#8221;开头</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用户自定义存储过程</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由用户在自己的数据库中创建的存储过程</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类似C语言中的用户自定义函数</p>
<p>&nbsp;</p>
<p>常用的系统存储过程 </p>
<p>系统存储过程<br />
&nbsp;说明<br />
&nbsp;<br />
sp_databases<br />
&nbsp;列出服务器上的所有数据库。<br />
&nbsp;<br />
sp_helpdb<br />
&nbsp;报告有关指定数据库或所有数据库的信息<br />
&nbsp;<br />
sp_renamedb<br />
&nbsp;更改数据库的名称<br />
&nbsp;<br />
sp_tables<br />
&nbsp;返回当前环境下可查询的对象的列表<br />
&nbsp;<br />
sp_columns<br />
&nbsp;回某个表列的信息<br />
&nbsp;<br />
sp_help<br />
&nbsp;查看某个表的所有信息<br />
&nbsp;<br />
sp_helpconstraint<br />
&nbsp;查看某个表的约束<br />
&nbsp;<br />
sp_helpindex<br />
&nbsp;查看某个表的索引<br />
&nbsp;<br />
sp_stored_procedures<br />
&nbsp;列出当前环境中的所有存储过程。<br />
&nbsp;<br />
sp_password<br />
&nbsp;添加或修改登录帐户的密码。<br />
&nbsp;<br />
sp_helptext<br />
&nbsp;显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本。<br />
&nbsp;</p>
<p>&nbsp;</p>
<p>EXEC sp_databases /*列出当前系统中的数据库*/</p>
<p>EXEC&nbsp; sp_renamedb 'Northwind','Northwind1' /*修改数据库的名称(单用户访问, 最简单的办法就是执行SQL语句时关掉企业管理器)*/</p>
<p>USE stuDB </p>
<p>GO</p>
<p>EXEC sp_tables /*当前数据库中查询的对象的列表*/</p>
<p>EXEC sp_columns stuInfo /*返回某个表列的信息*/ </p>
<p>EXEC sp_help stuInfo /*查看表stuInfo的信息*/</p>
<p>EXEC sp_helpconstraint stuInfo /*查看表stuInfo的约束*/</p>
<p>EXEC sp_helpindex stuMarks /*查看表stuMarks的索引*/</p>
<p>EXEC sp_helptext 'view_stuInfo_stuMarks' /*查看视图的语句文本*/</p>
<p>EXEC sp_stored_procedures&nbsp; /*查看当前数据库中的存储过程*/</p>
<p>&nbsp;</p>
<p>常用的扩展存储过程</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 常用的扩展存储过程：xp_cmdshell </p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以执行DOS命令下的一些的操作 </p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以文本行方式返回任何输出 </p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调用语法：</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXEC xp_cmdshell DOS命令 [NO_OUTPUT]</p>
<p>USE master</p>
<p>GO</p>
<p>EXEC xp_cmdshell 'mkdir d:\bank', NO_OUTPUT /*创建文件夹D:\bank*/</p>
<p>IF EXISTS(SELECT * FROM sysdatabases</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE name='bankDB')</p>
<p>&nbsp;&nbsp; DROP DATABASE bankDB</p>
<p>GO</p>
<p>CREATE DATABASE bankDB</p>
<p>&nbsp;(</p>
<p>&nbsp; &#8230;</p>
<p>)</p>
<p>GO</p>
<p>EXEC xp_cmdshell 'dir D:\bank\' --查看文件 /*查看文件夹D:\bank*/</p>
<p>&nbsp;</p>
<p>如何创建存储过程？</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义存储过程的语法</p>
<p>&nbsp;&nbsp;&nbsp; CREATE&nbsp; PROC[EDURE]&nbsp; 存储过程名 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @参数1&nbsp; 数据类型 = 默认值,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;&#8230; ,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @参数n&nbsp; 数据类型 OUTPUT</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AS</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL语句</p>
<p>&nbsp;&nbsp;&nbsp; GO</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 和C语言的函数一样，参数可选</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数分为输入参数、输出参数 </p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输入参数允许有默认值</p>
<p>&nbsp;</p>
<p>创建不带参数的存储过程 </p>
<p>CREATE PROCEDURE proc_stu /* proc_stu为存储过程的名称*/</p>
<p>&nbsp; AS</p>
<p>&nbsp;&nbsp;&nbsp; DECLARE @writtenAvg float,@labAvg float /* 笔试平均分和机试平均分变量 */</p>
<p>&nbsp;&nbsp;&nbsp; SELECT @writtenAvg=AVG(writtenExam),</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @labAvg=AVG(labExam)&nbsp; FROM stuMarks</p>
<p>&nbsp;&nbsp;&nbsp; print '笔试平均分：'+convert(varchar(5),@writtenAvg)&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; print '机试平均分：'+convert(varchar(5),@labAvg)</p>
<p>&nbsp;&nbsp;&nbsp; IF (@writtenAvg&gt;70 AND @labAvg&gt;70)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print '本班考试成绩：优秀' /* 显示考试成绩的等级 */</p>
<p>&nbsp;&nbsp;&nbsp; ELSE</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print '本班考试成绩：较差'</p>
<p>&nbsp;&nbsp;&nbsp; print '--------------------------------------------------'</p>
<p>&nbsp;&nbsp;&nbsp; print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参加本次考试没有通过的学员：'</p>
<p>&nbsp;&nbsp;&nbsp; SELECT stuName,stuInfo.stuNo,writtenExam,labExam /* 显示未通过的学员 */</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM&nbsp; stuInfo&nbsp; INNER JOIN stuMarks ON&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stuInfo.stuNo=stuMarks.stuNo</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE writtenExam&lt;60 OR labExam&lt;60 </p>
<p>GO</p>
<p>&nbsp;</p>
<p>调用存储过程</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXECUTE（执行）语句用来调用存储过程</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调用的语法</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXEC&nbsp; 过程名&nbsp; [参数]</p>
<p>&nbsp;</p>
<p>创建带参数的存储过程</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存储过程的参数分两种：</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输入参数</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输出参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输入参数：</p>
<p>&nbsp;&nbsp;&nbsp; 用于向存储过程传入值，类似C语言的按值传递;</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输出参数：</p>
<p>&nbsp;&nbsp;&nbsp; 用于在调用存储过程后，</p>
<p>&nbsp;&nbsp;&nbsp; 返回结果，类似C语言的</p>
<p>&nbsp;&nbsp;&nbsp; 按引用传递;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>带输入参数的存储过程</p>
<p>问题：</p>
<p>修改上例：由于每次考试的难易程度不一样，每次 笔试和机试的及格线可能随时变化（不再是60分），这导致考试的评判结果也相应变化。</p>
<p>&nbsp;</p>
<p>分析：</p>
<p>在述存储过程添加2个输入参数：</p>
<p>@writtenPass&nbsp;&nbsp; 笔试及格线 </p>
<p>@labPass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 机试及格线 </p>
<p>CREATE PROCEDURE proc_stu </p>
<p>&nbsp; @writtenPass int = 60,&nbsp; /*输入参数：笔试及格线*/</p>
<p>&nbsp; @labPass int = 60&nbsp;&nbsp; /*输入参数：机试及格线*/</p>
<p>&nbsp; AS</p>
<p>&nbsp;&nbsp;&nbsp; print '--------------------------------------------------' </p>
<p>&nbsp;&nbsp;&nbsp; print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参加本次考试没有通过的学员：'</p>
<p>&nbsp;&nbsp;&nbsp; SELECT stuName,stuInfo.stuNo,writtenExam, /*查询没有通过考试的学员*/</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labExam&nbsp; FROM&nbsp; stuInfo</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INNER JOIN stuMarks ON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stuInfo.stuNo=stuMarks.stuNo</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE writtenExam&lt;@writtenPass </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OR labExam&lt;@labPass </p>
<p>GO</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调用带参数的存储过程</p>
<p>&nbsp;&nbsp;&nbsp; 假定本次考试机试偏难，机试的及格线定为55分，笔试及格线定为60分</p>
<p>EXEC proc_stu 60,55&nbsp; </p>
<p>--或这样调用：</p>
<p>EXEC proc_stu @labPass=55,@writtenPass=60</p>
<p>&nbsp;</p>
<p>带输出参数的存储过程 </p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果希望调用存储过程后，返回一个或多个值，这时就需要使用输出（OUTPUT）参数了 </p>
<p>问题：</p>
<p>修改上例，返回未通过考试的学员人数。</p>
<p>CREATE PROCEDURE proc_stu </p>
<p>&nbsp; @notpassSum int OUTPUT, /*输出（返回）参数：表示没有通过的人数*/</p>
<p>&nbsp; @writtenPass int=60,&nbsp;&nbsp; /*推荐将默认参数放在最后*/</p>
<p>&nbsp; @labPass int=60&nbsp; </p>
<p>&nbsp; AS</p>
<p>&nbsp;&nbsp;&nbsp; &#8230;&#8230;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; SELECT stuName,stuInfo.stuNo,writtenExam, /*统计并返回没有通过考试的学员人数*/</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labExam FROM&nbsp; stuInfo&nbsp;&nbsp; INNER JOIN stuMarks</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ON stuInfo.stuNo=stuMarks.stuNo</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE writtenExam&lt;@writtenPass</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OR labExam&lt;@labPass </p>
<p>&nbsp;&nbsp;&nbsp; SELECT @notpassSum=COUNT(stuNo) </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM stuMarks&nbsp; WHERE writtenExam&lt;@writtenPass </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OR labExam&lt;@labPass </p>
<p>GO</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调用带输出参数的存储过程</p>
<p>/*---调用存储过程----*/</p>
<p>DECLARE @sum int /*调用时必须带OUTPUT关键字 ，返回结果将存放在变量@sum中*/</p>
<p>EXEC proc_stu @sum OUTPUT ,64&nbsp; </p>
<p>print '--------------------------------------------------'</p>
<p>IF @sum&gt;=3 /*后续语句引用返回结果*/</p>
<p>&nbsp; print '未通过人数：'+convert(varchar(5),@sum)+ '人, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 超过60%,及格分数线还应下调'</p>
<p>ELSE</p>
<p>&nbsp; print '未通过人数：'+convert(varchar(5),@sum)+ '人,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 已控制在60%以下，及格分数线适中'</p>
<p>GO </p>
<p>注意：调用时也必须跟随关键字OUTPUT，否则SQL Server将视为输入参数。</p>
<p>&nbsp;</p>
<p>处理存储过程中的错误 </p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以使用PRINT语句显示错误信息，但这 些信息是临时的，只能显示给用户 </p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RAISERROR 显示用户定义的错误信息时</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可指定严重级别，</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置系统变量@@ERROR</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 记录所发生的错误等</p>
<p>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RAISERROR语句的用法如下： </p>
<p>RAISERROR (msg_id | msg_str,severity,</p>
<p>&nbsp;&nbsp; state WITH option[,...n]]) </p>
<p>&#8226;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msg_id：在sysmessages系统表中指定用户定义错误信息</p>
<p>&#8226;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msg_str：用户定义的特定信息，最长255个字符</p>
<p>&#8226;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; severity：定义严重性级别。用户可使用的级别为0&#8211;18级</p>
<p>&#8226;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state：表示错误的状态，1至127之间的值</p>
<p>&#8226;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; option：指示是否将错误记录到服务器错误日志中 </p>
<p>RAISERROR 语句每个参数的详细讲解，可以查阅SQL帮助!</p>
<p>问题：</p>
<p>完善上例，当用户调用存储过程时，传入的及格线参数不</p>
<p>在0～100之间时，将弹出错误警告，终止存储过程的执行。 </p>
<p>CREATE PROCEDURE proc_stu </p>
<p>&nbsp; @notpassSum int OUTPUT, --输出参数</p>
<p>&nbsp; @writtenPass int=60,&nbsp; --默认参数放后</p>
<p>&nbsp; @labPass int=60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --默认参数放后</p>
<p>&nbsp; AS</p>
<p>&nbsp;&nbsp;&nbsp; IF (NOT @writtenPass BETWEEN 0 AND 100) </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OR (NOT @labPass BETWEEN 0 AND 100)</p>
<p>/*引发系统错误，指定错误的严重级别16，调用状态为1（默认）,并影响@@ERROR系统变量的值 */</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RAISERROR (&#8216;及格线错误，请指定0－100之间的分 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数，统计中断退出',16,1)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETURN&nbsp; ---立即返回，退出存储过程</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END</p>
<p>&nbsp;&nbsp;&nbsp; &#8230;..其他语句同上例，略</p>
<p>GO </p>
<p>/*---调用存储过程，测试RAISERROR语句----*/</p>
<p>DECLARE @sum int,&nbsp; @t int</p>
<p>EXEC proc_stu @sum OUTPUT ,604&nbsp;&nbsp; /*笔试及格线误输入604分*/</p>
<p>SET @t=@@ERROR </p>
<p>print&nbsp; '错误号：'+convert(varchar(5),@t )</p>
<p>IF @t&lt;&gt;0&nbsp; /*如果执行了RAISERROR，系统全局@@ERROR将不等于0，表示出现错误*/</p>
<p>&nbsp;&nbsp; RETURN&nbsp; --退出批处理，后续语句不再执行</p>
<p>print '--------------------------------------------------'</p>
<p>IF @sum&gt;=3</p>
<p>&nbsp; print '未通过人数：'+convert(varchar(5),@sum)+ '人,超过60%,及格分数线还应下调'</p>
<p>ELSE</p>
<p>&nbsp; print '未通过人数：'+convert(varchar(5),@sum)+ '人,已控制在60%以下，及格分数线适中'</p>
<p>GO</p>
<p>&nbsp;</p>
<p>好，我们来做个总结：</p>
<p>&#8226;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存储过程是一组预编译的SQL语句，它可以包含数据操纵语句、变量、逻辑控制语句等 </p>
<p>&#8226;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存储过程允许带参数，参数分为：</p>
<p>&#8211;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输入参数</p>
<p>&#8211;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输出参数</p>
<p>&nbsp;&nbsp; 其中，输入参数可以有默认值。</p>
<p>&#8226;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输入参数：可以在调用时向存储过程传递参数，此类参数可用来向存储过程中传入值 </p>
<p>&#8226;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输出参数从存储过程中返回（输出）值，后面跟随OUTPUT关键字</p>
<p>&#8226;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RAISERROR语句用来向用户报告错误</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/lenotang/archive/2008/11/18/3329593.aspx</p><img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/295646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2009-09-19 10:38 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2009/09/19/295646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle10G 如何解除scott用户的锁定状态</title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/07/03/285286.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Fri, 03 Jul 2009 01:53:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/07/03/285286.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/285286.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/07/03/285286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/285286.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/285286.html</trackback:ping><description><![CDATA[<div>问题描述：<br />
&nbsp;&nbsp;&nbsp;&nbsp;新装完Oracle10g后，用scott/tiger测试，会出现以下错误提示：<br />
&nbsp;&nbsp;&nbsp; oracle10g the account is locked<br />
&nbsp;&nbsp;&nbsp; oracle10g the password has expired<br />
&nbsp;<br />
原因：默认Oracle10g的scott不能登陆。<br />
&nbsp;<br />
解决：<br />
（1）conn sys/sys as sysdba;//以DBA的身份登录<br />
（2）alter user scott account unlock;// 然后解锁<br />
（3）conn scott/tiger //弹出一个修改密码的对话框，修改一下密码就可以了</div>
<div>&nbsp;</div>
<div>具体操作步骤如下：</div>
<div>C:&gt; sqlplus</div>
<div>请输入用户名：sys</div>
<div>输入口令：sys as sysdba //注意：在口令这里输入的密码后面必须要跟上 as sysdba 才可以。<br />
SQL&gt; alter user scott account unlock;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 用户已更改.<br />
SQL&gt; commit;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 提交完成.<br />
SQL&gt; conn scott/tiger</div>
<div>更改scott口令</div>
<div>新口令：tiger</div>
<div>重新键入新口令：tiger</div>
<div>口令已更改</div>
<div>已连接。</div>
<div>//完成。</div><img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/285286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2009-07-03 09:53 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2009/07/03/285286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 创建表空间、用户、表</title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/07/02/285175.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Thu, 02 Jul 2009 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/07/02/285175.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/285175.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/07/02/285175.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/285175.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/285175.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">--</span><span style="color: #008080">--创建表空间</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;tablespace&nbsp;test_tableSpace<br />
datafile&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">D:\oracleDatabase\db\test_tableSpace.dbf</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;<br />
size&nbsp;200M<br />
</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;storage<br />
(initial&nbsp;200m<br />
</span><span style="color: #0000ff">next</span><span style="color: #000000">&nbsp;50m<br />
minextents&nbsp;</span><span style="color: #800000; font-weight: bold">20</span><span style="color: #000000"><br />
maxextents&nbsp;</span><span style="color: #800000; font-weight: bold">500</span><span style="color: #000000">)<br />
online;&nbsp;&nbsp;<br />
<br />
</span><span style="color: #008080">--</span><span style="color: #008080">--删除表空间</span><span style="color: #008080"><br />
</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">DROP</span><span style="color: #000000">&nbsp;TABLESPACE&nbsp;test_tableSpace&nbsp;INCLUDING&nbsp;CONTENTS&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;DATAFILES&nbsp;<br />
<br />
</span><span style="color: #008080">--</span><span style="color: #008080">--创建用户（）</span><span style="color: #008080"><br />
</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">USER</span><span style="color: #000000">&nbsp;shanshan&nbsp;PROFILE&nbsp;</span><span style="color: #0000ff">DEFAULT</span><span style="color: #000000">&nbsp;IDENTIFIED&nbsp;</span><span style="color: #0000ff">BY</span><span style="color: #000000">&nbsp;shanshan&nbsp;</span><span style="color: #0000ff">DEFAULT</span><span style="color: #000000">&nbsp;<br />
TABLESPACE&nbsp;test_tablespace&nbsp;</span><span style="color: #0000ff">TEMPORARY</span><span style="color: #000000">&nbsp;TABLESPACE&nbsp;</span><span style="color: #0000ff">TEMP</span><span style="color: #000000">&nbsp;ACCOUNT&nbsp;UNLOCK;<br />
<br />
</span><span style="color: #008080">--</span><span style="color: #008080">--给用户分配权限（shanshan用户名）</span><span style="color: #008080"><br />
</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">grant</span><span style="color: #000000">&nbsp;connect,resource&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;shanshan;</span></div>
这样就可以登录了。<br />
用PL/SQL Developer登录<br />
Username ：shanshan<br />
password ：shanshan<br />
database ：zzn<br />
connect as ：normal<br />
<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">--</span><span style="color: #008080">--创建数据表</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;test_user(&nbsp;<br />
first_name&nbsp;</span><span style="color: #000000; font-weight: bold">varchar2</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">15</span><span style="color: #000000">),&nbsp;<br />
last_name&nbsp;</span><span style="color: #000000; font-weight: bold">varchar2</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">20</span><span style="color: #000000">)&nbsp;<br />
);<br />
<br />
</span><span style="color: #008080">--</span><span style="color: #008080">--插入一条记录</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;test_user&nbsp;</span><span style="color: #0000ff">values</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">zhao</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">zhaonan</span><span style="color: #ff0000">'</span><span style="color: #000000">);<br />
<br />
<br />
</span><span style="color: #008080">--</span><span style="color: #008080">--查询记录</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;test_user;</span></div><img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/285175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2009-07-02 14:46 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2009/07/02/285175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server 2005 插入varchar类型的中文出现乱码</title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/06/23/283832.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Tue, 23 Jun 2009 13:44:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/06/23/283832.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/283832.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/06/23/283832.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/283832.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/283832.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>1：安装时不要选 Hide advice configuration&nbsp; options。然后再 Collation designator and order&nbsp; 中选择 Chinese_PRC </p>
<p>2：在建表时指明某个字段的语言</p>
<p>方法 COLLATE Chinese_PRC_CS_AS_WS</p>
<p>示例：</p>
<p>create table test<br />
(<br />
a varchar(255) COLLATE Chinese_PRC_CS_AS_WS NULL, <br />
b varchar(255) COLLATE sql_latin1_general_cp1_ci_as NULL <br />
)<br />
<br />
insert test values('中文','中文')</p>
<p>插入后 字段 a 为 中文 ，b 为 ??<br />
<br />
3：修改数据库的排序方法为Chinese_PRC_CI_AS；将Varchar类型设置为nvarchar类型；<br />
<br />
</p><img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/283832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2009-06-23 21:44 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2009/06/23/283832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle db_link 和触发器实现不同数据库表的同步</title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/05/06/269251.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Wed, 06 May 2009 07:45:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/05/06/269251.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/269251.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/05/06/269251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/269251.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/269251.html</trackback:ping><description><![CDATA[<p>---创建dblink,dblink_test名称，（被同步数据库的a_test）ST10766用户名，ep密码，ass100连接字符串<br />
create public database link dblink_test<br />
　　 connect to ST10766 identified by ep <br />
　　 using 'ass100';</p>
<p>---删除dblink<br />
----drop public database link dblink_test;</p>
<p>----建立表<br />
create table a_test (id int,name varchar(20),pass varchar(20))<br />
select * from a_test;</p>
<p>insert into a_test (id,name,pass) values (1,'zzn','shanshan')<br />
insert into b_test (id,username,password) values('1','zxl','xiaolan')</p>
<p>----在目的数据库上，测试dblink，查询的是源数据库的表<br />
select * from a_test@dblink_orc10;&nbsp; <br />
select * from a_test;</p>
<p>----创建触发器</p>
<p>create or replace trigger a_b_test<br />
&nbsp; after&nbsp; insert or update or delete <br />
&nbsp; on a_test<br />
&nbsp; for each row<br />
begin<br />
&nbsp; if deleting then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delete from b_test where id=:old.id;<br />
&nbsp; end if;<br />
&nbsp; if inserting then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insert into b_test(id,username,password)&nbsp; //b_test表的字段<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values(:new.id,:new.name,:new.pass);&nbsp;//a_test表的字段<br />
&nbsp; end if;<br />
&nbsp; if updating then<br />
&nbsp;&nbsp;&nbsp;&nbsp; update b_test set username=:new.name,password=:new.pass where id=:old.id;<br />
&nbsp; end if;<br />
end a_b_test;</p><img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/269251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2009-05-06 15:45 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2009/05/06/269251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]oracle数据库同步技术 </title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/04/28/267823.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Tue, 28 Apr 2009 00:35:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/04/28/267823.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/267823.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/04/28/267823.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/267823.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/267823.html</trackback:ping><description><![CDATA[<div class="postBody">oracle数据库同步技术 <br />
<br />
高级复制<br />
什么是复制？简单地说复制就是在由两个或者多个数据库系统构成的一个分布式数据库环境中拷贝数据的过程。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 高级复制，是在组成分布式数据库系统的多个数据库中复制和维护数据库对象的过程。 Oracle 高级复制允许应用程序更新数据库的任何副本，并将这些更改自动传递到其他数据库，同时确保全局事务处理的一致性和数据完整性。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同步复制，复制数据在任何时间在任何复制节点均保持一致。如果复制环境中的任何一个节点的复制数据发生了更新操作，这种变化会立刻反映到其他所有的复制节点。这种技术适用于那些对于实时性要求较高的商业应用中。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 异步复制，所有复制节点的数据在一定时间内是不同步的。如果复制环境中的其中的一个节点的复制数据发生了更新操作，这种改变将在不同的事务中被传播和应用到其他所有复制节点。这些不同的事务间可以间隔几秒，几分种，几小时，也可以是几天之后。复制节点之间的数据临时是不同步的，但传播最终将保证所有复制节点间的数据一致。 <br />
<span style="font-size: 18pt">一、实现数据库复制的前提条件</span>&nbsp;&nbsp;<br />
<strong>1、数据库支持高级复制功能&nbsp;&nbsp;<br />
</strong>您可以用system身份登录数据库，查看v$option视图，如果其中Advanced replication为TRUE，则支持高级复制功能；否则不支持。&nbsp;&nbsp;<br />
<strong>2、数据库初始化参数要求</strong>&nbsp;&nbsp;<br />
&#9312;、db_domain = test.com.cn&nbsp;&nbsp;<br />
指明数据库的域名(默认的是WORLD)，这里可以用您公司的域名。&nbsp;&nbsp;<br />
&#9313;、global_names = true&nbsp;&nbsp;<br />
它要求数据库链接(database link)和被连接的数据库名称一致。&nbsp;&nbsp;<br />
现在全局数据库名：db_name+&#8221;.&#8221;+db_domain&nbsp;&nbsp;<br />
&#9314;、有跟数据库job执行有关的参数&nbsp;&nbsp;<br />
job_queue_processes = 1&nbsp;&nbsp;<br />
job_queue_interval = 60&nbsp;&nbsp;<br />
distributed_transactions = 10&nbsp;&nbsp;<br />
open_links = 4&nbsp;&nbsp;<br />
第一行定义SNP进程的启动个数为n。系统缺省值为0，正常定义范围为0～36，根据任务的多少，可以配置不同的数值。&nbsp;&nbsp;<br />
第二行定义系统每隔N秒唤醒该进程一次。系统缺省值为60秒，正常范围为1～3600秒。事实上，该进程执行完当前任务后，就进入睡眠状态，睡眠一段时间后，由系统的总控负责将其唤醒。&nbsp;&nbsp;<br />
如果修改了以上这几个参数，需要重新启动数据库以使参数生效。&nbsp;&nbsp;<br />
<span style="font-size: 18pt">二、实现数据库同步复制的步骤&nbsp;</span>&nbsp;<br />
假设在Internet上我们有两个数据库：一个叫深圳(shenzhen)，一个叫北京(beijing)。&nbsp;&nbsp;<br />
具体配置见下表：&nbsp;&nbsp;<br />
数据库名 shenzhen beijing&nbsp;&nbsp;<br />
数据库域名 test.com.cn test.com.cn&nbsp;&nbsp;<br />
数据库sid号 shenzhen beijing&nbsp;&nbsp;<br />
Listener端口号 1521 1521&nbsp;&nbsp;<br />
服务器ip地址 10.1.1.100 10.1.1.200&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
<strong>1、确认两台数据库之间可以互相访问，在tnsnames.ora里设置数据库连接字符串。</strong>&nbsp;&nbsp;<br />
&#9312;、例如：深圳这边的数据库连接字符串是以下的格式&nbsp;&nbsp;<br />
beijing =&nbsp;&nbsp;<br />
(DESCRIPTION =&nbsp;&nbsp;<br />
(ADDRESS_LIST =&nbsp;&nbsp;<br />
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.200)(PORT = 1521))&nbsp;&nbsp;<br />
)&nbsp;&nbsp;<br />
(CONNECT_DATA =&nbsp;&nbsp;<br />
(SERVICE_NAME = beijing)&nbsp;&nbsp;<br />
)&nbsp;&nbsp;<br />
)&nbsp;&nbsp;<br />
运行$tnsping beijing&nbsp;&nbsp;<br />
出现以下提示符：&nbsp;&nbsp;<br />
Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.200)(PORT=1521))&nbsp;&nbsp;<br />
OK（n毫秒）&nbsp;&nbsp;<br />
表明深圳数据库可以访问北京数据库。&nbsp;&nbsp;<br />
&#9313;、在北京那边也同样配置，确认$tnsping shenzhen 是通的。&nbsp;&nbsp;<br />
<strong>2、改数据库全局名称，建公共的数据库链接。</strong>&nbsp;&nbsp;<br />
&#9312;、用system身份登录shenzhen数据库&nbsp;&nbsp;<br />
SQL&gt;alter database rename global_name to shenzhen.test.com.cn;&nbsp;&nbsp;<br />
用system身份登录beijing数据库：&nbsp;&nbsp;<br />
SQL&gt;alter database rename global_name to beijing.test.com.cn;&nbsp;&nbsp;<br />
&#9313;、用system身份登录shenzhen数据库&nbsp;&nbsp;<br />
SQL&gt;create public database link beijing.test.com.cn using 'beijing';&nbsp;&nbsp;<br />
测试数据库全局名称和公共的数据库链接&nbsp;&nbsp;<br />
SQL&gt;select * from global_name@beijing.test.com.cn;&nbsp;&nbsp;<br />
返回结果为beijing.test.com.cn就对了。&nbsp;&nbsp;<br />
用system身份登录beijing数据库：&nbsp;&nbsp;<br />
SQL&gt;create public database link shenzhen.test.com.cn using 'shenzhen';&nbsp;&nbsp;<br />
测试数据库全局名称和公共的数据库链接&nbsp;&nbsp;<br />
SQL&gt;select * from global_name@shenzhen.test.com.cn;&nbsp;&nbsp;<br />
返回结果为shenzhen.test.com.cn就对了。&nbsp;&nbsp;<br />
<strong>3、建立管理数据库复制的用户repadmin，并赋权。</strong>&nbsp;&nbsp;<br />
&#9312;、用system身份登录shenzhen数据库&nbsp;&nbsp;<br />
SQL&gt;create user repadmin identified by repadmin default tablespace users temporary tablespace temp;&nbsp;&nbsp;<br />
SQL&gt;execute dbms_defer_sys.register_propagator('repadmin');&nbsp;&nbsp;<br />
SQL&gt;grant execute any procedure to repadmin;&nbsp;&nbsp;<br />
SQL&gt;execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');&nbsp;&nbsp;<br />
SQL&gt;grant comment any table to repadmin;&nbsp;&nbsp;<br />
SQL&gt;grant lock any table to repadmin;&nbsp;&nbsp;<br />
&#9313;、同样用system身份登录beijing数据库，运行以上的命令，管理数据库复制的用户repadmin，并赋权。&nbsp;&nbsp;<br />
说明：repadmin用户名和密码可以根据用户的需求自由命名。&nbsp;&nbsp;<br />
<strong>4、在数据库复制的用户repadmin下创建私有的数据库链接。</strong>&nbsp;&nbsp;<br />
&#9312;、用repadmin身份登录shenzhen数据库&nbsp;&nbsp;<br />
SQL&gt;create database link beijing.test.com.cn connect to repadmin identified by repadmin;&nbsp;&nbsp;<br />
测试这个私有的数据库链接：&nbsp;&nbsp;<br />
SQL&gt;select * from global_name@beijing.test.com.cn;&nbsp;&nbsp;<br />
返回结果为beijing.test.com.cn就对了。&nbsp;&nbsp;<br />
&#9313;、用repadmin身份登录beijing数据库&nbsp;&nbsp;<br />
SQL&gt;create database link shenzhen.test.com.cn connect to repadmin identified by repadmin;&nbsp;&nbsp;<br />
测试这个私有的数据库链接&nbsp;&nbsp;<br />
SQL&gt;select * from global_name@shenzhen.test.com.cn;&nbsp;&nbsp;<br />
返回结果为shenzhen.test.com.cn就对了。&nbsp;&nbsp;<br />
<strong>5、创建或选择实现数据库复制的用户和对象，给用户赋权，数据库对象必须有主关键字。</strong>&nbsp;&nbsp;<br />
假设我们用ORACLE里举例用的scott用户，dept表。&nbsp;&nbsp;<br />
&#9312;、用internal身份登录shenzhen数据库，创建scott用户并赋权&nbsp;&nbsp;<br />
SQL&gt;create user scott identified by tiger default tablespace users temporary tablespace temp;&nbsp;&nbsp;<br />
SQL&gt;grant connect, resource to scott;&nbsp;&nbsp;<br />
SQL&gt;grant execute on sys.dbms_defer to scott;&nbsp;&nbsp;<br />
&#9313;、用scott身份登录shenzhen数据库，创建表dept&nbsp;&nbsp;<br />
SQL&gt;create table dept&nbsp;&nbsp;<br />
(deptno number(2) primary key,&nbsp;&nbsp;<br />
dname varchar2(14),&nbsp;&nbsp;<br />
loc varchar2(13) );&nbsp;&nbsp;<br />
&#9314;、如果数据库对象没有主关键字，可以运行以下SQL命令添加：&nbsp;&nbsp;<br />
SQL&gt;alter table dept add (constraint dept_deptno_pk primary key (deptno));&nbsp;&nbsp;<br />
&#9315;、在shenzhen数据库scott用户下创建主关键字的序列号，范围避免和beijing的冲突。&nbsp;&nbsp;<br />
SQL&gt; create sequence dept_no increment by 1 start with 1 maxvalue 44 cycle nocache;&nbsp;&nbsp;<br />
(说明：maxvalue 44可以根据应用程序及表结构主关键字定义的位数需要而定)&nbsp;&nbsp;<br />
&#9316;、在shenzhen数据库scott用户下插入初始化数据&nbsp;&nbsp;<br />
SQL&gt;insert into dept values (dept_no.nextval,'accounting','new york');&nbsp;&nbsp;<br />
SQL&gt;insert into dept values (dept_no.nextval,'research','dallas');&nbsp;&nbsp;<br />
SQL&gt;commit;&nbsp;&nbsp;<br />
&#9317;、在beijing数据库那边同样运行以上&#9312;，&#9313;，&#9314;&nbsp;&nbsp;<br />
&#9318;、在beijing数据库scott用户下创建主关键字的序列号，范围避免和shenzhen的冲突。&nbsp;&nbsp;<br />
SQL&gt; create sequence dept_no increment by 1 start with 45 maxvalue 99 cycle nocache;&nbsp;&nbsp;<br />
&#9319;、在beijing数据库scott用户下插入初始化数据&nbsp;&nbsp;<br />
SQL&gt;insert into dept values (dept_no.nextval,'sales','chicago');&nbsp;&nbsp;<br />
SQL&gt;insert into dept values (dept_no.nextval,'operations','boston');&nbsp;&nbsp;<br />
SQL&gt;commit;&nbsp;&nbsp;<br />
<strong>6、创建要复制的组scott_mg，加入数据库对象，产生对象的复制支持</strong>&nbsp;&nbsp;<br />
&#9312;、用repadmin身份登录shenzhen数据库，创建主复制组scott_mg&nbsp;&nbsp;<br />
SQL&gt; execute dbms_repcat.create_master_repgroup('scott_mg');&nbsp;&nbsp;<br />
说明：scott_mg组名可以根据用户的需求自由命名。&nbsp;&nbsp;<br />
&#9313;、在复制组scott_mg里加入数据库对象&nbsp;&nbsp;<br />
SQL&gt;execute dbms_repcat.create_master_repobject(sname=&gt;'scott',oname=&gt;'dept', type=&gt;'table',use_existing_object=&gt;true,gname=&gt;'scott_mg');&nbsp;&nbsp;<br />
参数说明：&nbsp;&nbsp;<br />
sname 实现数据库复制的用户名称&nbsp;&nbsp;<br />
oname 实现数据库复制的数据库对象名称&nbsp;&nbsp;<br />
(表名长度在27个字节内，程序包名长度在24个字节内)&nbsp;&nbsp;<br />
type 实现数据库复制的数据库对象类别&nbsp;&nbsp;<br />
(支持的类别：表，索引，同义词，触发器，视图，过程，函数，程序包，程序包体)&nbsp;&nbsp;<br />
use_existing_object true表示用主复制节点已经存在的数据库对象&nbsp;&nbsp;<br />
gname 主复制组名&nbsp;&nbsp;<br />
&#9314;、对数据库对象产生复制支持&nbsp;&nbsp;<br />
SQL&gt;execute dbms_repcat.generate_replication_support('scott','dept','table');&nbsp;&nbsp;<br />
(说明：产生支持scott用户下dept表复制的数据库触发器和程序包)&nbsp;&nbsp;<br />
&#9315;、确认复制的组和对象已经加入数据库的数据字典&nbsp;&nbsp;<br />
SQL&gt;select gname, master, status from dba_repgroup;&nbsp;&nbsp;<br />
SQL&gt;select * from dba_repobject;&nbsp;&nbsp;<br />
<strong>7、创建主复制节点</strong>&nbsp;&nbsp;<br />
&#9312;、用repadmin身份登录shenzhen数据库，创建主复制节点&nbsp;&nbsp;<br />
SQL&gt;execute dbms_repcat.add_master_database&nbsp;&nbsp;<br />
(gname=&gt;'scott_mg',master=&gt;'beijing.test.com.cn',use_existing_objects=&gt;true, copy_rows=&gt;false, propagation_mode =&gt; 'asynchronous');&nbsp;&nbsp;<br />
参数说明：&nbsp;&nbsp;<br />
gname 主复制组名&nbsp;&nbsp;<br />
master 加入主复制节点的另一个数据库&nbsp;&nbsp;<br />
use_existing_object true表示用主复制节点已经存在的数据库对象&nbsp;&nbsp;<br />
copy_rows false表示第一次开始复制时不用和主复制节点保持一致&nbsp;&nbsp;<br />
propagation_mode 异步地执行&nbsp;&nbsp;<br />
&#9313;、确认复制的任务队列已经加入数据库的数据字典&nbsp;&nbsp;<br />
SQL&gt;select * from user_jobs;&nbsp;&nbsp;<br />
<strong>8、使同步组的状态由停顿(quiesced )改为正常(normal)</strong>&nbsp;&nbsp;<br />
&#9312;、用repadmin身份登录shenzhen数据库，运行以下命令&nbsp;&nbsp;<br />
SQL&gt; execute dbms_repcat.resume_master_activity('scott_mg',false);&nbsp;&nbsp;<br />
&#9313;、确认同步组的状态为正常(normal)&nbsp;&nbsp;<br />
SQL&gt; select gname, master, status from dba_repgroup;&nbsp;&nbsp;<br />
&#9314;、如果这个&#9312;命令不能使同步组的状态为正常(normal)，可能有一些停顿的复制，运行以下命令再试试(建议在紧急的时候才用)：&nbsp;&nbsp;<br />
SQL&gt; execute dbms_repcat.resume_master_activity('scott_mg',true);&nbsp;&nbsp;<br />
<strong>9、创建复制数据库的时间表，我们假设用固定的时间表：10分钟复制一次。</strong>&nbsp;&nbsp;<br />
&#9312;、用repadmin身份登录shenzhen数据库，运行以下命令&nbsp;&nbsp;<br />
SQL&gt;begin&nbsp;&nbsp;<br />
dbms_defer_sys.schedule_push (&nbsp;&nbsp;<br />
destination =&gt; 'beijing.test.com.cn',&nbsp;&nbsp;<br />
interval =&gt; 'sysdate + 10/1440',&nbsp;&nbsp;<br />
next_date =&gt; sysdate);&nbsp;&nbsp;<br />
end;&nbsp;&nbsp;<br />
/&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
SQL&gt;begin&nbsp;&nbsp;<br />
dbms_defer_sys.schedule_purge (&nbsp;&nbsp;<br />
next_date =&gt; sysdate,&nbsp;&nbsp;<br />
interval =&gt; 'sysdate + 10/1440',&nbsp;&nbsp;<br />
delay_seconds =&gt; 0,&nbsp;&nbsp;<br />
rollback_segment =&gt; '');&nbsp;&nbsp;<br />
end;&nbsp;&nbsp;<br />
/&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&#9313;、用repadmin身份登录beijing数据库，运行以下命令&nbsp;&nbsp;<br />
SQL&gt;begin&nbsp;&nbsp;<br />
dbms_defer_sys.schedule_push (&nbsp;&nbsp;<br />
destination =&gt; ' shenzhen.test.com.cn ',&nbsp;&nbsp;<br />
interval =&gt; 'sysdate + 10 / 1440',&nbsp;&nbsp;<br />
next_date =&gt; sysdate);&nbsp;&nbsp;<br />
end;&nbsp;&nbsp;<br />
/&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
SQL&gt;begin&nbsp;&nbsp;<br />
dbms_defer_sys.schedule_purge (&nbsp;&nbsp;<br />
next_date =&gt; sysdate,&nbsp;&nbsp;<br />
interval =&gt; 'sysdate + 10/1440',&nbsp;&nbsp;<br />
delay_seconds =&gt; 0,&nbsp;&nbsp;<br />
rollback_segment =&gt; '');&nbsp;&nbsp;<br />
end;&nbsp;&nbsp;<br />
/&nbsp;&nbsp;<br />
<strong>10、添加或修改两边数据库的记录，跟踪复制过程</strong>&nbsp;&nbsp;<br />
如果你想立刻看到添加或修改后数据库的记录的变化，可以在两边repadmin用户下找到push的job_number，然后运行：&nbsp;&nbsp;<br />
SQL&gt;exec dbms_job.run(job_number);&nbsp;&nbsp;<br />
<span style="font-size: 18pt">三、异常情况的处理&nbsp;</span>&nbsp;<br />
<strong>1、检查复制工作正常否，可以在repadmin 用户下查询user_jobs</strong>&nbsp;&nbsp;<br />
SQL&gt;select job,this_date,next_date,what, broken from user_jobs;&nbsp;&nbsp;<br />
正常的状态有两种：&nbsp;&nbsp;<br />
任务闲&#8212;&#8212;this_date为空，next_date为当前时间后的一个时间值&nbsp;&nbsp;<br />
任务忙&#8212;&#8212;this_date不为空，next_date为当前时间后的一个时间值&nbsp;&nbsp;<br />
异常状态也有两种：&nbsp;&nbsp;<br />
任务死锁&#8212;&#8212;next_date为当前时间前的一个时间值&nbsp;&nbsp;<br />
任务死锁&#8212;&#8212;next_date为非常大的一个时间值，例如：4001-01-01&nbsp;&nbsp;<br />
这可能因为网络中断照成的死锁&nbsp;&nbsp;<br />
解除死锁的办法：&nbsp;&nbsp;<br />
$ps &#8211;ef|grep orale&nbsp;&nbsp;<br />
找到死锁的刷新快照的进程号ora_snp*，用kill &#8211;9 命令删除此进程&nbsp;&nbsp;<br />
然后进入repadmin 用户SQL&gt;操作符下，运行命令：&nbsp;&nbsp;<br />
SQL&gt;exec dbms_job.run(job_number);&nbsp;&nbsp;<br />
说明：job_number 为用select job,this_date,next_date,what from user_jobs;命令查出的job编号。&nbsp;&nbsp;<br />
<strong>2、增加或减少复制组的复制对象</strong>&nbsp;&nbsp;<br />
&#9312;、停止主数据库节点的复制动作，使同步组的状态由正常(normal)改为停顿(quiesced )&nbsp;&nbsp;<br />
用repadmin身份登录shenzhen数据库，运行以下命令&nbsp;&nbsp;<br />
SQL&gt;execute dbms_repcat.suspend_master_activity (gname =&gt; 'scott_mg');&nbsp;&nbsp;<br />
&#9313;、在复制组scott_mg里加入数据库对象，保证数据库对象必须有主关键字。&nbsp;&nbsp;<br />
SQL&gt;execute dbms_repcat.create_master_repobject(sname=&gt;'scott',oname=&gt;'emp', type=&gt;'table',use_existing_object=&gt;true,gname=&gt;'scott_mg');&nbsp;&nbsp;<br />
对加入的数据库对象产生复制支持&nbsp;&nbsp;<br />
SQL&gt;execute dbms_repcat.generate_replication_support('scott','emp','table');&nbsp;&nbsp;<br />
&#9314;、在复制组scott_mg里删除数据库对象。&nbsp;&nbsp;<br />
SQL&gt;execute dbms_repcat.drop_master_repobject ('scott','dept','table');&nbsp;&nbsp;<br />
&#9315;、重新使同步组的状态由停顿(quiesced )改为正常(normal)。&nbsp;&nbsp;<br />
SQL&gt; execute dbms_repcat.resume_master_activity('scott_mg',false); </div><img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/267823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2009-04-28 08:35 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2009/04/28/267823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>创建oracle dblink 过程[转]</title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/04/27/267751.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Mon, 27 Apr 2009 09:14:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/04/27/267751.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/267751.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/04/27/267751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/267751.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/267751.html</trackback:ping><description><![CDATA[&nbsp;俩台不同的数据库服务器，从一台数据库服务器的一个用户读取另一台数据库服务器下的某个用户的数据，这个时候可以使用dblink。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 其实dblink和数据库中的view差不多，建dblink的时候需要知道待读取数据库的ip地址，ssid以及数据库用户名和密码。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建可以采用两种方式：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、已经配置本地服务<br />
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3"><font style="font-weight: bold; color: #990000">以下是引用片段：</font><br />
            　　create&nbsp;public&nbsp;database <br />
            　　link&nbsp;fwq12&nbsp;connect&nbsp;to&nbsp;fzept <br />
            　　identified&nbsp;by&nbsp;neu&nbsp;using&nbsp;'fjept'</td>
        </tr>
    </tbody>
</table>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CREATE &nbsp;DATABASE &nbsp;LINK +&nbsp; 数据库链接名（<span style="font-size: 8pt">以后就通过这个名字来进行调用远程数据库的内容</span>。）CONNECT TO&nbsp;+ 用户名（<span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">是用来连接到远程数据库的合法</span><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?="">Oracle</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">用户名</span>） IDENTIFIED BY + &nbsp;密码（<span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">为该用户连接到</span><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?="">Oracle</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">时候的合法密码</span>） USING +&nbsp; 本地配置的数据的实例名（<span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">为该</span><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?="">Oracle</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">数据库所在的主机上的</span><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?="">tnsnames.ora</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">文件里边定义的数据库连接串</span>）;<br />
在安装目录下，如：E:\Oracle\Ora81\network\ADMIN下用写字板或记事本打开TNSNAME.ORA文件，<br />
<br />
SELECT COUNT(*) FROM TABLE_NAME@DB_LINK WHERE WHERE_CLAUSE;//<span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">查阅远程数据库的内容。<br />
</span><span style="font-size: 10pt">UPDATE <span style="color: #000000"><span style="font-size: 10pt"><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#84;&#69;&#83;&#84;&#46;&#84;&#69;&#83;&#84;&#64;&#68;&#66;&#95;&#76;&#73;&#78;&#75;"><font size="4">TEST.TEST@DB_LINK</font></a><font size="4"> </font></span><font size="4">SET SO_NBR=NEW_SO_NBR WHERE WHERE_CLAUSE</font></span><font size="4">;//</font><span style="mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;=""><font size="4"><span style="font-size: 8pt"><span style="mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;=""><font size="4">修改远程数据库的内容。</font></span></span><br />
</font></span></span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">在实际使用过程中，还可以通过为这个远程表建立一个同义词来进一步增加透明性，使该数据库连接串对于程序和开发人员来讲完全透明。</span><font face="宋体"><font size="4"><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?=""> <br />
CREATE SYNONYM TABLE_NAME FOR TABLE_NAME@DB_LINK;&nbsp;<br />
</span></font></font><br />
&nbsp;&nbsp;&nbsp;&nbsp; 2、未配置本地服务<br />
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3"><font style="font-weight: bold; color: #990000">以下是引用片段：</font><br />
            create&nbsp;database&nbsp;link&nbsp;linkfwq <br />
            　　&nbsp;connect&nbsp;to&nbsp;fzept&nbsp;identified&nbsp;by&nbsp;neu <br />
            　　&nbsp;using&nbsp;'(DESCRIPTION&nbsp;= <br />
            　　&nbsp;(ADDRESS_LIST&nbsp;= <br />
            　　&nbsp;(ADDRESS&nbsp;=&nbsp;(PROTOCOL&nbsp;=&nbsp;TCP)(HOST&nbsp;=&nbsp;10.142.202.12)(PORT&nbsp;=&nbsp;1521)) <br />
            　　&nbsp;) <br />
            　　&nbsp;(CONNECT_DATA&nbsp;= <br />
            　　&nbsp;(SERVICE_NAME&nbsp;=&nbsp;fjept) <br />
            　　&nbsp;) <br />
            　　&nbsp;)';</td>
        </tr>
    </tbody>
</table>
<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; host＝数据库的ip地址，service_name＝数据库的ssid。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其实两种方法配置dblink是差不多的，我个人感觉还是第二种方法比较好，这样不受本地服务的影响。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据库全局名称可以用以下命令查出<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT * FROM GLOBAL_NAME;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查询远端数据库里的表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT &#8230;&#8230; FROM 表名@数据库链接名;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查询、删除和插入数据和操作本地的数据库是一样的，只不过表名需要写成&#8220;表名@dblink服务器&#8221;而已。</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 附带说下同义词创建:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CREATE SYNONYM同义词名FOR 表名;<br />
&nbsp;&nbsp;&nbsp;&nbsp; CREATE SYNONYM同义词名FOR 表名@数据库链接名;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 删除dblink：DROP&nbsp; PUBLIC&nbsp; DATABASE&nbsp; LINK linkfwq。<br />
<br />
如何知道当前用户、当前系统中有哪些数据库连接串？<font face="宋体"><font size="4"><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?=""> <br />
SELECT * FROM USER_DB_LINKS; <br />
</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">这个查询会给出当前用户的数据库联接的名字、联接用户名、联接密码、要连接的主机以及创建时期。</span></font></font><font face="宋体"><font size="4"><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?=""> <br />
SELECT * FROM DBA_DB_LINKS; <br />
</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">这个查询会给出当前系统中所有的数据库联接的创建用户、联接用户名、要连接的主机以及创建时期。</span></font></font><font face="宋体"><font size="4"><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?=""> <br />
SELECT * FROM V$DBLINK; <br />
</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">这个查询会给出当前打开的数据库联接。</span></font></font><font face="宋体"><font size="4"><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?=""> <br />
4</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">。常见错误处理：</span></font></font><font face="宋体"><font size="4"><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?=""> <br />
//////////////////////////////////////////////////////////////// <br />
1</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">。不能分解服务名：</span></font></font><font face="宋体"><font size="4"><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?=""> <br />
</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">登录到远程服务器上的结果：</span></font></font><font face="宋体"><font size="4"><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?=""> <br />
net97&gt;show parameters global_name <br />
<br />
NAME TYPE VALUE <br />
------------------------------------ ------- ------------------------------ <br />
global_names boolean FALSE <br />
net97&gt; <br />
net97&gt;drop database link jinhua; <br />
<br />
</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">数据库链接已丢弃。</span></font></font><font face="宋体"><font size="4"><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?=""> <br />
<br />
net97&gt;create database link jinhua <br />
2 connect to username identified by password <br />
3 using 'jinhua'; <br />
<br />
</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">数据库链接已创建。</span></font></font><font face="宋体"><font size="4"><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?=""> <br />
<br />
net97&gt;select * from so@jinhua; <br />
select * from so@jinhua <br />
* <br />
ERROR </span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">位于第</span><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?=""> 1 </span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">行</span></font></font><font face="宋体"><font size="4"><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?="">: <br />
ORA-12154: TNS:</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">不能分解服务名称</span></font></font><font face="宋体"><font size="4"><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?="">. <br />
net97&gt;conn username/password@jinhua; <br />
</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">已连接。</span></font></font><font face="宋体"><font size="4"><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?=""> <br />
net97&gt; <br />
</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">这是因为在</span><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?="">Oracle</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">数据库所在的</span><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?="">Unix</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">主机上面的</span><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?="">tnsnames.ora</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">文件里边没有对</span><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?="">jinhua</span><span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: "  ?="" mso-hansi-font-family:=""  ??="" ?;="">这个服务名的定义。所以不能分解服务名。</span></font></font><span lang="EN-US" style="font-size: 9pt; font-family: "  ?;="" mso-bidi-font-size:=""  11.0pt?=""><font face="宋体" size="4">&nbsp;<br />
</font></span><br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果创建全局dblink，必须使用systm或sys用户，在database前加public。<br />
参考资料:<br />
&nbsp; <a href="http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14231/ds_admin.htm#i1008271">http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14231/ds_admin.htm#i1008271</a><br />
</p><img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/267751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2009-04-27 17:14 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2009/04/27/267751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL常用命令</title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/02/19/255653.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Thu, 19 Feb 2009 13:54:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/02/19/255653.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/255653.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2009/02/19/255653.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/255653.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/255653.html</trackback:ping><description><![CDATA[一、数据库的连接等：<br />
<br />
1.开启MySQL服务：<br />
&nbsp;&nbsp;&nbsp;在运行中net start mysql；<br />
2.关闭MySQL服务：<br />
&nbsp;&nbsp; 在运行中net stop mysql；<br />
3.连接MySQL：<br />
&nbsp;&nbsp; MySQL -u用户名 -p用户密码；进入后提示 MySQL&gt;；<br />
4.连接远程MySQL：<br />
&nbsp;&nbsp; MySQL -hIP地址 -u用户名 -p用户密码；<br />
5.推出MySQL：<br />
&nbsp;&nbsp; mysql&gt; quit；&nbsp; exit&nbsp; 加Enter；<br />
6.修改密码：<br />
&nbsp;&nbsp; mysqladmin -u用户名 -p旧密码 password 新密码；<br />
7.版本查询时间显示：<br />
&nbsp;&nbsp; mysql&gt; select version(),current_date(); <br />
<br />
二、操作数据库：<br />
<br />
1:使用SHOW语句找出在服务器上当前存在什么数据库： <br />
&nbsp; mysql&gt; SHOW DATABASES; <br />
2:创建一个数据库MYSQLDATA<br />
&nbsp; mysql&gt; CREATE DATABASE MYSQLDATA; <br />
3:选择你所创建的数据库 <br />
&nbsp; mysql&gt; USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功！)<br />
4:查看现在的数据库中存在什么表 <br />
&nbsp; mysql&gt; SHOW TABLES;<br />
5:创建一个数据库表<br />
&nbsp; mysql&gt; CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));<br />
6:显示表的结构： <br />
&nbsp; mysql&gt; DESCRIBE MYTABLE; <br />
7:往表中加入记录 <br />
&nbsp; mysql&gt; insert into MYTABLE values ("hyq","M"); <br />
8:用文本方式将数据装入数据库表中（例如D:/mysql.txt）<br />
&nbsp; mysql&gt; LOAD DATA LOCAL INFILE "D:/mysql.txt" INTO TABLE MYTABLE;<br />
9:导入.sql文件命令（例如D:/mysql.sql）<br />
&nbsp; mysql&gt;use database;<br />
&nbsp; mysql&gt;source d:/mysql.sql; <br />
10:删除表<br />
&nbsp; mysql&gt;drop TABLE MYTABLE; <br />
11:清空表<br />
&nbsp; mysql&gt;delete from MYTABLE;<br />
12:更新表中数据<br />
&nbsp; mysql&gt;update MYTABLE set sex="f" where name='hyq';<br />
13.命令的取消：当命令输入错误而又无法改变（多行语句情形）时，只要在分号出现前就可以用 c来取消该条命令<br />
&nbsp; mysql&gt; select <br />
&nbsp; -&gt; user() <br />
&nbsp; -&gt; c <br />
&nbsp; mysql&gt;<br />
14.使用\G按行垂直显示结果：如果一行很长，需要这行显示的话，看起结果来就非常的难受。在SQL语句或者命令后使用\G而不是分号结尾，可以将每一行的值垂直输出。这个可能也是大家对于MySQL最熟悉的区别于其他数据库工具的一个特性了。<br />
<div class="hl-main">mysql&gt; select * from db_archivelog\G<br />
*************************** 1. row ***************************<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;id: 1<br />
&nbsp;check_day: 2008-06-26<br />
&nbsp;&nbsp; db_name: TBDB1<br />
&nbsp; arc_size: 137<br />
&nbsp;&nbsp; arc_num: 166<br />
per_second: 1.6<br />
&nbsp; avg_time: 8.7</div>
15.使用tee保存运行结果到文件：可以将命令行中的结果保存到外部文件中。如果指定已经存在的文件，则结果会附加到文件中。<br />
<div class="hl-main">mysql&gt; tee output.txt<br />
Logging to file 'output.txt'<br />
或者<br />
mysql&gt; \T output.txt<br />
Logging to file 'output.txt'<br />
<br />
mysql&gt; notee<br />
Outfile disabled.<br />
或者<br />
mysql&gt; \t<br />
Outfile disabled.</div>
<br />
<br />
<img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/255653.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2009-02-19 21:54 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2009/02/19/255653.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL中CASE条件表达式</title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/11/13/240328.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Thu, 13 Nov 2008 07:35:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/11/13/240328.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/240328.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/11/13/240328.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/240328.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/240328.html</trackback:ping><description><![CDATA[<p><acronym class="ACRONYM">SQL</acronym> <tt class="TOKEN">CASE</tt> 表达式是一种通用的条件表达式，类似于其它语言中的 if/else 语句。 </p>
<pre class="SYNOPSIS">CASE WHEN <tt class="REPLACEABLE"><em>condition</em></tt> THEN <tt class="REPLACEABLE"><em>result</em></tt>
[<span class="OPTIONAL">WHEN ...</span>]
[<span class="OPTIONAL">ELSE <tt class="REPLACEABLE"><em>result</em></tt></span>]
END</pre>
<p><tt class="TOKEN">CASE</tt> 子句可以用于任何表达式可以有效存在的地方。 <tt class="REPLACEABLE"><em>condition</em></tt> 是一个返回<tt class="TYPE">boolean</tt> 的表达式。 如果结果为真，那么 <tt class="TOKEN">CASE</tt> 表达式的结果就是符合条件的 <tt class="REPLACEABLE"><em>result</em></tt>。 如果结果为假，那么以相同方式搜寻任何随后的 <tt class="TOKEN">WHEN</tt> 子句。 如果没有 <tt class="TOKEN">WHEN</tt> <tt class="REPLACEABLE"><em>condition</em></tt> 为真，那么 case 表达式的结果就是在 <tt class="TOKEN">ELSE</tt> 子句里的值。 如果省略了 <tt class="TOKEN">ELSE</tt> 子句而且没有匹配的条件， 结果为 NULL。 </p>
<p>例子： </p>
<pre class="SCREEN">SELECT * FROM test;
a
---
1
2
3
SELECT a,
CASE WHEN a=1 THEN 'one'
WHEN a=2 THEN 'two'
ELSE 'other'
END
FROM test;
a | case
---+-------
1 | one
2 | two
3 | other</pre>
<p>&nbsp;</p>
<p>所有 <tt class="REPLACEABLE"><em>result</em></tt> 表达式的数据的类型都必须可以转换成单一的输出类型。&nbsp; </p>
<p>下面这个<span class="QUOTE">"简单的"</span> <tt class="TOKEN">CASE</tt> 表达式是上面的通用形式的一个特殊的变种。 </p>
<pre class="SYNOPSIS">CASE <tt class="REPLACEABLE"><em>expression</em></tt>
WHEN <tt class="REPLACEABLE"><em>value</em></tt> THEN <tt class="REPLACEABLE"><em>result</em></tt>
[<span class="OPTIONAL">WHEN ...</span>]
[<span class="OPTIONAL">ELSE <tt class="REPLACEABLE"><em>result</em></tt></span>]
END</pre>
<p>先计算 <tt class="REPLACEABLE"><em>expression</em></tt> 的值， 然后与所有在<tt class="TOKEN">WHEN</tt> 子句里声明的 <tt class="REPLACEABLE"><em>value</em></tt> 对比，直到找到一个相等的。 如果没有找到匹配的，则返回在 <tt class="TOKEN">ELSE</tt> 子句里的 <tt class="REPLACEABLE"><em>result</em></tt> （或者 NULL）。 这个类似于 C 里的 <code class="FUNCTION">switch</code> 语句。 </p>
<p>上面的例子可以用简单 <tt class="TOKEN">CASE</tt> 语法来写： </p>
<pre class="SCREEN">SELECT a,
CASE a WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
ELSE 'other'
END
FROM test;
a | case
---+-------
1 | one
2 | two
3 | other</pre>
<p>&nbsp;</p>
<p><tt class="TOKEN">CASE</tt> 表达式并不计算任何对于判断结果并不需要的子表达式。 比如，下面是一个可以避免被零除的方法： </p>
<pre class="PROGRAMLISTING">SELECT ... WHERE CASE WHEN x &lt;&gt; 0 THEN y/x &gt; 1.5 ELSE false END;</pre>
<pre class="PROGRAMLISTING"><p><font face="Courier New">例1：一道SQL语句面试题<br />
表内容：<br />
2005-05-09 胜<br />
2005-05-09 胜<br />
2005-05-09 负<br />
2005-05-09 负<br />
2005-05-10 胜<br />
2005-05-10 负<br />
2005-05-10 负<br />
<br />
如果要生成下列结果, 该如何写sql语句?<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  胜 负<br />
2005-05-09  2  2<br />
2005-05-10  1  2<br />
----------------------------------------------------------<br />
create table #tmp(rq varchar(10),shengfu nchar(1))<br />
<br />
insert into #tmp values('2005-05-09','胜')<br />
insert into #tmp values('2005-05-09','胜')<br />
insert into #tmp values('2005-05-09','负')<br />
insert into #tmp values('2005-05-09','负')<br />
insert into #tmp values('2005-05-10','胜')<br />
insert into #tmp values('2005-05-10','负')<br />
insert into #tmp values('2005-05-10','负')</font></p>
<p><font face="Courier New"><span style="color: #008000"><font face="Courier New">select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum(case when shengfu='负' then 1 else 0 end)'负' <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from #tmp group by rq<br />
</font></span>----------------------------------------------------------<br />
<br />
<br />
<br />
<br />
<br />
<br />
例2：表中有A B C三列,用SQL语句实现：当A列大于B列时选择A列否则选择B列，当B列大于C列时选择B列否则选择C列。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="color: #008000">select (case when a&gt;b then a else b end ),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(case when b&gt;c then b esle c end)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from table_name</span><br />
</font></p>
----------------------------------------------------------</pre>
<pre class="PROGRAMLISTING">例3：有一张表，里面有3个字段：语文，数学，英语。其中有3条记录分别表示语文70分，数学80分，英语58分，请用一条sql语句查询出这三条记录并按以下条件显示出来（并写出您的思路）：&nbsp;&nbsp;<br />
&nbsp;&nbsp; 大于或等于80表示优秀，大于或等于60表示及格，小于60分表示不及格。&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示格式：&nbsp;&nbsp;<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;<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;<br />
----------------------------------------------------------<br />
<span style="color: #008000">select<br />
&nbsp;&nbsp;&nbsp;&nbsp;(case when 语文&gt;=80 then '优秀'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when 语文&gt;=60 then '及格'<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; else '不及格' end) as 语文,<br />
&nbsp;&nbsp;&nbsp;&nbsp;(case when 数学&gt;=80 then '优秀'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when 数学&gt;=60 then '及格'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else '不及格' end) as 数学,<br />
&nbsp;&nbsp;&nbsp;&nbsp;(case when 英语&gt;=80 then '优秀'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 英语&gt;=60 then '及格'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else '不及格' end) as 英语,<br />
from table<br />
</span>----------------------------------------------------------------</pre><img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/240328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2008-11-13 15:35 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2008/11/13/240328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL小教程【转】</title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/11/12/240040.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Wed, 12 Nov 2008 03:22:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/11/12/240040.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/240040.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/11/12/240040.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/240040.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/240040.html</trackback:ping><description><![CDATA[<span style="color: red"><strong>一、SQL语言简介</strong> </span><br />
SQL是结构化查询语言(Structured Query Language)的缩写。这种语言允许我们对数据库进行复杂的查询。同时也提供了创建数据库的方法。SQL语言的使用范围非常广泛。许多数据库产品都支持SQL语言，这意味着如果我们学会了SQL语言，我们可以把这种知识运用到MS Access 或SQL Server, Oracle, DB2以及非常多的其它数据库中。<br />
&nbsp;<br />
SQL语言运用在关系型数据库中。一个关系型数据库把数据<a class="article" href="http://www.enet.com.cn/solution/" target="_blank">存储</a>在表（也称关系）中。每个数据库的主要组成就是一组表。每个表又由一组记录组成－－每条记录在表中有相同的结构，包含固定数量的具有一定类型的字段。<br />
&nbsp;<br />
下面我们来看一个实际的数据库中的表。该表的表名为cia，包含250多条记录，每个记录代表一个国家。表由5个字段组成，字段的值有的是字符串类型，有的是数字类型。 <br />
<br />
name region area population gdp <br />
---- ------ ------ ---------- ----------- <br />
Yemen Middle East 527970 14728474 23400000000 <br />
Zaire Africa 2345410 44060636 18800000000 <br />
Zambia Africa 752610 9445723 7900000000 <br />
Zimbabwe Africa 390580 11139961 17400000000 <br />
<br />
下面我们可以用一些SQL语句来查询这个表中我们该兴趣的数据。 <br />
<br />
1. 中国的GDP是多少？ <br />
<br />
查询用的SQL语句为： <br />
select gdp from cia <br />
where name='china' <br />
<br />
查询结果为： <br />
4800000000000 <br />
<br />
2. 给出每个地区的国家数和人口总数。并且按地区的人口数从多到少排序。 <br />
<br />
<br />
查询用的SQL语句为： <br />
<br />
SELECT region, COUNT(name), SUM(population) <br />
FROM cia <br />
GROUP BY region <br />
ORDER BY 3 DESC <br />
<br />
查询结果为： <br />
region COUNT(name) SUM(population) <br />
------ ----------- --------------- <br />
Asia 14 2963031109 <br />
Africa 59 793382933 <br />
Europe 43 580590872 <br />
.... <br />
<br />
怎么样，对SQL语言有了基本的了解了吧，同时对数据库，表，记录，字段等一系列在SQL语言中常用的 <br />
感念也有大概的认识吧。如果不是很清楚也没关系，在接下来的内容中我们从SQL语言中最简单 <br />
的内容逐步给大家作介绍，并提供丰富的练习让大家实际操作。<br />
<br />
<strong style="color: red">二、最基本的SELECT 命令</strong><br />
select命令或语句用来获取一个或多个表中的记录信息，一般配合where子句使用，来取得满足某些条件的记录，如果没有where子句，将返回所有记录。一般的使用方式如下： <br />
<br />
SELECT attribute-list <br />
FROM table-name <br />
WHERE condition <br />
<br />
attribute-list：返回内容的列表，每个内容用逗号分开。这里的内容可以为字段，包含字段的表达式或更复杂的子查询。 <br />
<br />
table-name：表名，更复杂时可以为子查询。 <br />
<br />
condition：条件表达式，用来筛选满足该条件的记录。 <br />
<br />
在本节中我们使用下表作为试验之用： <br />
<br />
bbc(name, region, area, population, gdp) <br />
表名为bbc，该表有５个字段（columns），又称为属性（attributes） . <br />
name ：国家名 <br />
region:　国家所在的地区 <br />
area: 面积 <br />
population ：人口 <br />
gdp：国民生产总值 <br />
<br />
SQL实例： <br />
1、选出所有国家名，地区和人口 <br />
SELECT name, region, population FROM bbc <br />
<br />
<br />
2、给出France的人口数 <br />
SELECT population FROM bbc <br />
WHERE name = 'France' <br />
<br />
3、哪些国家的名称以字符D开始？ <br />
SELECT name FROM bbc <br />
WHERE name LIKE 'D%' <br />
<br />
4、 国土大国（面积大于五百万平方公里）的国名和人口密度 <br />
SELECT name, population/area FROM bbc <br />
WHERE area &gt; 5000000 <br />
<br />
5、给出一些小（面积小于2000平方公里）而富有(国民生产总值大于50亿)的国家 <br />
SELECT name , region <br />
FROM bbc <br />
WHERE area &lt; 2000 <br />
AND gdp &gt; 5000000000<br />
<br />
<span style="color: red"><strong>三、SELECT命令中的GROUP BY 和 HAVING 子句 </strong></span><br />
在介绍GROUP BY 和 HAVING 子句前，我们必需先讲讲sql语言中一种特殊的函数：聚合函数，例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。 <br />
<br />
SELECT SUM(population) FROM bbc <br />
<br />
这里的SUM作用在所有返回记录的population字段上，结果就是该查询只返回一个结果，即所有国家的总人口数。 <br />
<br />
<br />
通过使用GROUP BY 子句，可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。 <br />
当你指定 GROUP BY region 时， 属于同一个region（地区）的一组数据将只能返回一行值． <br />
也就是说，表中所有除region（地区）外的字段，只能通过 SUM, COUNT等聚合函数运算后返回一个值． <br />
<br />
HAVING子句可以让我们筛选成组后的各组数据． <br />
WHERE子句在聚合前先筛选记录．也就是说作用在GROUP BY 子句和HAVING子句前． <br />
而 HAVING子句在聚合后对组记录进行筛选。 <br />
<br />
让我们还是通过具体的实例来理解GROUP BY 和 HAVING 子句，还采用第三节介绍的bbc表。 <br />
<br />
SQL实例： <br />
<br />
1、显示每个地区的总人口数和总面积． <br />
SELECT region, SUM(population), SUM(area) <br />
FROM bbc <br />
GROUP BY region <br />
<br />
先以region把返回记录分成多个组，这就是GROUP BY的字面含义。分完组后，然后用聚合函数对每组中的不同字段（一或多条记录）作运算。 <br />
<br />
2、 显示每个地区的总人口数和总面积．仅显示那些面积超过1000000的地区。 <br />
<br />
SELECT region, SUM(population), SUM(area) <br />
FROM bbc <br />
GROUP BY region <br />
HAVING SUM(area)&gt;1000000 <br />
<br />
在这里，我们不能用where来筛选超过1000000的地区，因为表中不存在这样一条记录。 <br />
相反，HAVING子句可以让我们筛选成组后的各组数据．<br />
<br />
<span style="color: red"><strong>四、嵌套SELECT语句</strong></span><br />
嵌套SELECT语句也叫子查询，形如： <br />
<br />
SELECT name FROM bbc WHERE region = <br />
(SELECT region FROM bbc WHERE name = 'Brazil') <br />
<br />
一个 SELECT 语句的查询结果可以作为另一个语句的输入值。 <br />
上面的SQL语句作用为获得和'Brazil'（巴西）同属一个地区的所有国家。 <br />
<br />
子查询不但可以出现在Where子句中，也可以出现在from子句中，作为一个临时表使用，也可以出现在select list中，作为一个字段值来返回。本节我们仅介绍的Where子句中的子查询。 <br />
<br />
在Where子句中使用子查询，有一个在实际使用中容易犯的错在这里说明一下。 <br />
<br />
通常，就像上面的例子一样，嵌套的语句总是和一个值进行比较。语句 (SELECT region FROM bbc WHERE name = 'Brazil') 应该仅返回一个地区，即 'Americas'. 但如果我们在表中再插入一条地区为欧洲，国家名称为Brazil的记录，那会发生什么情况？ <br />
<br />
这将会导致语句的运行时错误．因为这个SQL语句的语法是正确的，所以数据库引擎就开始执行，但当执行到外部的语句时就出错了。因为这时的外部语句就像好像是 SELECT name FROM bbc WHERE region = ('Americas', 'Europe')，这个语句当然报错了。 <br />
<br />
那么有没有办法解决这个问题呢，当然有。有一些SQL查询条件允许对列表值（即多个值）进行操作。 <br />
例如"IN" 操作符，可以测试某个值是否在一个列表中。 <br />
<br />
下面的语句就可以安全的执行而不出错，不管表中有多少条包含Brazils的记录 <br />
<br />
SELECT name FROM bbc WHERE region IN <br />
(SELECT region FROM bbc WHERE name = 'Brazil') <br />
<br />
OK， <br />
<br />
让我们再看看一些具体的实例， <br />
<br />
1、给出人口多于Russia（俄国）的国家名称 <br />
SELECT name FROM bbc <br />
WHERE population&gt; <br />
(SELECT population FROM bbc <br />
WHERE name='Russia') <br />
<br />
2、给出'India'（印度）, 'Iran'（伊朗）所在地区的所有国家的所有信息<br />
SELECT * FROM bbc <br />
WHERE region IN <br />
(SELECT region FROM bbc <br />
WHERE name IN ('India','Iran')) <br />
<br />
3、给出人均GDP超过'United Kingdom'（英国）的欧洲国家． <br />
<br />
SELECT name FROM bbc <br />
WHERE region='Europe' AND gdp/population &gt; <br />
(SELECT gdp/population FROM bbc <br />
WHERE name='United Kingdom')<br />
<br />
为了从两个或多个表中选出数据，我们一般使用表连接来实现这个功能。 <br />
<br />
<span style="color: red"><strong>五、SELECT语句中的表连接(join) </strong></span><br />
从这里介绍join（连接）的概念. 为此我们准备了两个试验用表： album（专辑表） 和 track（曲目表）. <br />
<br />
专辑表：包含200首来自Amazon的音乐CD的概要信息。 <br />
album(asin, title, artist, price, release, label, rank) <br />
<br />
曲目表：每张专辑中的曲目（因为是音乐CD，所以也可叫歌曲）的详细信息。 <br />
track(album, dsk, posn, song) <br />
<br />
SQL短语 FROM album JOIN track ON album.asin=track.album 表示连接album和track表。其中，album.asin表示专辑的惟一标识号，track.album表示曲目表中和专辑关联的专辑号。 <br />
连接后，得到一个临时表，该临时表中每条记录包含的字段由两部分组成，除了专辑表中的对应字段album(title, artist ...)，还包含曲目表的所有字段track(album, disk, posn and song)。 <br />
<br />
有了这张临时表，很多查询就容易实现了。 <br />
<br />
看看一些具体的实例， <br />
<br />
1、列出歌名为'Alison'的专辑名称和作者 <br />
<br />
SELECT title, artist <br />
FROM album JOIN track <br />
ON (album.asin=track.album) <br />
WHERE song = 'Alison' <br />
<br />
显然，歌名、专辑名称和作者分别在两个表中，必需使用表连接来完成这个查询。 <br />
<br />
<br />
2、哪个artist录制了歌曲'Exodus' <br />
<br />
SELECT artist <br />
FROM album JOIN track ON (asin=album) <br />
WHERE song = 'Exodus' <br />
<br />
用作连接的两个字段asin，album因为在两个表中都是惟一的，所以不一定要加表名作为前缀。 <br />
但为了方便理解，建议使用前缀，形如：album.asin=track.album <br />
<br />
3、列出曲目表中所有属于'Blur'专辑的歌曲 <br />
<br />
SELECT song <br />
FROM album JOIN track ON (asin=album) <br />
WHERE title = 'Blur' <br />
<br />
如果我们把　album JOIN track ON (asin=album)　看成一个临时表的话，join的概念就很好理解了。<br />
<br />
上节我们介绍了表连接，更确切的说是inner joins內连接． <br />
內连接仅选出两张表中互相匹配的记录．因此，这会导致有时我们需要的记录没有包含进来。 <br />
为更好的理解这个概念，我们介绍两个表作演示。苏格兰议会中的政党表(party)和议员表(msp)。 <br />
<br />
party(Code,Name,Leader) <br />
Code: 政党代码 <br />
Name: 政党名称 <br />
Leader: 政党领袖 <br />
<br />
msp(Name,Party,Constituency) <br />
Name: 议员名 <br />
Party: 议员所在政党代码 <br />
Constituency: 选区 <br />
<br />
<span style="color: red"><strong>六、SELECT语句中的左连接、右连接和全连接</strong></span><br />
在介绍左连接、右连接和全连接前，有一个数据库中重要的概念要介绍一下，即空值(NULL)。 <br />
<br />
有时表中，更确切的说是某些字段值，可能会出现空值, 这是因为这个数据不知道是什么值或根本就不存在。 <br />
空值不等同于字符串中的空格，也不是数字类型的0。因此，判断某个字段值是否为空值时不能使用=,&lt;&gt;这些 <br />
判断符。必需有专用的短语：IS NULL 来选出有空值字段的记录，同理，可用 IS NOT NULL 选出不包含空值的记录。 <br />
<br />
例如：下面的语句选出了没有领导者的政党。（不要奇怪，苏格兰议会中确实存在这样的政党） <br />
<br />
SELECT code, name FROM party <br />
WHERE leader IS NULL <br />
<br />
又如：一个议员被开除出党，看看他是谁。(即该议员的政党为空值) <br />
<br />
SELECT name FROM msp <br />
WHERE party IS NULL <br />
<br />
好了，让我们言归正传，看看什么叫左连接、右连接和全连接。 <br />
<br />
A left join（左连接）包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。 <br />
同理，也存在着相同道理的 right join（右连接），即包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。而full join(全连接)顾名思义，左右表中所有记录都会选出来。 <br />
<br />
讲到这里，有人可能要问，到底什么叫：包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。 <br />
Ok,我们来看一个实例： <br />
<br />
SELECT msp.name, party.name FROM msp JOIN party ON party=code <br />
<br />
这个是我们上一节所学的Join(注意：也叫inner join)，这个语句的本意是列出所有议员的名字和他所属政党。 <br />
你可以在　http://sqlzoo.cn/4.htm 亲自执行一下该语句，看看结果是什么。 <br />
<br />
很遗憾，我们发现该查询的结果少了两个议员：Canavan MSP, Dennis。为什么，因为这两个议员不属于任和政党，即他们的政党字段(Party)为空值。那么为什么不属于任何政党就查不出来了？这是因为空值在作怪。因为议员表中政党字段(Party)的空值在政党表中找不到对应的记录作匹配，即FROM msp JOIN party ON party=code　没有把该记录连接起来，而是过滤出去了。在该短语中，msp在Join的左边，所有称为左表。party在Join的右边，所有称为右表。 <br />
<br />
Ok,现在再看看这句话，&#8220;包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录&#8221;，意思应该很明白了吧。执行下面这个语句，那两个没有政党的议员就漏不了了。 <br />
<br />
SELECT msp.name, party.name FROM msp LEFT JOIN party ON party=code <br />
<br />
关于右连接,看看这个查询就明白了： <br />
<br />
SELECT msp.name, party.name FROM msp RIGHT JOIN party ON msp.party=party.code <br />
<br />
这个查询的结果列出所有的议员和政党，包含没有议员的政党，但不包含没有政党的议员。 <br />
<br />
那么既要包含没有议员的政党，又要包含没有政党的议员该怎么办呢，对了，全连接(full join)。 <br />
<br />
SELECT msp.name, party.name FROM msp FULL JOIN party ON msp.party=party.code<br />
<br />
<span style="color: red"><strong>七、SELECT语句中的自连接<br />
</strong></span>到目前为止，我们连接的都是两张不同的表，那么能不能对一张表进行自我连接呢？答案是肯定的。有没有必要对一张表进行自我连接呢？答案也是肯定的。 <br />
<br />
表的别名： <br />
一张表可以自我连接。进行自连接时我们需要一个机制来区分一个表的两个实例。 <br />
在FROM clause（子句）中我们可以给这个表取不同的别名， 然后在语句的其它需要使用到该别名的地方 <br />
用dot（点）来连接该别名和字段名。 <br />
<br />
我们在这里同样给出两个表来对自连接进行解释。 <br />
爱丁堡公交线路， <br />
<br />
车站表： <br />
stops(id, name) <br />
<br />
公交线路表： <br />
route(num, company, pos, stop) <br />
<br />
1、对公交线路表route进行自连接。 <br />
<br />
SELECT * FROM route R1, route R2 <br />
WHERE R1.num=R2.num AND R1.company=R2.company <br />
<br />
我们route表用字段(num, company)来进行自连接． 结果是什么意思呢？你可以知道每条公交线路的任意两个可联通的车站。 <br />
<br />
2、用stop字段来对route（公交线路表）进行自连接。 <br />
<br />
SELECT * FROM route R1, route R2 <br />
WHERE R1.stop=R2.stop; <br />
<br />
查询的结果就是共用同一车站的所有公交线。这个结果对换乘是不是很有意义呢。 <br />
<br />
从这两个例子我们可以看出，自连接的语法结构很简单，但语意结果往往不是那么容易理解。就我们这里所列出的两个表，如果运用得当，能解决很多实际问题， <br />
例如，任意两个站点之间如何换乘。 <br />
<br />
SELECT R1.company, R1.num <br />
FROM route R1, route R2, stops S1, stops S2 <br />
WHERE R1.num=R2.num AND R1.company=R2.company <br />
AND R1.stop=S1.id AND R2.stop=S2.id <br />
AND S1.name='Craiglockhart' <br />
AND S2.name='Tollcross'<img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/240040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2008-11-12 11:22 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2008/11/12/240040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库技术【Link】</title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/11/12/239997.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Wed, 12 Nov 2008 01:50:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/11/12/239997.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/239997.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/11/12/239997.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/239997.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/239997.html</trackback:ping><description><![CDATA[SQL语句大全：<br />
<a href="http://www.pgsqldb.org/pgsqldoc-7.1c/sql-language.html">http://www.pgsqldb.org/pgsqldoc-7.1c/sql-language.html</a><br />
<br />
SQL Server优化：<br />
<a href="http://msdn2.microsoft.com/zh-cn/library/ms172984.aspx">http://msdn2.microsoft.com/zh-cn/library/ms172984.aspx</a><br />
<br />
数据库技术：<br />
<a href="http://kwklover.cnblogs.com/favorite/6741.html">http://kwklover.cnblogs.com/favorite/6741.html</a> <img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/239997.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2008-11-12 09:50 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2008/11/12/239997.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL语句整理[第三章]（学习笔记）</title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/09/27/231249.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Sat, 27 Sep 2008 02:43:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/09/27/231249.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/231249.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/09/27/231249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/231249.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/231249.html</trackback:ping><description><![CDATA[<strong>一、表连接<br />
</strong>cross&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回连接类型左右两侧的表中的所有行的所有组合。<br />
inner&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回连接类型左侧表和右侧表有相同值的所有行。<br />
left&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回左侧表中的所有行，以及与左侧表相匹配的右侧表中的值，如没有匹配的返回NULL。<br />
right&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回右侧表中的所有行，以及与右侧表相匹配的左侧表中的值，如没有匹配的返回NULL。<br />
full&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回左右两侧表的所有行。<br />
<br />
<span style="font-size: 12pt">1.下例是内连接的例子。该实例返回PUBS数据库的出版商及作者均在同一城市的出版商及作者信息。<br />
USE pubs<br />
方法一(内连接)：<br />
SELECT p.pub_id,p.pub_name,p.state,p.city,(a.au_fname+' '+a.au_lname) AS authorName <br />
FROM publishers p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INNER JOIN authors a ON p.city = a.city<br />
<br />
方法二(where子句)：<br />
SELECT p.pub_id,p.pub_name,p.state,p.city,(a.au_fname+' '+a.au_lname) AS authorName <br />
FROM publishers p,&nbsp;authors a&nbsp; WHERE&nbsp; p.city = a.city<br />
<br />
结果：<br />
p.pub_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;p.pub_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.state&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.city&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; authorName<br />
1389&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Algodata Infosystems&nbsp;&nbsp; &nbsp; &nbsp;CA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Berkeley&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Cheryl Carson&nbsp;<br />
1389&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Algodata Infosystems&nbsp;&nbsp; &nbsp; &nbsp;CA&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Berkeley&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Abraham Bennet&nbsp;<br />
<br />
2.下例是左联接的事例<br />
USE pubs<br />
SELECT p.pub_id,p.pub_name,p.state,p.city,(a.au_fname+' '+a.au_lname) <br />
AS authorName FROM publishers p&nbsp;&nbsp;&nbsp;LEFT JOIN authors a ON p.city = a.city<br />
<br />
结果：<br />
p.pub_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.pub_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.state&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p.city&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;authorName<br />
0736&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;New Moon Books&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;MA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Boston&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL<br />
0877&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Binnet &amp; Hardley&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;DC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Washington&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL<br />
1389&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Algodata Infosystems&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Berkeley&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cheryl Carson<br />
1389&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Algodata Infosystems&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Berkeley&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Abraham Bennet<br />
1622&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Five Lakes Publishing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;IL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Chicago&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL<br />
1756&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ramona Publishers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dallas&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL<br />
9901&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GGG&amp;G&nbsp;NULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; M黱&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL<br />
9952&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scootney Books&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; NY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;New York&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;NULL<br />
9999&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lucerne Publishing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;NULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Paris&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL<br />
<br />
3.下例是右联接的事例<br />
USE pubs<br />
SELECT p.pub_id,p.pub_name,p.state,p.city,(a.au_fname+' '+a.au_lname) <br />
AS authorName FROM publishers p&nbsp;&nbsp;&nbsp;RIGHT JOIN authors a ON p.city = a.city<br />
<br />
4.一下查询为外联接<br />
USE pubs<br />
SELECT (a.au_fname+' '+a.au_lname) AS authorName ,p.pub_name <br />
FROM&nbsp; authors a&nbsp;&nbsp;FULL OUTER&nbsp;JOIN publishers p ON p.city = a.city <br />
ORDER&nbsp; BY p.pub_name ASC,a.au_lname,a.au_fname ASC<br />
<br />
二、向表中插入数据<br />
USE northwind<br />
INSERT INTO Shippers (CompanyName,phone )<br />
Values (N'Snowflake Shpping' , N'(523)333-4443')<br />
<br />
三、修改表中的数据<br />
USE PUBS<br />
UPDATE titles SET price = price*2 WHERE pub_id IN <br />
(SELECT pub_id FROM publishers WHERE pub_name = 'New Moon Books')<br />
<br />
四、删除表中的数据<br />
DELETE salesWHERE title_id IN (SELECT title_id FROM titles WHERE type = 'business')<br />
<br />
五、创建视图<br />
USE pubs<br />
IF EXISTS (SELECT TABLE_NAME&nbsp; FROM INFORMATION_SCHEMA. VIEWS <br />
WHERE　TABLE_NAME&nbsp;＝'CA_VIEW')DROP VIEW CA View GO<br />
CREATE VIEW CA_VIEW&nbsp; AS&nbsp;<br />
SLECTE au_lname,au_fname,city,state FROM authors <br />
WHERE state = 'CA' WITH CHECK OPTION<br />
<br />
<br />
</span><img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/231249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2008-09-27 10:43 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2008/09/27/231249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL语句整理[第二章]（学习笔记）</title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/09/25/231109.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Thu, 25 Sep 2008 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/09/25/231109.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/231109.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/09/25/231109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/231109.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/231109.html</trackback:ping><description><![CDATA[<p><span style="font-size: 10pt"><span style="font-size: 12pt">&nbsp;废话少说用例子来说话。</span><br />
<span style="font-size: 14pt"><span style="font-size: 12pt"><span style="font-size: 10pt">1.create database sqltest&nbsp;&nbsp;&nbsp;&nbsp;//创建数据库；<br />
<br />
2.create table students (sno numeric(6,0)not null,sname varchar(8)not null,age numeric(3,0),<br />
sex char(2),bplace varchar(20),primary key(sno))&nbsp;&nbsp;<br />
&nbsp;//创建表students；<br />
<br />
3.create table courses (cno char(4)not null,cname varchar(10)not null,credit int)<br />
//创建表courses；<br />
<br />
4.alter table courses add primary key (cno)&nbsp;&nbsp;<br />
//为courses表的cno字段添加主键约束；<br />
<br />
5.create table enrools(sno numeric(6,0)not null,cno char(4)not null,grade int,primary key(sno,cno),<br />
foreign key(sno)references students(sno),foreign key(cno) references courses(cno))&nbsp;&nbsp;&nbsp;<br />
//创建表enrools，并添加主外键约束；<br />
<br />
6.select sno,sname,age into girl from students where sex='女'&nbsp;&nbsp;&nbsp;<br />
//根据Student表创建gril表，字段为3个；<br />
<br />
7.create view faculty as select sno,age,sname from students&nbsp;&nbsp;&nbsp;<br />
//根据Student表创建视图；<br />
<br />
8.create view grade_table as select sname,cname,grade from students,enrools,courses where students.sno=enrools.sno and courses.cno=enrools.cno&nbsp;&nbsp;&nbsp;<br />
//从Student、enrools、courses 表中产生一视图，包括sname、cname、grade；<br />
<br />
9.drop view grade_table&nbsp;&nbsp;&nbsp;&nbsp;<br />
//删除视图；<br />
<br />
10.select cno,cname from courses where credit=3&nbsp;&nbsp;<br />
//在表courses中找出3个学分的cno,cname；<br />
<br />
11.select * from students where age &gt;22&nbsp;&nbsp;&nbsp;&nbsp;<br />
//在Student表中找出age大于22的学生状况；<br />
<br />
12.select&nbsp;sname,age from students where sex='男' and bplace='北京'&nbsp;&nbsp;<br />
<em>//在Student表中找出北京籍男生的sname，age；</em><br />
<br />
13.select sno,sname,age from students age between 20 and 23 order by age&nbsp;&nbsp;&nbsp;<br />
&nbsp;//找出年龄在20~23之间的学生的sno,sname,age；<br />
<br />
14.select sname,sex from students where age&lt;23 and bplace in('北京','上海')&nbsp;&nbsp;&nbsp;<br />
&nbsp;//找出年龄小与23北京上海的学生的sname，sex；<br />
<br />
15.select * from students where sname like '张%'&nbsp;&nbsp;&nbsp;<br />
&nbsp;//找出姓张同学的状况；<br />
<br />
16.select sname from&nbsp;students where&nbsp; sno=(select sno from enrools where&nbsp; grade=95)&nbsp;&nbsp;&nbsp;<br />
&nbsp;//找出学分为95分的同学姓名，只限查找一条记录（子查询）；<br />
<br />
17.select sname from students where sno=any(select sno from enrools where grade&gt;90)<br />
或者select sname from students where sno in(select sno from enrools where grade&gt;90)&nbsp;&nbsp;&nbsp;&nbsp;<br />
//找出学分为90分的同学姓名，查找多条记录（子查询）；<br />
<br />
18.select sname,cno,grade from students,enrools where students.sno=enrools.sno&nbsp;&nbsp;&nbsp;<br />
//查找全部学生的姓名，课程号，成绩；（连接查询）；</span></span></span></span><span style="font-size: 10pt"><span style="font-size: 14pt"><span style="font-size: 12pt"><br />
</span></span><br />
</span><span style="font-size: 14pt"><span style="font-size: 12pt"><span style="font-size: 10pt">19.select sname,bplace,grade from student,enrools where bplace in ('北京','上海') and grade&gt;90 and students.sno=enrools.sno<br />
//找出籍贯是北京或上海，成绩在90分以上的学生sname，bpalce，grade；<br />
<br />
20.select&nbsp;min(age) from students&nbsp;&nbsp;&nbsp;&nbsp;<br />
//找出年龄最小的学生；<br />
<br />
21.select count(*) from students where age&lt;=22&nbsp;&nbsp;&nbsp;<br />
&nbsp;//找出年龄小于等于22的学生人数；<br />
<br />
22.select avg(grade),courses=count(*) from enrools group by son&nbsp;&nbsp;&nbsp;<br />
<em>&nbsp;</em>//找出学生的平均成绩和课程门数；<br />
<br />
23.select sname from students where age&gt;(select avg(age) from students)&nbsp;&nbsp;&nbsp;&nbsp;<br />
<em>//找出年龄大于平均年龄的学生名字</em>；<br />
<br />
24.select con,&nbsp;avg(grade), students=count(*)&nbsp; from enrools group by con ,having count(*)&gt;=3&nbsp;&nbsp;&nbsp;&nbsp;<br />
//找出个课程的平均成绩，按课程号分组，且只选择课程号超过3个的成绩；（<span style="background: #ffffff; color: #000000; font-family: '宋体'; mso-spacerun: 'yes'">GROUP&nbsp;BY子句把一个表按某一指定列（或一些列）上的值相等的原则分组，然后再对每组。<span style="background: #ffffff; color: #000000; font-family: '宋体'; mso-spacerun: 'yes'"><span style="background: #ffffff; color: #000000; font-family: '宋体'; mso-spacerun: 'yes'"><span style="background: #ffffff; color: #000000; font-family: '宋体'; mso-spacerun: 'yes'"><span style="background: #ffffff; color: #000000; font-family: '宋体'; mso-spacerun: 'yes'">GROUP&nbsp;BY&nbsp;子句总是跟在&nbsp;Where&nbsp;子句后面，当&nbsp;Where&nbsp;子句缺省时，它跟在&nbsp;FROM&nbsp;子句后面</span>。<span style="background: #ffffff; color: #000000; font-family: '宋体'; mso-spacerun: 'yes'">HAVING&nbsp;子句常用于在计算出聚集之后对行的查询进行控制。</span></span></span></span></span>）<br />
<br />
25.select sname,sno from students where not exists (select * from enrools where students.sno=enrools.sno)&nbsp;&nbsp;&nbsp;&nbsp;<br />
//查询没有任何课程学生的学号和姓名（</span><span style="font-size: 10pt"><span style="background: #ffffff; color: #000000; font-family: '宋体'; mso-spacerun: 'yes'"><span style="background: #ffffff; color: #000000; font-family: '宋体'; mso-spacerun: 'yes'">当一个子查询涉及到一个来自外部查询<span style="background: #ffffff; color: #000000; font-family: '宋体'; mso-spacerun: 'yes'">的列时，称为相关子查询correlated Subquery&nbsp;。相关子查询要用到存在测试谓词<span style="background: #ffffff; color: #000000; font-family: '宋体'; mso-spacerun: 'yes'">EXISTS&nbsp;和&nbsp;NOT&nbsp;EXISTS&nbsp;及&nbsp;ALL&nbsp;、&nbsp;ANY&nbsp;（&nbsp;SOME&nbsp;）等。</span></span></span>）;<br />
</span><br />
26.select * from students where bplace='北京' natural join (select * from enrools where grade&gt;=80)&nbsp;<br />
//查询籍贯是北京，成绩在80分以上的学生信息；<br />
<br />
27.inster into students values&nbsp;(009901,'张三',23,'男','北京')&nbsp;&nbsp;&nbsp;&nbsp;<br />
//插入学生信息；<br />
<br />
28.inster into teachers (tno,tname) select distinct sno,sname from students,enrools where students.sno=enrools .sno and grade&gt;90&nbsp;&nbsp;&nbsp;<br />
&nbsp;//&nbsp;把成绩大于90的同学加入到教师的表中，留校。<br />
<br />
29.update students set age=age+1&nbsp;&nbsp;<br />
//所有学生年龄加1；<br />
<br />
30.update enrolls set grade=0 where con='c1' and '张三'=(select sname from students where students.sno=enrools.sno)&nbsp;&nbsp;&nbsp;<br />
&nbsp;//把张三的成绩改为0；<br />
<br />
31.delete from students where age&gt;30&nbsp;&nbsp;&nbsp;<br />
&nbsp;//删除年龄大于30的学生资料；<br />
</span></span></span></p>
<p><span style="font-size: 10pt"><!--endfragment--><br />
<br />
</span></p>
<p class="p0" style="margin-top: 0pt; font-size: 12pt; margin-bottom: 0pt"><strong></strong><br />
<br />
<br />
<br />
<span style="font-size: 10pt">&nbsp;</span></p><img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/231109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2008-09-25 15:31 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2008/09/25/231109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL语句整理[第一章]（学习笔记）</title><link>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/09/23/230666.html</link><dc:creator>生命的绽放</dc:creator><author>生命的绽放</author><pubDate>Tue, 23 Sep 2008 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/09/23/230666.html</guid><wfw:comment>http://www.blogjava.net/hhhaaawwwkkk/comments/230666.html</wfw:comment><comments>http://www.blogjava.net/hhhaaawwwkkk/archive/2008/09/23/230666.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hhhaaawwwkkk/comments/commentRss/230666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hhhaaawwwkkk/services/trackbacks/230666.html</trackback:ping><description><![CDATA[<strong>一、对数据库的基本操作<br />
<br />
</strong>1.创建数据库：create database database-name；<br />
例：create database sales&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ON<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(NAME=sales_dat,FILENAME="c:\mssql\data\saledat.mdf",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SIZE=10,MAXSIZE=50,FIELGROWTH=5)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOG&nbsp;ON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(NAME=sales_log,FILENAME="c:\mssql\data\salelog.ldf",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SIZE=10mb,MAXSIZE=50MB,FIELGROWTH=5MB) <br />
<br />
2.修改数据库：alter database database-name；<br />
例：alter database sales<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add file(name=sales_dat_2,filename='c:\mssql\data\salesdat1.ndf',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size=5mb,maxsize=100mb,filegrowth=5mb)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify file(name=sales_dat,size=5mb) <span style="font-size: 10pt">【注：add file是向数据库添加文件；modify是扩展空间大小】<br />
<br />
</span>3.压缩数据库：dbcc shrinkdatabase(database-name,target-percent)；<br />
例：sp_dboption sales,'single user',true<span style="font-size: 10pt">【注：压缩前必须把用户设置为单用户】</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbcc shrinkdatabase(sales,25)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">【注：减小数据库大小到原来的25%】</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp_dboption sales,'single user',fales&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">【注：将数据库再设置为多用户模式】<br />
<br />
</span>4.删除数据库：drop database database-name；<br />
例：drop database sales<br />
<br />
<br />
二、对数据库表基本操作<br />
<br />
1.创数据库建表：create table table-name(col_name1 column_properties,<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;col_name2 column_properties,...)<br />
例：create table orders(OrderNo char(4) not null,OrderDate datetime not null,&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SalesExecCode char(4) not null)<br />
<br />
2.添加和删除列：alter table table_name(add column_name column_porperties)|(drop column column_name)<br />
例：alter table employee add department char(20) null<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alter table employee drop column department<span style="font-size: 10pt">【注：增加删除时不能加（）否则错误】<br />
<br />
</span>3.删除数据库表：drop table table_name<br />
例：drop table orders<br />
<br />
4.使用约束强制执行数据完整性：<br />
&nbsp;&nbsp;&nbsp;&nbsp;约束类型：(1)primary key约束：指定表中哪一列将充当主键。<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;例：create table student(studID identity(100,5) primary key,<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;name varchar(20) not null,&nbsp;telNo varchar(20))<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)foreing key约束：定义列值与另一个表的primary key相匹配的列。<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;例：create table studmark(examlID int not null,marks int not null,studID int not null,<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;primary key(examlID),foreign key(studID) references student)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3)unique约束：以确保列中不输入重复值。<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;例：alter table student add constraint unq_telNo unique(TelNo)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(4)check约束：根据指定值测试列中的输入值。每次在更新数据时都要测试。<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;例：alter table student add check(sex in&nbsp;('m','f'))<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;alter table student add check(age like('[0-9][0-9]'))<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(5)default约束：用于用户在没有提供列值时，提供一个自动添加的列值。<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;例：alter table studmarks add constraint df_examid default(101) for examid<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;<span style="font-size: 10pt">【注：不能在timestamp和有identity属性列中定义default约束】<br />
</span><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;(6)去除约束<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;例：alter table studmarks drop constraint df_examid<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;alter table table_name(表名)drop PRIMARY KEY CASCADE<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; alter table table_name(表名)drop constraint pk_name(主键名)CASCADE<img src ="http://www.blogjava.net/hhhaaawwwkkk/aggbug/230666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hhhaaawwwkkk/" target="_blank">生命的绽放</a> 2008-09-23 14:58 <a href="http://www.blogjava.net/hhhaaawwwkkk/archive/2008/09/23/230666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>