﻿<?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-憨厚生-随笔分类-pl/sql</title><link>http://www.blogjava.net/hulizhong/category/38316.html</link><description>----Java's Slave----&lt;br&gt;
***Java's Host***</description><language>zh-cn</language><lastBuildDate>Fri, 04 Dec 2009 15:07:51 GMT</lastBuildDate><pubDate>Fri, 04 Dec 2009 15:07:51 GMT</pubDate><ttl>60</ttl><item><title>聚集索引和非聚集索引</title><link>http://www.blogjava.net/hulizhong/archive/2009/12/04/304779.html</link><dc:creator>二胡</dc:creator><author>二胡</author><pubDate>Fri, 04 Dec 2009 07:19:00 GMT</pubDate><guid>http://www.blogjava.net/hulizhong/archive/2009/12/04/304779.html</guid><wfw:comment>http://www.blogjava.net/hulizhong/comments/304779.html</wfw:comment><comments>http://www.blogjava.net/hulizhong/archive/2009/12/04/304779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hulizhong/comments/commentRss/304779.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hulizhong/services/trackbacks/304779.html</trackback:ping><description><![CDATA[使用聚集索引 &nbsp; <br />
&nbsp; 聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿，后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序，因此一个表只能包含一个聚集索引。但该索引可以包含多个列（组合索引），就像电话簿按姓氏和名字进行组织一样。 &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后，便可以确保包含后续索引值的行在物理相邻。例如，如果应用程序执行的一个查询经常检索某一日期范围内的记录，则使用聚集索引可以迅速找到包含开始日期的行，然后检索表中所有相邻的行，直到到达结束日期。这样有助于提高此类查询的性能。同样，如果对从表中检索的数据进行排序时经常要用到某一列，则可以将该表在该列上聚集（物理排序），避免每次查询该列时都进行排序，从而节省成本。 &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 当索引值唯一时，使用聚集索引查找特定的行也很有效率。例如，使用唯一雇员 &nbsp; ID &nbsp; 列 &nbsp; emp_id &nbsp; 查找特定雇员的最快速的方法，是在 &nbsp; emp_id &nbsp; 列上创建聚集索引或 &nbsp; PRIMARY &nbsp; KEY &nbsp; 约束 &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 使用非聚集索引 &nbsp; <br />
&nbsp; 非聚集索引与课本中的索引类似。数据存储在一个地方，索引存储在另一个地方，索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储，而表中的信息按另一种顺序存储（这可以由聚集索引规定）。如果在表中未创建聚集索引，则无法保证这些行具有任何特定的顺序。 &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 与使用书中索引的方式相似，Microsoft&amp;reg; &nbsp; SQL &nbsp; Server&#8482; &nbsp; 2000 &nbsp; 在搜索数据值时，先对非聚集索引进行搜索，找到数据值在表中的位置，然后从该位置直接检索数据。这使非聚集索引成为精确匹配查询的最佳方法，因为索引包含描述查询所搜索的数据值在表中的精确位置的条目。如果基础表使用聚集索引排序，则该位置为聚集键值；否则，该位置为包含行的文件号、页号和槽号的行 &nbsp; ID &nbsp; (RID)。例如，对于在 &nbsp; emp_id &nbsp; 列上有非聚集索引的表，如要搜索其雇员 &nbsp; ID &nbsp; (emp_id)，SQL &nbsp; Server &nbsp; 会在索引中查找这样一个条目，该条目精确列出匹配的 &nbsp; emp_id &nbsp; 列在表中的页和行，然后直接转到该页该行。&nbsp;&nbsp; <br />
<br />
-------------------------------------------------------分割线-------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在工作中遇见了SQL性能问题,最后在同事的帮助下解决了此问题:就是通过建<strong>聚集索引</strong>的方式解决的!<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原来的SQL中有如下的where语句:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="gray"><span style="color: gray">and</span></font>&nbsp; <font color="fuchsia"><span style="color: fuchsia">datediff</span></font><font color="gray"><span style="color: gray">(</span></font><font color="fuchsia"><span style="color: fuchsia">day</span></font><font color="gray"><span style="color: gray">,</span></font> date1<font color="gray"><span style="color: gray">,</span></font><font color="red"><span style="color: red">'2009-1-01'</span></font><font color="gray"><span style="color: gray">)&lt;=</span></font>0&nbsp;
<p style="text-align: left" align="left"><font face="Courier New" size="2"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;<font color="gray"><span style="color: gray">&nbsp;&nbsp;&nbsp; and</span></font>&nbsp; <font color="fuchsia"><span style="color: fuchsia">datediff</span></font><font color="gray"><span style="color: gray">(</span></font><font color="fuchsia"><span style="color: fuchsia">day</span></font><font color="gray"><span style="color: gray">,</span></font> date1<font color="gray"><span style="color: gray">,</span></font><font color="red"><span style="color: red">'2009-2-03'</span></font><font color="gray"><span style="color: gray">)&gt;=</span></font>0&nbsp; </span></font></p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在date1建了<strong>聚集索引</strong>,SQL修改如下:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="gray"><span style="color: gray">and</span></font>&nbsp;<font color="fuchsia"><span style="color: fuchsia">&nbsp; </span></font>date1&gt;<font color="#808080">=</font><font color="red"><span style="color: red">'2009-1-01'</span></font>
<p style="text-align: left" align="left"><font face="Courier New" size="2"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;<font color="gray"><span style="color: gray">&nbsp;&nbsp;&nbsp; and</span></font>&nbsp; date1<font color="#808080">&lt;=</font><font color="red"><span style="color: red">'2009-2-03'</span></font>&nbsp; <br />
</span></font></p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 去掉了datediff函数,因为用函数的话就不会用到date1的<strong>聚集索引!</strong> 在此记录一下,以备后查!<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src ="http://www.blogjava.net/hulizhong/aggbug/304779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hulizhong/" target="_blank">二胡</a> 2009-12-04 15:19 <a href="http://www.blogjava.net/hulizhong/archive/2009/12/04/304779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)SQL 中 SET 和 SELECT 有什么区别？ </title><link>http://www.blogjava.net/hulizhong/archive/2009/12/02/304533.html</link><dc:creator>二胡</dc:creator><author>二胡</author><pubDate>Wed, 02 Dec 2009 09:10:00 GMT</pubDate><guid>http://www.blogjava.net/hulizhong/archive/2009/12/02/304533.html</guid><wfw:comment>http://www.blogjava.net/hulizhong/comments/304533.html</wfw:comment><comments>http://www.blogjava.net/hulizhong/archive/2009/12/02/304533.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hulizhong/comments/commentRss/304533.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hulizhong/services/trackbacks/304533.html</trackback:ping><description><![CDATA[<p>SQL Server 中对已经定义的变量赋值的方式用两种，分别是 SET 和 SELECT。<br />
对于这两种方式的区别，SQL Server 联机丛书中已经有详细的说明，但很多时候我们<br />
并没有注意，其实这两种方式还是有很多差别的。</p>
<p>SQL Server推荐使用 SET 而不是 SELECT 对变量进行赋值。<br />
当表达式返回一个值并对一个变量进行赋值时，推荐使用 SET 方法。</p>
<p>下表列出 SET 与 SELECT 的区别。请特别注意红色部分。 </p>
<p>
<table style="width: 509px; border-collapse: collapse; height: 117px" width="509" border="2">
    <tbody>
        <tr>
            <td></td>
            <td><strong>set</strong></td>
            <td><strong>select</strong></td>
        </tr>
        <tr>
            <td>同时对多个变量同时赋值</td>
            <td>不支持</td>
            <td>支持</td>
        </tr>
        <tr>
            <td>表达式返回多个值时</td>
            <td>出错</td>
            <td><span class="STYLE1"><font color="#ff0000">将返回的最后一个值赋给变量</font></span></td>
        </tr>
        <tr>
            <td>表达式未返回值</td>
            <td>变量被赋null值</td>
            <td style="width: 166px; height: 29px"><span class="STYLE1"><font color="#ff0000">变量保持原值</font></span></td>
        </tr>
    </tbody>
</table>
</p>
<p>下面以具体示例来说明问题：</p>
<p class="code">create table chinadba1(<br />
userid int ,<br />
addr varchar(128) <br />
)<br />
go<br />
insert into chinadba1(userid,addr) values(1,'addr1')<br />
insert into chinadba1(userid,addr) values(2,'addr2')<br />
insert into chinadba1(userid,addr) values(3,'addr3')<br />
go<br />
</p>
<p>表达式返回多个值时，使用 SET 赋值 </p>
<p class="code"><br />
declare @addr varchar(128)<br />
set @addr = (select addr from chinadba1)<br />
/*<br />
--出错信息为<br />
服务器: 消息 512，级别 16，状态 1，行 2<br />
子查询返回的值多于一个。当子查询跟随在 =、!=、&lt;、&lt;=、&gt;、&gt;= 之后，或子查询用作表达式时，这种情况是不允许的。<br />
*/<br />
go</p>
<p>表达式返回多个值时，使用 SELECT 赋值 </p>
<p class="code">declare @addr varchar(128)<br />
select @addr = addr from chinadba1<br />
print @addr --结果集中最后一个 addr 列的值<br />
--结果: addr3 <br />
go<br />
</p>
<p>表达式未返回值时，使用 SET 赋值 </p>
<p class="code">declare @addr varchar(128)<br />
set @addr = '初始值'<br />
set @addr = (select addr from chinadba1 where userid = 4 )<br />
print @addr --null值 <br />
go<br />
</p>
<p>表达式未返回值时，使用 SELECT 赋值 </p>
<p class="code">declare @addr varchar(128)<br />
set @addr = '初始值'<br />
select @addr = addr from chinadba1 where userid = 4<br />
print @addr --保持原值<br />
go<br />
</p>
<p>需要注意的是，SELECT 也可以将标量子查询的值赋给变量，如果标量子查询不返回值，则变量被置为 null 值。<br />
此时与 使用 SET 赋值是完全相同的<br />
对标量子查询的概念大家应该都觉得陌生，举个例子就能说明</p>
<p class="code">declare @addr varchar(128)<br />
set @addr = '初始值'<br />
--select addr from chinadba1 where userid = 4 为标量子查询语句<br />
select @addr = (select addr from chinadba1 where userid = 4) <br />
print @addr --null值<br />
go<br />
</p>
<p class="code">转自：<font face="Verdana">http://blog.csdn.net/shouyenet1/archive/2008/12/13/3511818.aspx</font></p><img src ="http://www.blogjava.net/hulizhong/aggbug/304533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hulizhong/" target="_blank">二胡</a> 2009-12-02 17:10 <a href="http://www.blogjava.net/hulizhong/archive/2009/12/02/304533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>case的一个用法--case 嵌套</title><link>http://www.blogjava.net/hulizhong/archive/2009/12/01/304396.html</link><dc:creator>二胡</dc:creator><author>二胡</author><pubDate>Tue, 01 Dec 2009 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/hulizhong/archive/2009/12/01/304396.html</guid><wfw:comment>http://www.blogjava.net/hulizhong/comments/304396.html</wfw:comment><comments>http://www.blogjava.net/hulizhong/archive/2009/12/01/304396.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hulizhong/comments/commentRss/304396.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hulizhong/services/trackbacks/304396.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 在工作中,有如下需求.通过case的嵌套解决了此问题!特此记录一下!(我用的是sql server 2005)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;
<p>在查询的时候，有这样的一个需求<br />
数据库内容如下：<br />
<strong>iD&nbsp;&nbsp;description<br />
</strong><br />
1&nbsp;&nbsp;&nbsp;&nbsp; TableClassA.getName()<br />
2&nbsp;&nbsp; &nbsp; TableClassB.getName(),exception<br />
3&nbsp;&nbsp;&nbsp;&nbsp; TableClassC,getName()<br />
4&nbsp;&nbsp;&nbsp;&nbsp; TableClassD,getName().null</p>
<p>我想查询输入以下结果：<br />
<strong>iD&nbsp;&nbsp;description<br />
</strong><br />
1&nbsp;&nbsp;&nbsp;&nbsp; TableClassA<br />
2&nbsp;&nbsp; &nbsp; TableClassB<br />
3&nbsp;&nbsp;&nbsp;&nbsp; TableClassC<br />
4&nbsp;&nbsp;&nbsp;&nbsp; TableClassD<br />
及查询的结果是.号或,前的内容<br />
SQL如下<br />
<br />
select id,<br />
&nbsp;&nbsp;&nbsp;&nbsp; case<br />
&nbsp;&nbsp;&nbsp;&nbsp;when (CHARINDEX(',',description)&gt;0) and (CHARINDEX('.',description)&gt;0) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then --在这个做了判断,如同时包含.和,则判断.和,那个在前<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when CHARINDEX(',',description)&gt;CHARINDEX('.',description) then left(description,CHARINDEX('.',description)-1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when CHARINDEX(',',description)&lt;CHARINDEX('.',description) then left(description,CHARINDEX(',',description)-1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;when (CHARINDEX(',',description)&gt;0) then left(description,CHARINDEX(',',description)-1) <br />
&nbsp;&nbsp;&nbsp;&nbsp;when (CHARINDEX('.',description)&gt;0) then left(description,CHARINDEX('.',description)-1) <br />
&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;description<br />
&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;as description<br />
&nbsp; from&nbsp; tablename</p><img src ="http://www.blogjava.net/hulizhong/aggbug/304396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hulizhong/" target="_blank">二胡</a> 2009-12-01 16:28 <a href="http://www.blogjava.net/hulizhong/archive/2009/12/01/304396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL字符串处理函数大全</title><link>http://www.blogjava.net/hulizhong/archive/2009/06/23/283666.html</link><dc:creator>二胡</dc:creator><author>二胡</author><pubDate>Tue, 23 Jun 2009 01:06:00 GMT</pubDate><guid>http://www.blogjava.net/hulizhong/archive/2009/06/23/283666.html</guid><wfw:comment>http://www.blogjava.net/hulizhong/comments/283666.html</wfw:comment><comments>http://www.blogjava.net/hulizhong/archive/2009/06/23/283666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hulizhong/comments/commentRss/283666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hulizhong/services/trackbacks/283666.html</trackback:ping><description><![CDATA[转 http://hi.baidu.com/buzhizhe/blog/item/0031c8178664420dc83d6d72.html<br />
<br />
select 字段1 from 表1 where 字段1.IndexOf("云")=1;<br />
这条语句不对的原因是indexof（）函数不是sql函数，改成sql对应的函数就可以了。<br />
left（）是sql函数。<br />
select 字段1 from 表1 where charindex（'云',字段1）=1;
<div class="postbody" twffan="done">
<p>字符串函数对二进制数据、字符串和表达式执行不同的运算。此类函数作用于CHAR、VARCHAR、 BINARY、 和VARBINARY 数据类型以及可以隐式转换为CHAR 或VARCHAR的数据类型。可以在SELECT 语句的SELECT 和WHERE 子句以及表达式中使用字符串函数。<br />
常用的字符串函数有：<br />
<br />
<strong>一、字符转换函数</strong><br />
1、ASCII()<br />
返回字符表达式最左端字符的ASCII 码值。在ASCII（）函数中，纯数字的字符串可不用&#8216;&#8217;括起来，但含其它字符的字符串必须用&#8216;&#8217;括起来使用，否则会出错。<br />
2、CHAR()<br />
将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值，CHAR（） 返回NULL 。<br />
3、LOWER()和UPPER()<br />
LOWER()将字符串全部转为小写；UPPER()将字符串全部转为大写。<br />
4、STR()<br />
把数值型数据转换为字符型数据。<br />
STR (&lt;float_expression&gt;[，length[， &lt;decimal&gt;]])<br />
length 指定返回的字符串的长度，decimal 指定返回的小数位数。如果没有指定长度，缺省的length 值为10， decimal 缺省值为0。<br />
当length 或者decimal 为负值时，返回NULL；<br />
当length 小于小数点左边（包括符号位）的位数时，返回length 个*；<br />
先服从length ，再取decimal ；<br />
当返回的字符串位数小于length ，左边补足空格。<br />
<strong>二、去空格函数</strong><br />
1、LTRIM() 把字符串头部的空格去掉。<br />
<br />
2、RTRIM() 把字符串尾部的空格去掉。<br />
<br />
<strong>三、取子串函数</strong><br />
1、left() <br />
LEFT (&lt;character_expression&gt;， &lt;integer_expression&gt;)<br />
返回character_expression 左起 integer_expression 个字符。<br />
<br />
2、RIGHT() <br />
RIGHT (&lt;character_expression&gt;， &lt;integer_expression&gt;)<br />
返回character_expression 右起 integer_expression 个字符。<br />
<br />
3、SUBSTRING()<br />
SUBSTRING (&lt;expression&gt;， &lt;starting_ position&gt;， length)<br />
返回从字符串左边第starting_ position 个字符起length个字符的部分。<br />
<br />
<strong>四、字符串比较函数</strong><br />
1、CHARINDEX()<br />
返回字符串中某个指定的子串出现的开始位置。<br />
CHARINDEX (&lt;&#8217;substring_expression&#8217;&gt;， &lt;expression&gt;)<br />
其中substring _expression 是所要查找的字符表达式，expression 可为字符串也可为列名表达式。如果没有发现子串，则返回0 值。<br />
此函数不能用于TEXT 和IMAGE 数据类型。<br />
2、PATINDEX()<br />
返回字符串中某个指定的子串出现的开始位置。<br />
PATINDEX (&lt;&#8217;%substring _expression%&#8217;&gt;， &lt;column_ name&gt;)其中子串表达式前后必须有百分号&#8220;%&#8221;否则返回值为0。<br />
与CHARINDEX 函数不同的是，PATINDEX函数的子串中可以使用通配符，且此函数可用于CHAR、 VARCHAR 和TEXT 数据类型。<br />
<br />
<strong>五、字符串操作函数</strong><br />
1、QUOTENAME()<br />
返回被特定字符括起来的字符串。<br />
QUOTENAME (&lt;&#8217;character_expression&#8217;&gt;[， quote_ character]) 其中quote_ character 标明括字符串所用的字符，缺省值为&#8220;[]&#8221;。<br />
2、REPLICATE()<br />
返回一个重复character_expression 指定次数的字符串。<br />
REPLICATE (character_expression integer_expression) 如果integer_expression 值为负值，则返回NULL 。<br />
<br />
3、REVERSE()<br />
将指定的字符串的字符排列顺序颠倒。<br />
REVERSE (&lt;character_expression&gt;) 其中character_expression 可以是字符串、常数或一个列的值。<br />
<br />
4、REPLACE()<br />
返回被替换了指定子串的字符串。<br />
REPLACE (&lt;string_expression1&gt;， &lt;string_expression2&gt;， &lt;string_expression3&gt;) 用string_expression3 替换在string_expression1 中的子串string_expression2。<br />
<br />
4、SPACE()<br />
返回一个有指定长度的空白字符串。<br />
SPACE (&lt;integer_expression&gt;) 如果integer_expression 值为负值，则返回NULL 。<br />
<br />
5、STUFF()<br />
用另一子串替换字符串指定位置、长度的子串。<br />
STUFF (&lt;character_expression1&gt;， &lt;start_ position&gt;， &lt;length&gt;，&lt;character_expression2&gt;)<br />
如果起始位置为负或长度值为负，或者起始位置大于character_expression1 的长度，则返回NULL 值。<br />
如果length 长度大于character_expression1 中 start_ position 以右的长度，则character_expression1 只保留首字符。<br />
<strong>六、数据类型转换函数</strong><br />
1、CAST()<br />
CAST (&lt;expression&gt; AS &lt;data_ type&gt;[ length ])<br />
<br />
2、CONVERT()<br />
CONVERT (&lt;data_ type&gt;[ length ]， &lt;expression&gt; [， style])<br />
<br />
1）data_type为SQL Server系统定义的数据类型，用户自定义的数据类型不能在此使用。<br />
2）length用于指定数据的长度，缺省值为30。<br />
3）把CHAR或VARCHAR类型转换为诸如INT或SAMLLINT这样的INTEGER类型、结果必须是带正号或负号的数值。<br />
4）TEXT类型到CHAR或VARCHAR类型转换最多为8000个字符，即CHAR或VARCHAR数据类型是最大长度。<br />
5）IMAGE类型存储的数据转换到BINARY或VARBINARY类型，最多为8000个字符。<br />
6）把整数值转换为MONEY或SMALLMONEY类型，按定义的国家的货币单位来处理，如人民币、美元、英镑等。<br />
7）BIT类型的转换把非零值转换为1，并仍以BIT类型存储。<br />
8）试图转换到不同长度的数据类型，会截短转换值并在转换值后显示&#8220;+&#8221;，以标识发生了这种截断。<br />
9）用CONVERT（）函数的style 选项能以不同的格式显示日期和时间。style 是将DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供的转换样式编号，不同的样式编号有不同的输出格式。<br />
<strong>七、日期函数</strong><br />
1、day(date_expression) <br />
返回date_expression中的日期值<br />
<br />
2、month(date_expression)<br />
返回date_expression中的月份值<br />
<br />
3、year(date_expression)<br />
返回date_expression中的年份值<br />
<br />
4、DATEADD()<br />
DATEADD (&lt;datepart&gt;， &lt;number&gt;， &lt;date&gt;)<br />
返回指定日期date 加上指定的额外日期间隔number 产生的新日期。<br />
5、DATEDIFF()<br />
DATEDIFF (&lt;datepart&gt;， &lt;date1&gt;， &lt;date2&gt;)<br />
返回两个指定日期在datepart 方面的不同之处，即date2 超过date1的差距值，其结果值是一个带有正负号的整数值。<br />
<br />
6、DATENAME()<br />
DATENAME (&lt;datepart&gt;， &lt;date&gt;)<br />
以字符串的形式返回日期的指定部分此部分。由datepart 来指定。<br />
<br />
7、DATEPART()<br />
DATEPART (&lt;datepart&gt;， &lt;date&gt;)<br />
以整数值的形式返回日期的指定部分。此部分由datepart 来指定。<br />
DATEPART (dd， date) 等同于DAY (date)<br />
DATEPART (mm， date) 等同于MONTH (date)<br />
DATEPART (yy， date) 等同于YEAR (date)<br />
<br />
8、GETDATE()<br />
以DATETIME 的缺省格式返回系统当前的日期和时间。</p>
</div><img src ="http://www.blogjava.net/hulizhong/aggbug/283666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hulizhong/" target="_blank">二胡</a> 2009-06-23 09:06 <a href="http://www.blogjava.net/hulizhong/archive/2009/06/23/283666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sqlserver日期函数 </title><link>http://www.blogjava.net/hulizhong/archive/2009/06/22/283541.html</link><dc:creator>二胡</dc:creator><author>二胡</author><pubDate>Mon, 22 Jun 2009 04:56:00 GMT</pubDate><guid>http://www.blogjava.net/hulizhong/archive/2009/06/22/283541.html</guid><wfw:comment>http://www.blogjava.net/hulizhong/comments/283541.html</wfw:comment><comments>http://www.blogjava.net/hulizhong/archive/2009/06/22/283541.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hulizhong/comments/commentRss/283541.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hulizhong/services/trackbacks/283541.html</trackback:ping><description><![CDATA[&nbsp;转 http://www.cnblogs.com/coconut_zhang/archive/2009/02/02/1382598.html<br />
<div class="postBody">
<p style="text-indent: 2em"><font color="#0000ff">SQLServer时间日期函数详解,SQLServer,时间日期,</font></p>
<p style="text-indent: 2em"><font color="#0000ff">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当前系统日期、时间 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select getdate() </font></p>
<p style="text-indent: 2em"><font color="#0000ff">2. dateadd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在向指定日期加上一段时间的基础上，返回新的 datetime 值</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如：向日期加上2天 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select dateadd(day,2,'2004-10-15')&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --返回：2004-10-17 00:00:00.000</font></p>
<p style="text-indent: 2em"><font color="#0000ff">3. datediff 返回跨两个指定日期的日期和时间边界数。</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select datediff(day,'2004-09-01','2004-09-18')&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --返回：17</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select datediff(day,'2004-09-18','2004-09-01')&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --返回：-17</font></p>
<p style="text-indent: 2em"><font color="#0000ff">4. datepart 返回代表指定日期的指定日期部分的整数。</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT DATEPART(month, '2004-10-15')&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --返回 10</font></p>
<p style="text-indent: 2em"><font color="#0000ff">5. datename 返回代表指定日期的指定日期部分的字符串</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT datename(weekday, '2004-10-15')&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --返回：星期五</font></p>
<p style="text-indent: 2em"><font color="#0000ff">6. day(), month(),year() --可以与datepart对照一下</font></p>
<p style="text-indent: 2em"><font color="#0000ff">select 当前日期=convert(varchar(10),getdate(),120) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">,当前时间=convert(varchar(8),getdate(),114) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">select datename(dw,'2004-10-15') </font></p>
<p style="text-indent: 2em"><font color="#0000ff">select 本年第多少周=datename(week,'2004-10-15')</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,今天是周几=datename(weekday,'2004-10-15')</font></p>
<p style="text-indent: 2em"><font color="#0000ff">函数 参数/功能 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">GetDate( )&nbsp;&nbsp; 返回系统目前的日期与时间 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">DateDiff (interval,date1,date2) 以interval 指定的方式，返回date2 与date1两个日期之间的差值 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">date2-date1 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">DateAdd (interval,number,date) 以interval指定的方式，加上number之后的日期 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">DatePart (interval,date) 返回日期date中，interval指定部分所对应的整数值 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">DateName (interval,date) 返回日期date中，interval指定部分所对应的字符串名称 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">参数 interval的设定值如下：</font></p>
<p style="text-indent: 2em"><font color="#0000ff">值 缩 写（Sql Server） (Access 和 ASP) 说明 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">Year Yy yyyy 年 1753 ~ 9999 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">Quarter Qq q&nbsp;&nbsp;&nbsp; 季 1 ~ 4 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">Month Mm m&nbsp;&nbsp;&nbsp; 月1 ~ 12 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">Day of year Dy y&nbsp;&nbsp; 一年的日数,一年中的第几日 1-366 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">Day Dd d&nbsp;&nbsp;&nbsp; 日，1-31 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">Weekday Dw w 一周的日数，一周中的第几日 1-7 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">Week Wk ww&nbsp;&nbsp; 周，一年中的第几周 0 ~ 51 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">Hour Hh h&nbsp;&nbsp;&nbsp; 时0 ~ 23 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">Minute Mi n&nbsp;&nbsp; 分钟0 ~ 59 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">Second Ss s 秒 0 ~ 59 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">Millisecond Ms - 毫秒 0 ~ 999 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">access 和 asp 中用date()和now()取得系统日期时间；其中DateDiff,DateAdd,DatePart也同是能用于</font></p>
<p style="text-indent: 2em"><font color="#0000ff">Access和asp中，这些函数的用法也类似</font></p>
<p style="text-indent: 2em"><font color="#0000ff">举例：</font></p>
<p style="text-indent: 2em"><font color="#0000ff">1.GetDate() 用于sql server :select GetDate()</font></p>
<p style="text-indent: 2em"><font color="#0000ff">2.DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值为 514592 秒</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值为 5 天</font></p>
<p style="text-indent: 2em"><font color="#0000ff">3.DatePart('w','2005-7-25 22:56:32')返回值为 2 即星期一(周日为1，周六为7)</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DatePart('d','2005-7-25 22:56:32')返回值为 25即25号</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DatePart('y','2005-7-25 22:56:32')返回值为 206即这一年中第206天</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DatePart('yyyy','2005-7-25 22:56:32')返回值为 2005即2005年 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">具体的语法：</font></p>
<p style="text-indent: 2em"><font color="#0000ff">日期函数用来操作DATETIME 和SMALLDATETIME 类型的数据，执行算术运算。与其它函数一样，可以在</font></p>
<p style="text-indent: 2em"><font color="#0000ff">Select 语句的Select 和Where 子句以及表达式中使用日期函数。其使用方法如下：</font></p>
<p style="text-indent: 2em"><font color="#0000ff">日期函数参数，其中参数个数应不同的函数而不同。</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&#183;DAY（）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DAY（） 函数语法如下：</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DAY （&lt;date_expression&gt;）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DAY（） 函数返回date_expression 中的日期值。</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&#183;MONTH（）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">MONTH（） 函数语法如下：</font></p>
<p style="text-indent: 2em"><font color="#0000ff">MONTH (&lt;date_expression&gt;)</font></p>
<p style="text-indent: 2em"><font color="#0000ff">MONTH（） 函数返回date_expression 中的月份值。</font></p>
<p style="text-indent: 2em"><font color="#0000ff">与DAY（） 函数不同的是，MONTH（） 函数的参数为整数时，一律返回整数值1，即SQL Server 认为其</font></p>
<p style="text-indent: 2em"><font color="#0000ff">是1900 年1 月。</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&#183;YEAR（）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">YEAR（） 函数语法如下：</font></p>
<p style="text-indent: 2em"><font color="#0000ff">YEAR （&lt;date_expression&gt;）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">YEAR（） 函数返回date_expression 中的年份值。</font></p>
<p style="text-indent: 2em"><font color="#0000ff">提醒：在使用日期函数时，其日期值应在1753年到9999年之间，这是SQL Server系统所能识别的日期范</font></p>
<p style="text-indent: 2em"><font color="#0000ff">围，否则会出现错误。</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&#183;DATEADD（）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATEADD（） 函数语法如下：</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATEADD （&lt;datepart&gt;， &lt;number&gt;， &lt;date&gt;）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATEADD（） 函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期。参数&#8220;datepart</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&#8221; 在日期函数中经常被使用，它用来指定构成日期类型数据的各组件，如年、季、月、日、星期等。</font></p>
<p style="text-indent: 2em"><font color="#0000ff">其取值如表4-9 所示：</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&#183;DATEDIFF（）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATEDIFF（） 函数语法如下：</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATEDIFF（） （&lt;datepart&gt;， &lt;date1&gt;， &lt;date2&gt;）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATEDIFF（） 函数返回两个指定日期在datepart 方面的不同之处，即date2 超过date1的差距值，其</font></p>
<p style="text-indent: 2em"><font color="#0000ff">结果值是一个带有正负号的整数值。针对不同的datepart， DATEDIFF（）函数所允许的最大差距值不</font></p>
<p style="text-indent: 2em"><font color="#0000ff">一样，如：datepart 为second 时，DATEDIFF（） 函数所允许的最大差距值为68： 年datepart 为</font></p>
<p style="text-indent: 2em"><font color="#0000ff">millisecond 时，DATEDIFF（） 函数所允许的最大差距值为24 天20 小时30 分23 秒647 毫秒。</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&#183;DATENAME（）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATENAME（） 函数语法如下：</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATENAME （&lt;datepart&gt;， &lt;date）&gt;</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATENAME（） 函数以字符串的形式返回日期的指定部分此部分。由datepart 来指定。</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&#183;DATEPART（）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATEPART（） 函数语法如下：</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATEPART （&lt;datepart&gt;， &lt;date&gt;）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATEPART（） 函数以整数值的形式返回日期的指定部分。此部分由datepart 来指定。</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATEPART （dd， date） 等同于DAY （date）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATEPART （mm， date） 等同于MONTH （date）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">DATEPART （yy， date） 等同于YEAR （date）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">&#183;GETDATE（）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">GETDATE（） 函数语法如下：</font></p>
<p style="text-indent: 2em"><font color="#0000ff">GETDATE（）</font></p>
<p style="text-indent: 2em"><font color="#0000ff">GETDATE（） 函数以DATETIME 的缺省格式返回系统当前的日期和时间，它常作为其它函数或命令的参</font></p>
<p style="text-indent: 2em"><font color="#0000ff">数使用。 </font></p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em"><font color="#0000ff">在开发数据库应用中，经常会遇到处理时间的问题，如查询指定时间的记录等。下面就这些常见的问题</font></p>
<p style="text-indent: 2em"><font color="#0000ff">，结合自己的一些经验，和大家探讨一下这类问题。 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">　　首先介绍一下，SQL Server里处理时间的几个主要函数的用法： </font></p>
<p style="text-indent: 2em"><font color="#0000ff">getdate()函数：取得系统当前的日期和时间。返回值为datetime类型的。 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">用法：getdate() </font></p>
<p style="text-indent: 2em"><font color="#0000ff">例子： </font></p>
<p style="text-indent: 2em"><font color="#0000ff">select getdate() as dte,dateadd(day,-1,getdate()) as nowdat </font></p>
<p style="text-indent: 2em"><font color="#0000ff">输出结果： </font></p>
<p style="text-indent: 2em"><font color="#0000ff">dte nowdat </font></p>
<p style="text-indent: 2em"><font color="#0000ff">1999-11-21 19:13:10.083 1999-11-20 19:13:10.083 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">(1 row(s) affected) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">datepart()函数：以整数的形式返回时间的指定部分。 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">用法：datepart(datepart,date) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">参数说明：datepart时要返回的时间的部分，常用取值year、month、day、hour、minute。 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">date是所指定的时间。 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">例子： </font></p>
<p style="text-indent: 2em"><font color="#0000ff">SELECT DATEPART(month, GETDATE()) AS 'Month Number' </font></p>
<p style="text-indent: 2em"><font color="#0000ff">输出结果： </font></p>
<p style="text-indent: 2em"><font color="#0000ff">Month Number </font></p>
<p style="text-indent: 2em"><font color="#0000ff">11 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">(1 row(s) affected) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">dateadd()函数：通过给指定的时间的指定部分加上一个整数值以返回一个新时间值。 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">用法：dateadd(datepart,number,date) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">参数说明：datepart(同上） </font></p>
<p style="text-indent: 2em"><font color="#0000ff">date(同上) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">number要增加的值，整型，可正可负，正值返回date之后的时间值，负值返回date </font></p>
<p style="text-indent: 2em"><font color="#0000ff">之前的时间值 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">例子： </font></p>
<p style="text-indent: 2em"><font color="#0000ff">select getdate() as today </font></p>
<p style="text-indent: 2em"><font color="#0000ff">select dateadd(day,-1,getdate()) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">select dateadd(day,1,getdate()) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">输出： </font></p>
<p style="text-indent: 2em"><font color="#0000ff">today </font></p>
<p style="text-indent: 2em"><font color="#0000ff">1999-11-21 19:42:41.410 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">(1 row(s) affected) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">yesterday </font></p>
<p style="text-indent: 2em"><font color="#0000ff">1999-11-20 19:42:41.410 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">(1 row(s) affected) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">tomorrow </font></p>
<p style="text-indent: 2em"><font color="#0000ff">1999-11-22 19:42:41.410 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">(1 row(s) affected) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">datediff()函数：返回两个时间以指定时间部分来计算的差值。返回整数值。如1991-6-12和1991-6-21</font></p>
<p style="text-indent: 2em"><font color="#0000ff">之间以天 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">来算相差9天,1998-6-12和1999-6-23按年算相差1年，1999-12-1和1999-3-12按月算相差9个月 </font></p>
<p style="text-indent: 2em"><font color="#0000ff">用法：datediff(darepart,date1,date2) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">参数说明：datepart（同上) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">date1、date2(同上date) </font></p>
<p style="text-indent: 2em"><font color="#0000ff">例子： </font></p>
<p style="text-indent: 2em"><font color="#0000ff">select datediff(month,'1991-6-12','1992-6-21') as a </font></p>
</div><img src ="http://www.blogjava.net/hulizhong/aggbug/283541.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hulizhong/" target="_blank">二胡</a> 2009-06-22 12:56 <a href="http://www.blogjava.net/hulizhong/archive/2009/06/22/283541.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ER图</title><link>http://www.blogjava.net/hulizhong/archive/2009/05/14/270621.html</link><dc:creator>二胡</dc:creator><author>二胡</author><pubDate>Thu, 14 May 2009 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/hulizhong/archive/2009/05/14/270621.html</guid><wfw:comment>http://www.blogjava.net/hulizhong/comments/270621.html</wfw:comment><comments>http://www.blogjava.net/hulizhong/archive/2009/05/14/270621.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/hulizhong/comments/commentRss/270621.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hulizhong/services/trackbacks/270621.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查询了ER图相关资料,如下:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;简单说方框代表实体；椭圆代表属性；菱形框代表关系。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下图是在网上找到的,都是说是ER图.它们有什么不同?<br />
<img height="730" alt="" src="http://www.blogjava.net/images/blogjava_net/hulizhong/er.jpg" width="572" border="0" /><img src ="http://www.blogjava.net/hulizhong/aggbug/270621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hulizhong/" target="_blank">二胡</a> 2009-05-14 15:47 <a href="http://www.blogjava.net/hulizhong/archive/2009/05/14/270621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ER图</title><link>http://www.blogjava.net/hulizhong/archive/2009/05/14/270588.html</link><dc:creator>二胡</dc:creator><author>二胡</author><pubDate>Thu, 14 May 2009 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/hulizhong/archive/2009/05/14/270588.html</guid><wfw:comment>http://www.blogjava.net/hulizhong/comments/270588.html</wfw:comment><comments>http://www.blogjava.net/hulizhong/archive/2009/05/14/270588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hulizhong/comments/commentRss/270588.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hulizhong/services/trackbacks/270588.html</trackback:ping><description><![CDATA[<span id="reply_content_62914559">简单说方框代表实体；椭圆代表属性；菱形框代表关系。</span><img src ="http://www.blogjava.net/hulizhong/aggbug/270588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hulizhong/" target="_blank">二胡</a> 2009-05-14 13:50 <a href="http://www.blogjava.net/hulizhong/archive/2009/05/14/270588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转 五种提高 SQL 性能的方法</title><link>http://www.blogjava.net/hulizhong/archive/2009/05/10/269888.html</link><dc:creator>二胡</dc:creator><author>二胡</author><pubDate>Sun, 10 May 2009 05:14:00 GMT</pubDate><guid>http://www.blogjava.net/hulizhong/archive/2009/05/10/269888.html</guid><wfw:comment>http://www.blogjava.net/hulizhong/comments/269888.html</wfw:comment><comments>http://www.blogjava.net/hulizhong/archive/2009/05/10/269888.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hulizhong/comments/commentRss/269888.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hulizhong/services/trackbacks/269888.html</trackback:ping><description><![CDATA[有时，
为了让应用程序运行得更快，所做的全部工作就是在这里或那里做一些很小调整。啊，但关键在于确定如何进行调整！迟早您会遇到这种情况：应用程序中的
SQL
查询不能按照您想要的方式进行响应。它要么不返回数据，要么耗费的时间长得出奇。如果它降低了报告或您的企业应用程序的速度，用户必须等待的时间过长，他
们就会很不满意。就像您的父母不想听您解释为什么在深更半夜才回来一样，用户也不会听你解释为什么查询耗费这么长时间。（&#8220;对不起，妈妈，我使用了太多的
LEFT JOIN。&#8221;）用户希望应用程序响应迅速，他们的报告能够在瞬间之内返回分析数据。就我自己而言，如果在 Web
上冲浪时某个页面要耗费十多秒才能加载（好吧，五秒更实际一些），我也会很不耐烦。 <br />
<br />
为了解决这些问题，重要的是找到问题的根源。那么，从哪里开始呢？根本原因通常在于数据库设计和访问它的查询。在本月的专栏中，我将讲述四项技术，这些技
术可用于提高基于 SQL Server? 的应用程序的性能或改善其可伸缩性。我将仔细说明 LEFT JOIN、CROSS JOIN 的使用以及
IDENTITY
值的检索。请记住，根本没有神奇的解决方案。调整您的数据库及其查询需要占用时间、进行分析，还需要大量的测试。这些技术都已被证明行之有效，但对您的应
用程序而言，可能其中一些技术比另一些技术更适用。 <br />
<br />
从 INSERT 返回 IDENTITY  <br />
我决定从遇到许多问题的内容入手：如何在执行 SQL INSERT 后检索 IDENTITY
值。通常，问题不在于如何编写检索值的查询，而在于在哪里以及何时进行检索。在 SQL Server
中，下面的语句可用于检索由最新在活动数据库连接上运行的 SQL 语句所创建的 IDENTITY 值： <br />
<br />
SELECT
@@IDENTITY这个 SQL 语句并不复杂，但需要记住的一点是：如果这个最新的 SQL 语句不是 INSERT，或者您针对非 INSERT
SQL 的其他连接运行了此 SQL，则不会获得期望的值。您必须运行下列代码才能检索紧跟在 INSERT SQL 之后且位于同一连接上的
IDENTITY，如下所示： <br />
<br />
INSERT INTO Products (ProductName) VALUES ('Chalk') <br />
SELECT @@IDENTITY在一个连接上针对 Northwind 数据库运行这些查询将返回一个名称为 Chalk 的新产品的 IDENTITY 值。所以，在使用 ADO 的 Visual Basic? 应用程序中，可以运行以下语句： <br />
<br />
Set oRs = oCn.Execute("SET NOCOUNT ON;INSERT INTO Products _ <br />
(ProductName) VALUES ('Chalk');SELECT @@IDENTITY") <br />
lProductID = oRs(0)此代码告诉 SQL Server 不要返回查询的行计数，然后执行 INSERT
语句，并返回刚刚为这个新行创建的 IDENTITY 值。SET NOCOUNT ON 语句表示返回的记录集有一行和一列，其中包含了这个新的
IDENTITY 值。如果没有此语句，则会首先返回一个空的记录集（因为 INSERT
语句不返回任何数据），然后会返回第二个记录集，第二个记录集中包含 IDENTITY 值。这可能有些令人困惑，尤其是因为您从来就没有希望过
INSERT 会返回记录集。之所以会发生此情况，是因为 SQL Server
看到了这个行计数（即一行受到影响）并将其解释为表示一个记录集。因此，真正的数据被推回到了第二个记录集。当然您可以使用 ADO 中的
NextRecordset 方法获取此第二个记录集，但如果总能够首先返回该记录集且只返回该记录集，则会更方便，也更有效率。 <br />
<br />
此方法虽然有效，但需要在 SQL 语句中额外添加一些代码。获得相同结果的另一方法是在 INSERT 之前使用 SET NOCOUNT ON
语句，并将 SELECT @@IDENTITY 语句放在表中的 FOR INSERT 触发器中，如下面的代码片段所示。这样，任何进入该表的
INSERT 语句都将自动返回 IDENTITY 值。 <br />
<br />
CREATE TRIGGER trProducts_Insert ON Products FOR INSERT AS  <br />
&nbsp; &nbsp; SELECT @@IDENTITY  <br />
GO <br />
触发器只在 Products 表上发生 INSERT 时启动，所以它总是会在成功 INSERT 之后返回一个 IDENTITY。使用此技术，您可以始终以相同的方式在应用程序中检索 IDENTITY 值。 <br />
<br />
内嵌视图与临时表  <br />
某些时候，查询需要将数据与其他一些可能只能通过执行 GROUP BY
然后执行标准查询才能收集的数据进行联接。例如，如果要查询最新五个定单的有关信息，您首先需要知道是哪些定单。这可以使用返回定单 ID 的 SQL
查询来检索。此数据就会存储在临时表（这是一个常用技术）中，然后与 Products 表进行联接，以返回这些定单售出的产品数量： <br />
<br />
CREATE TABLE #Temp1 (OrderID INT NOT NULL, _ <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  OrderDate DATETIME NOT NULL) <br />
INSERT INTO #Temp1 (OrderID, OrderDate) <br />
SELECT&nbsp; &nbsp;  TOP 5 o.OrderID, o.OrderDate <br />
FROM Orders o ORDER BY o.OrderDate DESC <br />
SELECT&nbsp; &nbsp;  p.ProductName, SUM(od.Quantity) AS ProductQuantity <br />
FROM&nbsp; &nbsp;  #Temp1 t  <br />
&nbsp; &nbsp; INNER JOIN [Order Details] od ON t.OrderID = od.OrderID <br />
&nbsp; &nbsp; INNER JOIN Products p ON od.ProductID = p.ProductID  <br />
GROUP BY p.ProductName <br />
ORDER BY p.ProductName <br />
DROP TABLE #Temp1这些 SQL
语句会创建一个临时表，将数据插入该表中，将其他数据与该表进行联接，然后除去该临时表。这会导致此查询进行大量 I/O
操作，因此，可以重新编写查询，使用内嵌视图取代临时表。内嵌视图只是一个可以联接到 FROM 子句中的查询。所以，您不用在 tempdb
中的临时表上耗费大量 I/O 和磁盘访问，而可以使用内嵌视图得到同样的结果： <br />
<br />
SELECT p.ProductName,  <br />
&nbsp; &nbsp; SUM(od.Quantity) AS ProductQuantity <br />
FROM&nbsp; &nbsp;  ( <br />
&nbsp; &nbsp; SELECT TOP 5 o.OrderID, o.OrderDate <br />
&nbsp; &nbsp; FROM&nbsp; &nbsp;  Orders o  <br />
&nbsp; &nbsp; ORDER BY o.OrderDate DESC <br />
&nbsp; &nbsp; ) t  <br />
&nbsp; &nbsp; INNER JOIN [Order Details] od ON t.OrderID = od.OrderID <br />
&nbsp; &nbsp; INNER JOIN Products p ON od.ProductID = p.ProductID  <br />
GROUP BY <br />
&nbsp; &nbsp; p.ProductName <br />
ORDER BY <br />
&nbsp; &nbsp; p.ProductName此查询不仅比前面的查询效率更高，而且长度更短。临时表会消耗大量资源。如果只需要将数据联接到其他查询，则可以试试使用内嵌视图，以节省资源。 <br />
<br />
避免 LEFT JOIN 和 NULL  <br />
当然，有很多时候您需要执行 LEFT JOIN 和使用 NULL 值。但是，它们并不适用于所有情况。改变 SQL
查询的构建方式可能会产生将一个花几分钟运行的报告缩短到只花几秒钟这样的天壤之别的效果。有时，必须在查询中调整数据的形态，使之适应应用程序所要求的
显示方式。虽然 TABLE 数据类型会减少大量占用资源的情况，但在查询中还有许多区域可以进行优化。SQL 的一个有价值的常用功能是 LEFT
JOIN。它可以用于检索第一个表中的所有行、第二个表中所有匹配的行、以及第二个表中与第一个表不匹配的所有行。例如，如果希望返回每个客户及其定单，
使用 LEFT JOIN 则可以显示有定单和没有定单的客户。 <br />
<br />
此工具可能会被过度使用。LEFT JOIN
消耗的资源非常之多，因为它们包含与 NULL（不存在）数据匹配的数据。在某些情况下，这是不可避免的，但是代价可能非常高。LEFT JOIN 比
INNER JOIN 消耗资源更多，所以如果您可以重新编写查询以使得该查询不使用任何 LEFT JOIN，则会得到非常可观的回报（请参阅图 1
中的图）。 <br />
<br />
图 1 查询  <br />
<br />
加快使用 LEFT JOIN 的查询速度的一项技术涉及创建一个
TABLE 数据类型，插入第一个表（LEFT JOIN 左侧的表）中的所有行，然后使用第二个表中的值更新 TABLE
数据类型。此技术是一个两步的过程，但与标准的 LEFT JOIN
相比，可以节省大量时间。一个很好的规则是尝试各种不同的技术并记录每种技术所需的时间，直到获得用于您的应用程序的执行性能最佳的查询。 <br />
<br />
测试查询的速度时，有必要多次运行此查询，然后取一个平均值。因为查询（或存储过程）可能会存储在 SQL Server
内存中的过程缓存中，因此第一次尝试耗费的时间好像稍长一些，而所有后续尝试耗费的时间都较短。另外，运行您的查询时，可能正在针对相同的表运行其他查
询。当其他查询锁定和解锁这些表时，可能会导致您的查询要排队等待。例如，如果您进行查询时某人正在更新此表中的数据，则在更新提交时您的查询可能需要耗
费更长时间来执行。 <br />
<br />
避免使用 LEFT JOIN
时速度降低的最简单方法是尽可能多地围绕它们设计数据库。例如，假设某一产品可能具有类别也可能没有类别。如果 Products 表存储了其类别的
ID，而没有用于某个特定产品的类别，则您可以在字段中存储 NULL 值。然后您必须执行 LEFT JOIN
来获取所有产品及其类别。您可以创建一个值为&#8220;No Category&#8221;的类别，从而指定外键关系不允许 NULL
值。通过执行上述操作，现在您就可以使用 INNER JOIN
检索所有产品及其类别了。虽然这看起来好像是一个带有多余数据的变通方法，但可能是一个很有价值的技术，因为它可以消除 SQL
批处理语句中消耗资源较多的 LEFT
JOIN。在数据库中全部使用此概念可以为您节省大量的处理时间。请记住，对于您的用户而言，即使几秒钟的时间也非常重要，因为当您有许多用户正在访问同
一个联机数据库应用程序时，这几秒钟实际上的意义会非常重大。 <br />
<br />
灵活使用笛卡尔乘积  <br />
对于此技巧，我将进行非常详细的介绍，并提倡在某些情况下使用笛卡尔乘积。出于某些原因，笛卡尔乘积 (CROSS JOIN)
遭到了很多谴责，开发人员通常会被警告根本就不要使用它们。在许多情况下，它们消耗的资源太多，从而无法高效使用。但是像 SQL
中的任何工具一样，如果正确使用，它们也会很有价值。例如，如果您想运行一个返回每月数据（即使某一特定月份客户没有定单也要返回）的查询，您就可以很方
便地使用笛卡尔乘积。 图 2 中的 SQL 就执行了上述操作。 <br />
<br />
虽然这看起来好像没什么神奇的，但是请考虑一下，如果您从客户到定单（这些定单按月份进行分组并对销售额进行小计）进行了标准的 INNER
JOIN，则只会获得客户有定单的月份。因此，对于客户未订购任何产品的月份，您不会获得 0
值。如果您想为每个客户都绘制一个图，以显示每个月和该月销售额，则可能希望此图包括月销售额为 0 的月份，以便直观标识出这些月份。如果使用 图
2 中的 SQL，数据则会跳过销售额为 0 美元的月份，因为在定单表中对于零销售额不会包含任何行（假设您只存储发生的事件）。 <br />
<br />
图 3
中的代码虽然较长，但是可以达到获取所有销售数据（甚至包括没有销售额的月份）的目标。首先，它会提取去年所有月份的列表，然后将它们放入第一个
TABLE 数据类型表 (@tblMonths) 中。下一步，此代码会获取在该时间段内有销售额的所有客户公司的名称列表，然后将它们放入另一个
TABLE 数据类型表 (@tblCus-tomers) 中。这两个表存储了创建结果集所必需的所有基本数据，但实际销售数量除外。
第一个表中列出了所有月份（12 行），第二个表中列出了这个时间段内有销售额的所有客户（对于我是 81 个）。并非每个客户在过去 12
个月中的每个月都购买了产品，所以，执行 INNER JOIN 或 LEFT JOIN
不会返回每个月的每个客户。这些操作只会返回购买产品的客户和月份。 <br />
<br />
笛卡尔乘积则可以返回所有月份的所有客户。笛卡尔乘积基本上是将第一个表与第二个表相乘，生成一个行集合，其中包含第一个表中的行数与第二个表中的行数相
乘的结果。因此，笛卡尔乘积会向表 @tblFinal 返回 972 行。最后的步骤是使用此日期范围内每个客户的月销售额总计更新
@tblFinal 表，以及选择最终的行集。 <br />
<br />
如果由于笛卡尔乘积占用的资源可能会很多，而不需要真正的笛卡尔乘积，则可以谨慎地使用 CROSS JOIN。例如，如果对产品和类别执行了
CROSS JOIN，然后使用 WHERE 子句、DISTINCT 或 GROUP BY 来筛选出大多数行，那么使用 INNER JOIN
会获得同样的结果，而且效率高得多。如果需要为所有的可能性都返回数据（例如在您希望使用每月销售日期填充一个图表时），则笛卡尔乘积可能会非常有帮助。
但是，您不应该将它们用于其他用途，因为在大多数方案中 INNER JOIN 的效率要高得多。 <br />
<br />
拾遗补零  <br />
这里介绍其他一些可帮助提高 SQL
查询效率的常用技术。假设您将按区域对所有销售人员进行分组并将他们的销售额进行小计，但是您只想要那些数据库中标记为处于活动状态的销售人员。您可以按
区域对销售人员分组，并使用 HAVING 子句消除那些未处于活动状态的销售人员，也可以在 WHERE 子句中执行此操作。在 WHERE
子句中执行此操作会减少需要分组的行数，所以比在 HAVING 子句中执行此操作效率更高。HAVING
子句中基于行的条件的筛选会强制查询对那些在 WHERE 子句中会被去除的数据进行分组。 <br />
<br />
另一个提高效率的技巧是使用
DISTINCT 关键字查找数据行的单独报表，来代替使用 GROUP BY 子句。在这种情况下，使用 DISTINCT 关键字的 SQL
效率更高。请在需要计算聚合函数（SUM、COUNT、MAX 等）的情况下再使用 GROUP
BY。另外，如果您的查询总是自己返回一个唯一的行，则不要使用 DISTINCT 关键字。在这种情况下，DISTINCT
关键字只会增加系统开销。 <br />
<br />
您已经看到了，有大量技术都可用于优化查询和实现特定的业务规则，技巧就是进行一些尝试，然后比较它们的性能。最重要的是要测试、测试、再测试。在此专栏
的将来各期内容中，我将继续深入讲述 SQL Server 概念，包括数据库设计、好的索引实践以及 SQL Server 安全范例。<br />
&nbsp;&nbsp; ◆尽量不要在where中包含子查询;<br />
<br />
关于时间的查询，尽量不要写成：where to_char(dif_date,'yyyy-mm-dd')=to_char('2007-07-01','yyyy-mm-dd');<br />
<br />
◆在过滤条件中，可以过滤掉最大数量记录的条件必须放在where子句的末尾;<br />
<br />
FROM子句中写在最后的表(基础表，driving
table)将被最先处理，在FROM子句中包含多个表的情况下，你必须选择记录条数最少的表作为基础表。如果有三个以上的连接查询，那就需要选择交叉表
(intersection table)作为基础表，交叉表是指那个被其他表所引用的表;<br />
<br />
◆采用绑定变量<br />
<br />
◆在WHERE中尽量不要使用OR<br />
<br />
◆用EXISTS替代IN、用NOT EXISTS替代NOT IN;<br />
<br />
◆避免在索引列上使用计算：WHERE SAL*12&gt;25000;<br />
<br />
◆用IN来替代OR： WHERE LOC_ID=10 OR LOC_ID=15 OR LOC_ID=20<br />
<br />
◆避免在索引列上使用IS NULL和IS NOT NULL;<br />
<br />
◆总是使用索引的第一个列;<br />
<br />
◆用UNION-ALL替代UNION;<br />
<br />
◆避免改变索引列的类型：SELECT...FROM EMP WHERE EMPNO='123'，由于隐式数据类型转换，to_char(EMPNO)='123'，因此，将不采用索引，一般在采用字符串拼凑动态SQL语句出现;<br />
<br />
◆'!=' 将不使用索引;<br />
<br />
◆优化GROUP BY;<br />
<br />
◆避免带有LIKE参数的通配符，LIKE '4YE%'使用索引，但LIKE '%YE'不使用索引<br />
<br />
◆避免使用困难的正规表达式，例如select * from customer where zipcode like
"98___"，即便在zipcode上建立了索引，在这种情况下也还是采用顺序扫描的方式。如果把语句改成select * from
customer where zipcode&gt;"98000"，在执行查询时就会利用索引来查询，显然会大大提高速度;<br />
<br />
◆尽量明确的完成SQL语句，尽量少让数据库工作。比如写SELECT语句时，需要把查询的字段明确指出表名。尽量不要使用SELECT *语句。组织SQL语句的时候，尽量按照数据库的习惯进行组织。<img src ="http://www.blogjava.net/hulizhong/aggbug/269888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hulizhong/" target="_blank">二胡</a> 2009-05-10 13:14 <a href="http://www.blogjava.net/hulizhong/archive/2009/05/10/269888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转 SQL：char、varchar、text和nchar、nvarchar、ntext的区别 </title><link>http://www.blogjava.net/hulizhong/archive/2009/04/21/266664.html</link><dc:creator>二胡</dc:creator><author>二胡</author><pubDate>Tue, 21 Apr 2009 01:17:00 GMT</pubDate><guid>http://www.blogjava.net/hulizhong/archive/2009/04/21/266664.html</guid><wfw:comment>http://www.blogjava.net/hulizhong/comments/266664.html</wfw:comment><comments>http://www.blogjava.net/hulizhong/archive/2009/04/21/266664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hulizhong/comments/commentRss/266664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hulizhong/services/trackbacks/266664.html</trackback:ping><description><![CDATA[转 http://www.cnblogs.com/kingjiong/archive/2009/03/12/1310908.html<br />
<br />
SQL中char、varchar、text和nchar、nvarchar、ntext的区别<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1、CHAR。CHAR存储定长数据很方便，CHAR字段上的索引效率级高，比如定义char(10)，那么不论你存储的数据是否达到了10个字节，都要占去10个字节的空间。<br />
&nbsp;&nbsp;&nbsp;&nbsp;
2、VARCHAR。存储变长数据，但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的，我们只知道它不可能超过10个字符，把它定义为
VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么&#8220;+1&#8221;呢？这一个字节用于保存实际使用了多大的长度。<br />
&nbsp;&nbsp;&nbsp; 从空间上考虑，用varchar合适；从效率上考虑，用char合适，关键是根据实际情况找到权衡点。<br />
&nbsp;&nbsp;&nbsp; 3、TEXT。text存储可变长度的非Unicode数据，最大长度为2^31-1(2,147,483,647)个字符。<br />
&nbsp;&nbsp;&nbsp;&nbsp;4、NCHAR、NVARCHAR、NTEXT。这三种从名字上看比前面三种多了个&#8220;N&#8221;。它表示存储的是Unicode数据类型的字符。我们知
道字符中，英文字符只需要一个字节存储就足够了，但汉字众多，需要两个字节存储，英文与汉字同时存在时容易造成混乱，Unicode字符集就是为了解决字
符集这种不兼容的问题而产生的，它所有的字符都用两个字节表示，即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之
间。和char、varchar比较起来，nchar、nvarchar则最多存储4000个字符，不论是英文还是汉字；而char、varchar最多
能存储8000个英文，4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字，较为方便，但在存储英文
时数量上有些损失。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 所以一般来说，如果含有中文字符，用nchar/nvarchar，如果纯英文和数字，用char/varchar。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果是存储文章等大段内容的时候，纯英文和数字，用text，含有中文字符的，用ntext。
<br />
<br /><img src ="http://www.blogjava.net/hulizhong/aggbug/266664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hulizhong/" target="_blank">二胡</a> 2009-04-21 09:17 <a href="http://www.blogjava.net/hulizhong/archive/2009/04/21/266664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转 select into 和 insert into select 两种表复制语句</title><link>http://www.blogjava.net/hulizhong/archive/2009/04/20/266549.html</link><dc:creator>二胡</dc:creator><author>二胡</author><pubDate>Mon, 20 Apr 2009 05:56:00 GMT</pubDate><guid>http://www.blogjava.net/hulizhong/archive/2009/04/20/266549.html</guid><wfw:comment>http://www.blogjava.net/hulizhong/comments/266549.html</wfw:comment><comments>http://www.blogjava.net/hulizhong/archive/2009/04/20/266549.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hulizhong/comments/commentRss/266549.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hulizhong/services/trackbacks/266549.html</trackback:ping><description><![CDATA[转 http://www.cftea.com/c/2006/12/128KWTC67M14NQJD.asp<br />
<br />
<span style="color: blue">select</span> *&nbsp;<span style="color: blue">into</span>&nbsp;destTbl <span style="color: blue">from</span> srcTbl<br />
<span style="color: blue">insert</span> <span style="color: blue">into</span> destTbl(fld1, fld2) <span style="color: blue">selec</span>t fld1, 5 <span style="color: blue">from</span> srcTbl
<p>以上两句都是将 srcTbl 的数据插入到 destTbl，但两句又有区别的：</p>
<ul>
    <li>第一句（select into from）要求目标表（destTbl）<span class="caution">不存在</span>，因为在插入时会自动创建。
    <li>第二句（insert into select from）要求目标表（destTbl）<span class="caution">存在</span>，由于目标表已经存在，所以我们除了插入源表（srcTbl）的字段外，还<span class="caution">可以插入常量</span>，如例中的：5。 </li>
</ul>
<p>列出所有的表名:<br />
select name from sysobjects where&nbsp;type='u'<br />
<br />
列出表中列名:&nbsp;<br />
select name from syscolumns where id=object_id(tablename)</p>
<br />
判断临时表是否存在<br />
&nbsp;if&nbsp;&nbsp; object_id('tempdb..#avg_tbl')&nbsp;&nbsp; is&nbsp; not null&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;print 'yes'<br />
else<br />
&nbsp;&nbsp;&nbsp;&nbsp;print 'no'<br />
<br /><img src ="http://www.blogjava.net/hulizhong/aggbug/266549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hulizhong/" target="_blank">二胡</a> 2009-04-20 13:56 <a href="http://www.blogjava.net/hulizhong/archive/2009/04/20/266549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转  Oracle 10G -- Pl/sql 基础  </title><link>http://www.blogjava.net/hulizhong/archive/2009/03/25/261824.html</link><dc:creator>二胡</dc:creator><author>二胡</author><pubDate>Wed, 25 Mar 2009 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/hulizhong/archive/2009/03/25/261824.html</guid><wfw:comment>http://www.blogjava.net/hulizhong/comments/261824.html</wfw:comment><comments>http://www.blogjava.net/hulizhong/archive/2009/03/25/261824.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hulizhong/comments/commentRss/261824.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hulizhong/services/trackbacks/261824.html</trackback:ping><description><![CDATA[转 http://www.blogjava.net/bibi/archive/2006/08/21/64890.html<br />
<br />
<h1 style="margin: 17pt 0cm 16.5pt 21pt;">
<span lang="EN-US">
<span>1.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp; </span></span>
</span>
<span style="font-family: 宋体;">简介</span>
</h1>
<h2 style="margin: 13pt 0cm 13pt 49.6pt;">
<span lang="EN-US">
<span>
<font face="Arial">1.1</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span style="font-family: 黑体;">结构</span>
</h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span lang="EN-US">DECLARE -- </span>
<span style="font-family: 宋体;">定义</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span lang="EN-US">BEGIN<span>&nbsp; </span>--</span>
<span style="font-family: 宋体;">执行部分</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span lang="EN-US">EXCEPTION<span>&nbsp; </span>--</span>
<span style="font-family: 宋体;">例外处理</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span lang="EN-US">END;<span>&nbsp; </span>--</span>
<span style="font-family: 宋体;">结束</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">set</span>
</strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> serveroutput <strong>on</strong>;<br />
<strong>DECLARE</strong> v_ename <strong>VARCHAR2</strong>(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">5</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">);<br />
<strong>BEGIN</strong><br />
<strong>SELECT</strong> ename <strong>INTO</strong> v_ename <strong>FROM</strong> emp <strong>WHERE</strong> empno=&amp;<strong>no</strong>;<br />
dbms_output.put_line(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">'&#185;&#205;&#212;&#177;&#195;&#251;:'</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> || v_ename);<br />
<strong>EXCEPTION</strong><br />
<strong>WHEN</strong> NO_DATA_FOUND <strong>THEN</strong><br />
dbms_output.put_line(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">'please input correct employees no!'</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">);<br />
<strong>END</strong>;<br />
/</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<h2 style="margin: 13pt 0cm 13pt 49.6pt;">
<span lang="EN-US">
<span>
<font face="Arial">1.2</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span style="font-family: 黑体;">块分类</span>
</h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span lang="EN-US">&lt;&lt;outer&gt;&gt; &lt;&lt;inner&gt;&gt;</span>
</p>
<h2 style="margin: 13pt 0cm 13pt 49.6pt;">
<span lang="EN-US">
<span>
<font face="Arial">1.3</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span style="font-family: 黑体;">子程序</span>
</h2>
<h3 style="margin: 13pt 0cm 13pt 70.9pt;">
<span lang="EN-US">
<span>
<font size="5">1.1.1</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span style="font-family: 宋体;">
<font size="5">过程</font>
</span>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-family: 宋体;">执行特定的操作</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span lang="EN-US">
<span>&nbsp;</span>
</span>
<strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">CREATE or replace</span>
</strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<strong>PROCEDURE</strong> update_sal(<strong>name</strong><strong>VARCHAR2</strong>,newsal <strong>NUMBER</strong>)<br />
<strong>IS</strong><br />
<strong>BEGIN</strong><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>UPDATE</strong> emp <strong>SET</strong> sal=newsal <strong>WHERE</strong> lower(ename)=lower(<strong>name</strong>);<br />
<strong>END</strong>;<br />
/<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 宋体;">调用：</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<o:p>
</o:p>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">e<strong>xec</strong> update_sal(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">'SMITH'</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">,</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">10</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">)<br />
<strong>call</strong> update_sal(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">'SMITH'</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">,</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">800</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">)<o:p></o:p></span>
</p>
<h3 style="margin: 13pt 0cm 13pt 70.9pt;">
<span lang="EN-US">
<span>
<font size="5">1.1.2</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span style="font-family: 宋体;">
<font size="5">函数</font>
</span>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-family: 宋体;">返回特定数据</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">CREATE</span>
</strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<strong>or</strong>
<strong>replace</strong>
<strong>FUNCTION</strong> annual_income(<strong>name</strong><strong>VARCHAR2</strong>)<br />
<strong>RETURN</strong><strong>NUMBER</strong><strong>IS</strong><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>annual_salary <strong>NUMBER</strong>(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">7</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">,</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">2</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">);<br />
<strong>BEGIN</strong><br />
<strong>SELECT</strong> sal*</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">12</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> + nvl(comm,</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">0</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">)<span>&nbsp; </span><strong>into</strong> annual_salary <strong>FROM</strong> emp <strong>WHERE</strong> lower(ename)=lower(<strong>name</strong>);<br />
<strong>RETURN</strong> annual_salary;<br />
<strong>END</strong>;<br />
/<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-family: 宋体;">调用</span>
<span lang="EN-US">:</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">SQL&gt; VAR income NUMBER<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">SQL&gt; CALL annual_income('scott') INTO : income;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 宋体;">调用完成。</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<o:p>
</o:p>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">SQL&gt; print income<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<span>&nbsp;&nbsp;&nbsp; </span>INCOME<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">----------<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>36000<o:p></o:p></span>
</p>
<h3 style="margin: 13pt 0cm 13pt 70.9pt;">
<span lang="EN-US">
<span>
<font size="5">1.1.3</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span style="font-family: 宋体;">
<font size="5">包</font>
</span>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-family: 宋体;">逻辑组合相关的过程和函数</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<em>
<span style="font-size: 8pt; color: red; font-family: 'Courier New';" lang="EN-US">--</span>
</em>
<em>
<span style="font-size: 8pt; color: red; font-family: 宋体;">包规范</span>
</em>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<br />
<strong>CREATE</strong>
<strong>or</strong>
<strong>replace</strong>
<strong>PACKAGE</strong> emp_pkg <strong>IS</strong><br />
<span>&nbsp; </span><strong>PROCEDURE</strong> update_sal(<strong>name</strong><strong>VARCHAR2</strong>, newsal <strong>NUMBER</strong>);<br />
<span>&nbsp; </span><strong>FUNCTION</strong> annual_income(<strong>name</strong><strong>VARCHAR2</strong>) <strong>RETURN</strong><strong>NUMBER</strong>;<br />
<strong>END</strong>;<br />
<br />
</span>
<em>
<span style="font-size: 8pt; color: red; font-family: 'Courier New';" lang="EN-US">--</span>
</em>
<em>
<span style="font-size: 8pt; color: red; font-family: 宋体;">包体</span>
</em>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<br />
<strong>CREATE</strong>
<strong>or</strong>
<strong>replace</strong>
<strong>PACKAGE</strong>
<strong>BODY</strong> emp_pkg <strong>IS</strong><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>PROCEDURE</strong> update_sal(<strong>name</strong><strong>VARCHAR2</strong>, newsal <strong>NUMBER</strong>) <br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>IS</strong><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>BEGIN</strong><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>UPDATE</strong> emp <strong>SET</strong> sal = newsal <strong>WHERE</strong> lower(ename) = lower(<strong>name</strong>);<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>END</strong>; <br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>FUNCTION</strong> annual_income(<strong>name</strong><strong>VARCHAR2</strong>) <strong>RETURN</strong><strong>NUMBER</strong><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>IS</strong><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>annual_salary <strong>NUMBER</strong>(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">7</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">, </span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">2</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">);<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>BEGIN</strong><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>SELECT</strong> sal * </span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">12</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> + nvl(comm, </span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">0</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">) <strong>into</strong> annual_salary <strong>FROM</strong> emp <strong>WHERE</strong> lower(ename) = lower(<strong>name</strong>); <br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>RETURN</strong> annual_salary;<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>END</strong>;<br />
<strong>END</strong>;<br />
/</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-family: 宋体;">调用：</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span lang="EN-US">SQL&gt; call </span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">emp_pkg</span>
<span lang="EN-US">.update_sal('SMITH',1500);</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span lang="EN-US">Or </span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">SQL&gt; VAR income NUMBER<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">SQL&gt; CALL emp_pkg</span>
<span lang="EN-US">.</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">annual_income('scott') INTO : income;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 宋体;">调用完成。</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<o:p>
</o:p>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">SQL&gt; print income<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<span>&nbsp;&nbsp;&nbsp; </span>INCOME<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">----------<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>36000</span>
</p>
<h2 style="margin: 13pt 0cm 13pt 49.6pt;">
<span lang="EN-US">
<span>
<font face="Arial">1.4</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span style="font-family: 黑体;">触发器</span>
</h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-family: 宋体;">是隐含执行的存储过程。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;">
<strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">create</span>
</strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<strong>or</strong>
<strong>replace</strong>
<strong>trigger</strong> update_cascade<br />
<span>&nbsp;</span><strong>after</strong><strong>update</strong><strong>of</strong> deptno <strong>on</strong> dept<br />
<span>&nbsp;</span><strong>for</strong><strong>each</strong><strong>row</strong><br />
<strong>begin</strong><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>update</strong> emp <strong>set</strong> deptno=:<strong>new</strong>.deptno<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>where</strong> deptno=:<strong>old</strong>.deptno;<br />
<strong>end</strong>;<br />
/<span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
</p>
<h1 style="margin: 17pt 0cm 16.5pt 21pt;">
<span lang="EN-US">
<span>2.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp; </span></span>
</span>
<span style="font-family: 宋体;">定义并使用变量</span>
</h1>
<h2 style="margin: 13pt 0cm 13pt 49.6pt;">
<span lang="EN-US">
<span>
<font face="Arial">1.5</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span style="font-family: 黑体;">标量变量</span>
</h2>
<h3 style="margin: 13pt 0cm 13pt 70.9pt;">
<span lang="EN-US">
<span>
<font size="5">1.1.4</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span style="font-family: 宋体;">
<font size="5">特殊变量说明</font>
</span>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">LONG(32760</span>
<span style="font-family: 宋体;">字节</span>
<span lang="EN-US">)</span>
<span style="font-family: 宋体;">与</span>
<span lang="EN-US">VARCHAR2(32767</span>
<span style="font-family: 宋体;">字节</span>
<span lang="EN-US">) </span>
<span style="font-family: 宋体;">类似，定义变长的字符串</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">LONG RAW</span>
<span style="font-family: 宋体;">用于定义变长的二进制数据</span>
<span lang="EN-US">(32760</span>
<span style="font-family: 宋体;">字节</span>
<span lang="EN-US">)</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">BINARY_INTEGER</span>
<span style="font-family: 宋体;">定义整数，范围为：</span>
<span lang="EN-US">-2147483647~2147483647 (</span>
<span style="font-family: 宋体;">非表列使用</span>
<span lang="EN-US">)</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">BOOLEAN </span>
<span style="font-family: 宋体;">为</span>
<span lang="EN-US">TRUE/FALSE/NULL (</span>
<span style="font-family: 宋体;">非表列使用</span>
<span lang="EN-US">)</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">BINARY_FLOAT/BINARY_DOUBLE</span>
<span style="font-family: 宋体;">：</span>
<span lang="EN-US"> ORACLE10</span>
<span style="font-family: 宋体;">所有</span>
</p>
<h3 style="margin: 13pt 0cm 13pt 70.9pt;">
<span lang="EN-US">
<span>
<font size="5">1.1.5</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span style="font-family: 宋体;">
<font size="5">定义使用</font>
</span>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">Identifier [CONSTANT] datatype [not null] [:= | default expr]</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">例如：</span>
<span lang="EN-US">v_valid BOOLEAN NOT NULL DEFAULT FALSE;</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">C_tax_rate CONSTANT NUMBER(3,2):=0.03;</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">V_ename emp.ename%TYPE;</span>
</p>
<h2 style="margin: 13pt 0cm 13pt 49.6pt;">
<span lang="EN-US">
<span>
<font face="Arial">1.6</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span style="font-family: 黑体;">复合变量</span>
</h2>
<h3 style="margin: 13pt 0cm 13pt 70.9pt;">
<span lang="EN-US">
<span>
<font size="5">1.1.6</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<font size="5">
<span lang="EN-US">Pl/sql</span>
<span style="font-family: 宋体;">记录</span>
</font>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">类似于高级语言中的结构</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">DECLARE</span>
</strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<br />
<strong>TYPE</strong> emp_record_type <strong>IS</strong><strong>RECORD</strong>(<br />
<span>&nbsp;&nbsp;&nbsp; </span><strong>name</strong> emp.ename%<strong>TYPE</strong>,<br />
<span>&nbsp;&nbsp;&nbsp; </span>salary emp.sal%<strong>TYPE</strong>,<br />
<span>&nbsp; </span>title emp.job%<strong>TYPE</strong><br />
);<br />
emp_record emp_record_type;<br />
<strong>BEGIN</strong><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>SELECT</strong> ename,sal,job <strong>INTO</strong> emp_record <strong>FROM</strong> emp <strong>WHERE</strong> empno=</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">7788</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">;<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>dbms_output.put_line(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">'</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 宋体;">雇员名</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">'</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">||emp_record.<strong>name</strong>);<br />
<strong>end</strong>;<br />
/<span>&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span>
</p>
<h3 style="margin: 13pt 0cm 13pt 70.9pt;">
<span lang="EN-US">
<span>
<font size="5">1.1.7</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<font size="5">
<span lang="EN-US">Pl/sql</span>
<span style="font-family: 宋体;">表</span>
</font>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">类似于高级语言中的数组，下标可以为负</span>
<span lang="EN-US">, </span>
<span style="font-family: 宋体;">个数无限制。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">DECLARE</span>
</strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<br />
<strong>TYPE</strong> ename_table_type <strong>IS</strong><strong>TABLE</strong><strong>OF</strong> emp.ename%<strong>TYPE</strong><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>INDEX</strong><strong>BY</strong><strong>BINARY_INTEGER</strong>;<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>ename_table ename_table_type;<br />
<strong>BEGIN</strong><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>SELECT</strong> ename<span>&nbsp; </span><strong>INTO</strong> ename_table(-</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">1</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">) <strong>FROM</strong> emp <strong>WHERE</strong> empno=</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">7788</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">;<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>dbms_output.put_line(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">'</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 宋体;">雇员名</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">'</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">||ename_table(-</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">1</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">));<br />
<strong>end</strong>;<br />
/<span>&nbsp;&nbsp;&nbsp;&nbsp; </span><br />
<br />
<o:p></o:p></span>
</p>
<h3 style="margin: 13pt 0cm 13pt 70.9pt;">
<span lang="EN-US">
<span>
<font size="5">1.1.8</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span style="font-family: 宋体;">
<font size="5">嵌套表</font>
</span>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">类似于高级语言中的数组，下标不可以为负，个数无限制。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">CREATE</span>
</strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<strong>OR</strong>
<strong>REPLACE</strong>
<strong>TYPE</strong> emp_type<span>&nbsp; </span><strong>AS</strong><strong>OBJECT</strong>(<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>name</strong><strong>VARCHAR2</strong>(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">10</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">),<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>salary <strong>NUMBER</strong>(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">6</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">,</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">2</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">),<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>hiredate <strong>DATE</strong><br />
);<br />
/<br />
<strong>CREATE</strong><strong>OR</strong><strong>REPLACE</strong><strong>TYPE</strong> emp_array <strong>IS</strong><strong>TABLE</strong><strong>OF</strong> emp_type;<br />
/<br />
<br />
<strong>CREATE</strong><strong>OR</strong><strong>REPLACE</strong><strong>table</strong> department(<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>deptno <strong>NUMBER</strong>(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">2</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">),<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>dname <strong>VARCHAR2</strong>(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">10</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">),<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>employee emp_array<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><br />
)<strong>nested</strong><strong>table</strong> employee <strong>store</strong><strong>as</strong> employee;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<h3 style="margin: 13pt 0cm 13pt 70.9pt;">
<span lang="EN-US">
<span>
<font size="5">1.1.9</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span lang="EN-US">
<font size="5">VARRAY<o:p></o:p></font>
</span>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">VARRAY</span>
<span style="font-family: 宋体;">类似于嵌套表，它可以作为表列和对象类型属性的数据类型，个数有限制。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">CREATE</span>
</strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<strong>OR</strong>
<strong>REPLACE</strong>
<strong>TYPE</strong> article_type<span>&nbsp; </span><strong>AS</strong><strong>OBJECT</strong>(<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>title <strong>VARCHAR2</strong>(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">30</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">),<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pubdate <strong>DATE</strong><br />
);<br />
/<br />
<strong>CREATE</strong><strong>OR</strong><strong>REPLACE</strong><strong>TYPE</strong> article_array <strong>IS</strong><strong>VARRAY</strong>(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">20</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">) <strong>OF</strong> article_type;<br />
/<br />
<br />
<strong>CREATE</strong><strong>OR</strong><strong>REPLACE</strong><strong>table</strong> author(<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>id</strong><strong>NUMBER</strong>(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">6</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">),<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>name</strong><strong>VARCHAR2</strong>(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">10</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">),<br />
<span>&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>article article_array<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><br />
);<o:p></o:p></span>
</p>
<h2 style="margin: 13pt 0cm 13pt 49.6pt;">
<span lang="EN-US">
<span>
<font face="Arial">1.7</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span style="font-family: 黑体;">参照变量</span>
<span lang="EN-US">
<o:p>
</o:p>
</span>
</h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">用于存放数值指针的变量。使得应用程序共享相同对象，从而降低占用空间。</span>
</p>
<h3 style="margin: 13pt 0cm 13pt 70.9pt;">
<span lang="EN-US">
<span>
<font size="5">1.1.10</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
</span>
</span>
</span>
<span lang="EN-US">
<font size="5">REF CURSOR</font>
</span>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">游标变量</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">DECLARE</span>
</strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<br />
<span>&nbsp; </span>
<strong>TYPE</strong> c1 <strong>IS</strong><strong>REF</strong><strong>CURSOR</strong>;<br />
<span>&nbsp; </span>emp_cursor c1;<br />
<span>&nbsp; </span>v_ename emp.ename%<strong>TYPE</strong>;<br />
<span>&nbsp; </span>v_sal<span>&nbsp;&nbsp; </span>emp.sal%<strong>TYPE</strong>;<br />
<strong>BEGIN</strong><br />
<span>&nbsp; </span><strong>OPEN</strong> emp_cursor <strong>FOR</strong><br />
<span>&nbsp;&nbsp;&nbsp; </span><strong>SELECT</strong> ename, sal <strong>FROM</strong> emp ;</span>
<em>
<span style="font-size: 8pt; color: red; font-family: 'Courier New';" lang="EN-US">--WHERE deptno = 10;</span>
</em>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<br />
<span>&nbsp; </span>
<strong>LOOP</strong>
<br />
<span>&nbsp;&nbsp;&nbsp; </span>
<strong>FETCH</strong> emp_cursor<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>INTO</strong> v_ename, v_sal;<br />
<span>&nbsp;&nbsp;&nbsp; </span><strong>EXIT</strong><strong>WHEN</strong> emp_cursor%<strong>NOTFOUND</strong>;<br />
<span>&nbsp;&nbsp;&nbsp; </span>dbms_output.put_line(v_ename);<br />
<span>&nbsp; </span><strong>END</strong><strong>LOOP</strong>;<br />
<span>&nbsp; </span><strong>CLOSE</strong> emp_cursor;<br />
<strong>END</strong>;<br />
/<o:p></o:p></span>
</p>
<h3 style="margin: 13pt 0cm 13pt 70.9pt;">
<span lang="EN-US">
<span>
<font size="5">1.1.11</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
</span>
</span>
</span>
<span lang="EN-US">
<font size="5">REF obj_type<o:p></o:p></font>
</span>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">为了共享相同对象，可以用</span>
<span lang="EN-US">ref</span>
<span style="font-family: 宋体;">引用对象类型。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">CREATE OR REPLACE TYPE home_type AS OBJECT(</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>street VARCHAR2(50),city VARCHAR2(20),</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>state VARCHAR2(20),zipcode VARCHAR2(6),</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>owner VARCHAR2(10)</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">);</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">/</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">CREATE TABLE homes OF home_type;</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">INSERT INTO homes VALUES('</span>
<span style="font-family: 宋体;">呼伦北路</span>
<span lang="EN-US">12</span>
<span style="font-family: 宋体;">号</span>
<span lang="EN-US">','</span>
<span style="font-family: 宋体;">呼和浩特</span>
<span lang="EN-US">','</span>
<span style="font-family: 宋体;">内蒙</span>
<span lang="EN-US">','010010','</span>
<span style="font-family: 宋体;">马鸣</span>
<span lang="EN-US">');</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">INSERT INTO homes VALUES('</span>
<span style="font-family: 宋体;">呼伦北路</span>
<span lang="EN-US">13</span>
<span style="font-family: 宋体;">号</span>
<span lang="EN-US">','</span>
<span style="font-family: 宋体;">呼和浩特</span>
<span lang="EN-US">','</span>
<span style="font-family: 宋体;">内蒙</span>
<span lang="EN-US">','010010','</span>
<span style="font-family: 宋体;">秦斌</span>
<span lang="EN-US">');</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">CREATE TABLE person(</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>id NUMBER(6) PRIMARY KEY,</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>name VARCHAR2(10), addr REF home_type</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">);</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">INSERT INTO<span>&nbsp; </span>person SELECT 1,'</span>
<span style="font-family: 宋体;">马鸣</span>
<span lang="EN-US">',ref(p) FROM homes p WHERE p.owner='</span>
<span style="font-family: 宋体;">马鸣</span>
<span lang="EN-US">';</span>
</p>
<h2 style="margin: 13pt 0cm 13pt 49.6pt;">
<span lang="EN-US">
<span>
<font face="Arial">1.8</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span lang="EN-US">
<font face="Arial">LOB</font>
</span>
<span style="font-family: 黑体;">变量</span>
</h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">内部</span>
<span lang="EN-US">: CLOB</span>
<span style="font-family: 宋体;">、</span>
<span lang="EN-US">BLOB</span>
<span style="font-family: 宋体;">、</span>
<span lang="EN-US">NCLOB</span>
<span style="font-family: 宋体;">；外部：</span>
<span lang="EN-US">BFILE</span>
<span style="font-family: 宋体;">。</span>
</p>
<h2 style="margin: 13pt 0cm 13pt 49.6pt;">
<span lang="EN-US">
<span>
<font face="Arial">1.9</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp; </span>
</span>
</span>
<span style="font-family: 黑体;">非</span>
<span lang="EN-US">
<font face="Arial">PL/SQL</font>
</span>
<span style="font-family: 黑体;">变量</span>
</h2>
<h3 style="margin: 13pt 0cm 13pt 70.9pt;">
<span lang="EN-US">
<span>
<font size="5">1.1.12</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
</span>
</span>
</span>
<font size="5">
<span style="font-family: 宋体;">使用</span>
<span lang="EN-US">sql*plus</span>
<span style="font-family: 宋体;">变量</span>
</font>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">var <strong>name</strong><strong>varchar2</strong>(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">10</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">)<br />
<strong>begin</strong><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>select</strong> ename <strong>into</strong> :<strong>name</strong><strong>from</strong> emp<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>where</strong> empno=</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">7788</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">;<br />
<strong>end</strong>;<br />
/<br />
print <strong>name</strong><span>&nbsp;&nbsp; </span><o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<h3 style="margin: 13pt 0cm 13pt 70.9pt;">
<span lang="EN-US">
<span>
<font size="5">1.1.13</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
</span>
</span>
</span>
<font size="5">
<span style="font-family: 宋体;">使用</span>
<span lang="EN-US">procedure Builder</span>
<span style="font-family: 宋体;">变量</span>
</font>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">.<strong>create</strong><strong>char</strong><strong>name</strong> length </span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">10</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<br />
<strong>begin</strong>
<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>
<strong>select</strong> ename <strong>into</strong> :<strong>name</strong><strong>from</strong> emp<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>where</strong> empno=</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">7788</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">;<br />
<strong>end</strong>;<br />
/<br />
text_to.put_line(:<strong>name</strong>);<span>&nbsp;&nbsp; </span></span>
</p>
<h3 style="margin: 13pt 0cm 13pt 70.9pt;">
<span lang="EN-US">
<span>
<font size="5">1.1.14</font>
<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
</span>
</span>
</span>
<font size="5">
<span style="font-family: 宋体;">使用</span>
<span lang="EN-US">pro*c/c++</span>
<span style="font-family: 宋体;">变量</span>
</font>
</h3>
<strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">char</span>
</strong>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">
<strong>name</strong>[</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">10</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">];<br />
<strong>exec</strong><strong>sql</strong><strong>execute</strong><br />
<strong>begin</strong><br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>select</strong> ename <strong>into</strong> :<strong>name</strong><strong>from</strong> emp<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>where</strong> empno=</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">7788</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">;<br />
<strong>end</strong>-<strong>exec</strong>;<br />
printf(</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">'</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 宋体;">雇员名：</span>
<span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New';" lang="EN-US">%s\n'</span>
<span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">,<strong>name</strong>);</span><br />
<br /><img src ="http://www.blogjava.net/hulizhong/aggbug/261824.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hulizhong/" target="_blank">二胡</a> 2009-03-25 11:24 <a href="http://www.blogjava.net/hulizhong/archive/2009/03/25/261824.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习笔记--PL/SQL入门</title><link>http://www.blogjava.net/hulizhong/archive/2009/03/16/260061.html</link><dc:creator>二胡</dc:creator><author>二胡</author><pubDate>Mon, 16 Mar 2009 09:43:00 GMT</pubDate><guid>http://www.blogjava.net/hulizhong/archive/2009/03/16/260061.html</guid><wfw:comment>http://www.blogjava.net/hulizhong/comments/260061.html</wfw:comment><comments>http://www.blogjava.net/hulizhong/archive/2009/03/16/260061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hulizhong/comments/commentRss/260061.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hulizhong/services/trackbacks/260061.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; pl/sql是一种高级数据库程序设计语言，用于在各种环境下对数据库进行访问。由于该语言集成于数据库服务器中，所以它可以对数据进行快速高效的处理。<br />
&nbsp;&nbsp;  pl/sql代表面向过程化的语言与SQL语言的结合。在SQL语言中扩展了面向过程语言中使用的程序结构。<br />
&nbsp;&nbsp; *变量和类型<br />
&nbsp;&nbsp; *控制语句和循环<br />
&nbsp;&nbsp; *过程和函数<br />
&nbsp;&nbsp; *对象类型和方法<br />
<br />
PL/SQL的基本特点：<br />
&nbsp;&nbsp; 块结构：<br />
&nbsp;&nbsp; PL/SQL程序的基本结构是块。所有的PL程序都是由块组成，这些块可以互相签套。通常，程序中的每一块都实现一个逻辑操作，从而把不同的任务进行分割。<br />
&nbsp;&nbsp;&nbsp; DECLARE<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; declare variables,types,cursors and local&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; subprograms <br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; executable section<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp; EXCEPTION<br />
&nbsp;&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exception -handling<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 执行部分是必须的，声明部分和异常处理部分是可选的。PL/SQL块采用这种分段结构将程序不同功能各自独立出来。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 变量和类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 信息在数据库与PL/SQL程序间通过变量进行传递的。变量是在PL/SQL块的生命部分定义的。变量还支持自定义的数据类型，如记录类型等，使用用户自定义的数据类型可以让你定制程序中使用的数据类型结构。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECLARE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE T_stu&nbsp; IS RECORD(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; firstname VARCHAR2(10)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v_student T_stu;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 游标<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 游标是用来处理使用SELECT语句从数据库中检琐到的多行记录的工具。数据库应用程序可以对一组记录逐个进行处理，每次处理一行。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 过程和函数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是PL/SQL块的一种特殊类型，可以以编译的形式存放在数据库中，为以后的程序块调用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包有2部分组成：说明部分和包体。一个包可以带有多个相关的过程。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 动态SQL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在运行期间构造并执行SQL语句。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对象类型（oracle8上的版本）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由属性和方法组成并可以存储在数据库表中。<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><img src ="http://www.blogjava.net/hulizhong/aggbug/260061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hulizhong/" target="_blank">二胡</a> 2009-03-16 17:43 <a href="http://www.blogjava.net/hulizhong/archive/2009/03/16/260061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>