﻿<?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-大大野猪的窝-随笔分类-Database</title><link>http://www.blogjava.net/kylixlu/category/28124.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 28 Feb 2008 09:30:01 GMT</lastBuildDate><pubDate>Thu, 28 Feb 2008 09:30:01 GMT</pubDate><ttl>60</ttl><item><title>修复ORACLE92i TNS-12545: 因目标主机或对象不存在，连接失败 错误</title><link>http://www.blogjava.net/kylixlu/archive/2008/02/27/182403.html</link><dc:creator>陆昱相</dc:creator><author>陆昱相</author><pubDate>Wed, 27 Feb 2008 02:16:00 GMT</pubDate><guid>http://www.blogjava.net/kylixlu/archive/2008/02/27/182403.html</guid><wfw:comment>http://www.blogjava.net/kylixlu/comments/182403.html</wfw:comment><comments>http://www.blogjava.net/kylixlu/archive/2008/02/27/182403.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kylixlu/comments/commentRss/182403.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kylixlu/services/trackbacks/182403.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 昨天把公司机器关了,今天早上发现ORACLE启动不了,输入cmd-&gt;lsnrctl后,出现如下错误,<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/kylixlu/oracle_error.JPG" /><br />
&nbsp;&nbsp;&nbsp; 经查资料,发现是主机名可能解析有问题,后来在D:\oracle\ora92\network\admin下打开listener.ora文件后将HOST后的主机名 (ADDRESS = (PROTOCOL = TCP)(HOST = SUZSOFT-8CB5627)(PORT = 1521))<br />
改成IP即可解决上面遇到问题 (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.7.115)(PORT = 1521))<br />
<br />
<img src ="http://www.blogjava.net/kylixlu/aggbug/182403.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kylixlu/" target="_blank">陆昱相</a> 2008-02-27 10:16 <a href="http://www.blogjava.net/kylixlu/archive/2008/02/27/182403.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle9i中的一个特殊等待事件</title><link>http://www.blogjava.net/kylixlu/archive/2008/02/15/179988.html</link><dc:creator>陆昱相</dc:creator><author>陆昱相</author><pubDate>Thu, 14 Feb 2008 17:03:00 GMT</pubDate><guid>http://www.blogjava.net/kylixlu/archive/2008/02/15/179988.html</guid><wfw:comment>http://www.blogjava.net/kylixlu/comments/179988.html</wfw:comment><comments>http://www.blogjava.net/kylixlu/archive/2008/02/15/179988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kylixlu/comments/commentRss/179988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kylixlu/services/trackbacks/179988.html</trackback:ping><description><![CDATA[很多人也许并不清楚，null event其实不是空事件，因为不是没有等待事件，而是Oracle忘记了刚才等待的事件的名字具体是什么了，但却保留了该事件的真实情况。Oracle的开发人员直到9.2.0.3才更新了这些事件的名称。
<p><font face="Times New Roman">　　那是不是我们每当遇到性能问题的时候都要patch到9.2.0.3呢？</font></p>
<p><font face="Times New Roman">　　我们已经知道他的真实情况依然在v$session_wait的p1、p2、p3参数里体现，所以，我们可以根据这些参数，找出这个null event究竟是什么等待事件。</font></p>
<p><font face="Times New Roman">　　相关信息：</font></p>
<p><font face="Times New Roman">　　1. lck processes to pick up extra or missed 'posts' （messages）。</font></p>
<p><font face="Times New Roman">　　in all cases that can be identified the wait time is zero，</font></p>
<p><font face="Times New Roman">　　although on most ports this is changed to 1/100th second in</font></p>
<p><font face="Times New Roman">　　order to force the process to be rescheduled.</font></p>
<p><font face="Times New Roman">　　2. multiple db writers.</font></p>
<p><font face="Times New Roman">　　two cases：</font></p>
<p><font face="Times New Roman">　　- when the master has sent i/o requests to the slaves， it</font></p>
<p><font face="Times New Roman">　　waits on this event for up to 6 seconds until the slaves</font></p>
<p><font face="Times New Roman">　　signal that the i/o is complete.</font></p>
<p><font face="Times New Roman">　　- the slaves wait on this event for up to 3 seconds whilst</font></p>
<p><font face="Times New Roman">　　waiting for requests from the master db writer.</font></p>
<p><font face="Times New Roman">　　目前已经被证实的会涉及到null event</font></p>
<p><font face="Times New Roman">　　的等待事件还有有sql.net message to client、</font></p>
<p><font face="Times New Roman">　　db file scattered （or sequential） read</font></p>
<img src ="http://www.blogjava.net/kylixlu/aggbug/179988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kylixlu/" target="_blank">陆昱相</a> 2008-02-15 01:03 <a href="http://www.blogjava.net/kylixlu/archive/2008/02/15/179988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 11g最有特点的五大特性</title><link>http://www.blogjava.net/kylixlu/archive/2008/02/15/179986.html</link><dc:creator>陆昱相</dc:creator><author>陆昱相</author><pubDate>Thu, 14 Feb 2008 17:01:00 GMT</pubDate><guid>http://www.blogjava.net/kylixlu/archive/2008/02/15/179986.html</guid><wfw:comment>http://www.blogjava.net/kylixlu/comments/179986.html</wfw:comment><comments>http://www.blogjava.net/kylixlu/archive/2008/02/15/179986.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kylixlu/comments/commentRss/179986.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kylixlu/services/trackbacks/179986.html</trackback:ping><description><![CDATA[与无压缩格式下存储数据相比，新的Oracle数据压缩技术能够确保以较小的开销节省三倍以上的磁盘存储空间。这一点比仅节省磁盘空间要具有更大的优势，因为它能够使企业节约更多的开支，以便有更多的资金来巩固自己的地位。
<p><font face="Times New Roman">　　自动诊断知识库（Automatic Diagnostic Repository，ADR）是专门针对严重错误的知识库。该知识库基本上能够自动完成一些以往需要由数据库管理员来手动完成的操作。</font></p>
<p><font face="Times New Roman">　　作为ADR的一部分，SQL性能分析器（SQL Performance Analyzer，SPA）是最让人惊喜的特性之一。SQL性能分析器是一个整体调整工具，管理员可以通过该工具在数据库上定义和重演（replay） 一个典型的工作负载，之后管理员可以调节整体参数来使数据库尽快的达到最佳性能——而这一任务同样也是许多年以来由数据库管理员手动完成的。</font></p>
<p><font face="Times New Roman">　　由于获得了最优的初始参数，数据库管理员就不需要调整数以万计的SQL语句。管理员需要做的就是给定一个典型的负载 ，由SAP根据历史记录来决定SQL的最终设置，而不用管理员来检测哪一个SQL设置是最合理的。</font></p>
<p><font face="Times New Roman">　　多年以来，甲骨文公司一直在努力完成地另一个新特性便是&#8220;联机更新&#8221;（在不down机的情况下更新软件）。实际上，很难从软件工程的角度来设计一个运行时能自动升级的软件。由于真正的应用集群（Real Application Clusters ，RAC）特性，甲骨文公司再一次对其他的数据库供应商造成了更大的压力。在实际的使用过程中，数据库产品的用户总是希望产品有持续的高可用性，这并不是说只需满足下次补丁更新之前的3年的时间就够了。</font></p>
<p><font face="Times New Roman">　　自动内存管理特性可以追根溯源至Oracle 9i，那时甲骨文公司推出首款自动调节存储池的工具。AMM工具其实就是一种探测机制。实际上，Oracle 11g 有很多随机访问存储池，当AMM探测到某个存储池中已满时，它将整个RAM从一个区域分配到其他相对合适的区域。</font></p>
<img src ="http://www.blogjava.net/kylixlu/aggbug/179986.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kylixlu/" target="_blank">陆昱相</a> 2008-02-15 01:01 <a href="http://www.blogjava.net/kylixlu/archive/2008/02/15/179986.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用SQL Server 2005 实现结果集分页 </title><link>http://www.blogjava.net/kylixlu/archive/2008/01/20/176624.html</link><dc:creator>陆昱相</dc:creator><author>陆昱相</author><pubDate>Sun, 20 Jan 2008 12:21:00 GMT</pubDate><guid>http://www.blogjava.net/kylixlu/archive/2008/01/20/176624.html</guid><wfw:comment>http://www.blogjava.net/kylixlu/comments/176624.html</wfw:comment><comments>http://www.blogjava.net/kylixlu/archive/2008/01/20/176624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kylixlu/comments/commentRss/176624.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kylixlu/services/trackbacks/176624.html</trackback:ping><description><![CDATA[<div id="article"><font face="Times New Roman">介绍<br />
有了SQL Server 2005之后，我们使用分页查询比老版本容易多了。在本文中，我将主要用到的是NorthWind数据库，所以你也可以仿照编写我所列举的范例。我尽量使例子简单化;因为任何复杂的东西都会都会造成混淆。我将从&#8220;传统&#8221;的方法着手，比如：SELECT, TOP，然后慢慢进入具体的SQL Server 2005 分页的例子。<br />
背景<br />
我常常会被问到这样的一个问题或者说一系列这样的问题，&#8220;你如何在SQL中进行分页？在有很多个记录的情况下，你又如何做，比如10000个记录或者更多呢？<br />
我思索着答案。更确切地说，我考虑了更多的问题并且我都认真去思考，&#8220;这必定是一个普篇的问题，每一个开发人员必须处理或者说解决的。具有非常大的数据库集的工作和分页大小是怎样的？从多种表所得到的结果集又是如何？&#8221;<br />
因此，我决定具体结合SQL Server 2005来研究这些问题。下面的方法是至今为止最容易的，建议采纳。但是这是非常罕见的，并非易事。<br />
&nbsp;<br />
select * from mytable<br />
Where ID between20and30<br />
&nbsp;<br />
SQL Top<br />
SQL Top（从结果集返回记录）非常善于从结果集的每个尾部返回大量的记录。<br />
下面的例子通过命令qty获得了前10名顾客。在论坛上这是一个非常普骗的问题。尽管TOP也可以拉动一定百分比的记录，但是我们这里不讨论。<br />
&nbsp;<br />
selecttop10 * from customers -- This is a very basic example.<br />
selectTOP10 Customers.CustomerID, Customers.CompanyName, count(*) OrderCount<br />
from Customers innerjoin Orders on Orders.CustomerID = Customers.CustomerID<br />
GROUPBY Customers.CustomerID, Customers.CompanyName<br />
ORDERBY OrderCount DESC<br />
&nbsp;<br />
这是很有用的。当你要把记录从11拉到20时，你就可以使用临时表。<br />
&nbsp;<br />
-- SELECT First 30 records in to Temp table<br />
SELECTTOP30 * INTO<br />
#TEMP<br />
from Customers<br />
ORDERBY CompanyName ASC<br />
&nbsp;<br />
--Select Bottom 10 records in another temp table<br />
&nbsp;<br />
SELECTTOP10 * <br />
INTO #TEMP2<br />
from #Temp<br />
ORDERBY CompanyName DESC<br />
&nbsp;<br />
-- GET THE RECORDS<br />
&nbsp;<br />
SELECT * FROM #TEMP2<br />
&nbsp;<br />
这对少数前几个页面或者前几个用户是种惩罚。如果拥有这样的用户，他们想从一页一页之后返回页面，你将以使1000条记录返回10条来结束，这是非常低效的。你可以在第一个临时表中内置一个身份，然后用一个SELECT声明来作替代。<br />
TOP的替代<br />
有一个这样的TOP替代，它使用的是rowcount（行计数）。使用行计数要小心。如果它不关闭的话，将你将陷入各种各样的困境。<br />
SETrowcount10<br />
SELECT * from Customers<br />
ORDERBY CompanyName<br />
WITH, ROW_NUMBER （行数）and OVER <br />
这对SQL Server 2005来说非常新鲜并且看上去非常有用。下面一个例子显示从一个结果集得到20至19条记录。刚开始，我有一点惊奇，但是我浏览了查询器后我发现它是如此简单。<br />
With Cust AS<br />
&nbsp;&nbsp;&nbsp; ( SELECT CustomerID, CompanyName,<br />
&nbsp;&nbsp;&nbsp; ROW_NUMBER() OVER (orderby CompanyName) as RowNumber <br />
&nbsp;&nbsp;&nbsp; FROM Customers )<br />
select *<br />
from Cust<br />
Where RowNumber Between20and30<br />
SQL Server 2005的WITH指定了一个临时命名的结果，很像SQL Server以前版本中的临时表。但是，输入部分是ROW_NUMBER和OVER声明，它根据公司的名称在每组中创建行数。这就像通过命令条文向临时表添加一个身份种子。<br />
我希望你赞成我的看法。如果不，运行代码并查看结果集。对大表来说速度真的非常快;表的速度超过250，000条记录，对此我留下了深刻的印象。<br />
一起整合到储存过程中<br />
现在我们把它一起整合到储存过程，这个储存过程我们可以通过应用程序来使用。我不打算展示.NET Datagrid或者相似的控件，因为是本文探讨范围之外。下面看到的储存过程使用了灵活的页面大小和页面数目，所以你可以随意地选择任何页面。这样，如果你想跳过前十页去寻找某一条记录就非常方便了。下面的例子是从第一页开始分页的，而不是从第0页，但也可以随意更改。<br />
&nbsp;<br />
CREATEPROC GetCustomersByPage<br />
&nbsp;<br />
@PageSize int, @PageNumber int<br />
&nbsp;<br />
AS<br />
&nbsp;<br />
Declare @RowStart int<br />
Declare @RowEnd int<br />
&nbsp;<br />
if @PageNumber &gt; 0<br />
Begin<br />
&nbsp;<br />
SET @PageNumber = @PageNumber -1 <br />
&nbsp;<br />
SET @RowStart = @PageSize * @PageNumber + 1; <br />
SET @RowEnd = @RowStart + @PageSize - 1 ; <br />
&nbsp;<br />
With Cust AS <br />
&nbsp;&nbsp;&nbsp;&nbsp; ( SELECT CustomerID, CompanyName, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ROW_NUMBER() OVER (orderby CompanyName) as RowNumber <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM Customers ) <br />
&nbsp;<br />
select * <br />
from Cust <br />
Where RowNumber &gt;= @RowStart and RowNumber &lt;= @RowEnd end<br />
&nbsp;<br />
END<br />
运行这个程序，仅需指定页面大小和页数目(GetCustomersByPage, @PageSize and @PageNumber)，代码如下：<br />
exec GetCustomersByPage 10, 1</font> </div>
<img src ="http://www.blogjava.net/kylixlu/aggbug/176624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kylixlu/" target="_blank">陆昱相</a> 2008-01-20 20:21 <a href="http://www.blogjava.net/kylixlu/archive/2008/01/20/176624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修复oracle 9i Listener出错</title><link>http://www.blogjava.net/kylixlu/archive/2008/01/13/174961.html</link><dc:creator>陆昱相</dc:creator><author>陆昱相</author><pubDate>Sun, 13 Jan 2008 04:38:00 GMT</pubDate><guid>http://www.blogjava.net/kylixlu/archive/2008/01/13/174961.html</guid><wfw:comment>http://www.blogjava.net/kylixlu/comments/174961.html</wfw:comment><comments>http://www.blogjava.net/kylixlu/archive/2008/01/13/174961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kylixlu/comments/commentRss/174961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kylixlu/services/trackbacks/174961.html</trackback:ping><description><![CDATA[<div class="t_msgfont" id="message469149">出错状况:</div>
<div class="t_msgfont">我用的是Windows XP，在&#8220;服务&#8221;中启动&#8220;OracleOraHome90TNSListener&#8221;失败，说是<br />
在 本地计算机 无法启动 OracleOraHome90TNSListener 服务。<br />
<br />
错误 3: 系统找不到指定的路径。<br />
<br />
于是，我在CMD中输入&#8220;LSNRCTL&#8221;<br />
<br />
LSNRCTL for 32-bit Windows: Version 9.0.1.1.1 - Production on 28-1月 -2005 10:56<br />
:54<br />
<br />
Copyright (c) 1991, 2001, Oracle Corporation.&nbsp;&nbsp;All rights reserved.<br />
<br />
欢迎来到LSNRCTL，请键入"help"以获得信息。<br />
<br />
LSNRCTL&gt; start<br />
启动tnslsnr：请稍候...<br />
<br />
Failed to start service, error 3.<br />
TNS-12560: TNS: 协议适配器错误<br />
TNS-00530: 协议适配器错误<br />
&nbsp;&nbsp;32-bit Windows Error: 3: No such process<br />
</div>
<div class="t_msgfont">&nbsp;</div>
<div class="t_msgfont">&nbsp;</div>
<div class="t_msgfont">解决办法:</div>
<div class="t_msgfont">1.你修改了主机名,如果是的话,你可以把主机名改回来,然后重起计算机后,就可以找到监听程序了.<br />
2.由于你的错误删除了监听程序的路径,要恢复很简单:点开始-&gt;运行输入"regedit"然后在查找里输入OracleOraHome90TNSListener去查找.如果找到后你就要增加一项ImagePath,定义成字符集,路径为: "盘符:\oracle\ora90\bin\tnslsnr".添加完后继续按F3来找!修改同上.至到搜索完毕为止!此方法成功几率为90%以上</div>
<img src ="http://www.blogjava.net/kylixlu/aggbug/174961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kylixlu/" target="_blank">陆昱相</a> 2008-01-13 12:38 <a href="http://www.blogjava.net/kylixlu/archive/2008/01/13/174961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL中NULL的问题</title><link>http://www.blogjava.net/kylixlu/archive/2007/12/26/170527.html</link><dc:creator>陆昱相</dc:creator><author>陆昱相</author><pubDate>Wed, 26 Dec 2007 03:17:00 GMT</pubDate><guid>http://www.blogjava.net/kylixlu/archive/2007/12/26/170527.html</guid><wfw:comment>http://www.blogjava.net/kylixlu/comments/170527.html</wfw:comment><comments>http://www.blogjava.net/kylixlu/archive/2007/12/26/170527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kylixlu/comments/commentRss/170527.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kylixlu/services/trackbacks/170527.html</trackback:ping><description><![CDATA[<p>e.g : column_name IS NULL不可以写成column_name=NULL;除了IS[NOT] NULL之外，空值不满足任何查找条件；如果NULL参与算术运算，则结果可视为False，在SQL-92中可看成UNKNOWN;如果NULL参与聚集运算，则除count(*)之外其他聚集函数都忽略NULL。</p>
<img src ="http://www.blogjava.net/kylixlu/aggbug/170527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kylixlu/" target="_blank">陆昱相</a> 2007-12-26 11:17 <a href="http://www.blogjava.net/kylixlu/archive/2007/12/26/170527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Select语句的执行步骤</title><link>http://www.blogjava.net/kylixlu/archive/2007/12/26/170521.html</link><dc:creator>陆昱相</dc:creator><author>陆昱相</author><pubDate>Wed, 26 Dec 2007 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/kylixlu/archive/2007/12/26/170521.html</guid><wfw:comment>http://www.blogjava.net/kylixlu/comments/170521.html</wfw:comment><comments>http://www.blogjava.net/kylixlu/archive/2007/12/26/170521.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kylixlu/comments/commentRss/170521.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kylixlu/services/trackbacks/170521.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt">当执行Select语句时，DBMS的执行步骤表示如下：<br />
</span><br />
<span style="font-size: 12pt; font-family: 宋体">(1)执行FORM子句,根据FROM子句中的一个或多个表创建工作表。如果在FROM子句中有两个或多个表，DBMS将对表进行交叉连接，作为工作表。<br style="font-family: " />
<br style="font-family: " />
(2)如果有WHERE子句，DBMS将WHERE子句列出的搜索条件作用于步骤(1)生成的工作表。DBMS将保留那些满足搜索条件的行，删除那些不满足搜索条件的行。<br style="font-family: " />
<br style="font-family: " />
(3)如果有GROUP BY子句，DBMS将步骤(2)生成的结果表中的行分成多个组，每个组所有行的group_by_expression字段具有相同的值，DBMS将每组减少到单行，然后将其添加到新的结果表中。<br style="font-family: " />
<br style="font-family: " />
(4)如果有HAVING子句，DBMS将HAVING子句列出的搜索条件作用于步骤(3)生成的&#8220;组合&#8221;表中的每一行。DBMS将保留那些满足搜索条件的行，删除那些不满足搜索条件的行。<br style="font-family: " />
<br style="font-family: " />
(5)将SELECT子句作用于结果表。删除结果表中不包含在select_list中的列。如果SELECT子句包含DISTINCT关键字，DBMS将从结果中删除重复的行。<br />
<br />
(6)如果有ORDER BY子句，按指定的排序规则对结果进行排序。<br />
<br />
(7)对于交互式的SELECT语句，在屏幕上显示结果，对于嵌入式SQL，使用游标将结果传递给宿主程序中。<br />
<br />
&nbsp; 以上就是SQL SELECT语句的基本执行过程。</span>
 <img src ="http://www.blogjava.net/kylixlu/aggbug/170521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kylixlu/" target="_blank">陆昱相</a> 2007-12-26 10:49 <a href="http://www.blogjava.net/kylixlu/archive/2007/12/26/170521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQLServer和Oracle常用函数对比</title><link>http://www.blogjava.net/kylixlu/archive/2007/12/24/169942.html</link><dc:creator>陆昱相</dc:creator><author>陆昱相</author><pubDate>Mon, 24 Dec 2007 01:59:00 GMT</pubDate><guid>http://www.blogjava.net/kylixlu/archive/2007/12/24/169942.html</guid><wfw:comment>http://www.blogjava.net/kylixlu/comments/169942.html</wfw:comment><comments>http://www.blogjava.net/kylixlu/archive/2007/12/24/169942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kylixlu/comments/commentRss/169942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kylixlu/services/trackbacks/169942.html</trackback:ping><description><![CDATA[数学函数：<br />
1.绝对值 <br />
S:select abs(-1) value <br />
O:select abs(-1) value from dual <br />
<br />
2.取整(大) <br />
S:select ceiling(-1.001) value <br />
O:select ceil(-1.001) value from dual <br />
<br />
3.取整（小） <br />
S:select floor(-1.001) value <br />
O:select floor(-1.001) value from dual <br />
<br />
4.取整（截取） <br />
S:select cast(-1.002 as int) value <br />
O:select trunc(-1.002) value from dual <br />
<br />
5.四舍五入 <br />
S:select round(1.23456,4) value 1.23460 <br />
O:select round(1.23456,4) value from dual 1.2346 <br />
<br />
6.e为底的幂 <br />
S:select Exp(1) value 2.7182818284590451 <br />
O:select Exp(1) value from dual 2.71828182 <br />
<br />
7.取e为底的对数 <br />
S:select log(2.7182818284590451) value 1 <br />
O:select ln(2.7182818284590451) value from dual; 1 <br />
<br />
8.取10为底对数 <br />
S:select log10(10) value 1 <br />
O:select log(10,10) value from dual; 1 <br />
<br />
9.取平方 <br />
S:select SQUARE(4) value 16 <br />
O:select power(4,2) value from dual 16 <br />
<br />
10.取平方根 <br />
S:select SQRT(4) value 2 <br />
O:select SQRT(4) value from dual 2 <br />
<br />
11.求任意数为底的幂 <br />
S:select power(3,4) value 81 <br />
O:select power(3,4) value from dual 81 <br />
<br />
12.取随机数 <br />
S:select rand() value <br />
O:select sys.dbms_random.value(0,1) value from dual; <br />
<br />
13.取符号 <br />
S:select sign(-8) value -1 <br />
O:select sign(-8) value from dual -1 <br />
<br />
14.圆周率 <br />
S:SELECT PI() value 3.1415926535897931 <br />
O:不知道 <br />
<br />
15.sin,cos,tan 参数都以弧度为单位 <br />
例如：select sin(PI()/2) value 得到1（SQLServer） <br />
<br />
16.Asin,Acos,Atan,Atan2 返回弧度 <br />
<br />
17.弧度角度互换(SQLServer，Oracle不知道) <br />
DEGREES：弧度-〉角度 <br />
RADIANS：角度-〉弧度 <br />
数值间比较：<br />
18. 求集合最大值 <br />
S:select max(value) value from <br />
(select 1 value <br />
union <br />
select -2 value <br />
union <br />
select 4 value <br />
union <br />
select 3 value)a <br />
<br />
O:select greatest(1,-2,4,3) value from dual <br />
<br />
19. 求集合最小值 <br />
S:select min(value) value from <br />
(select 1 value <br />
union <br />
select -2 value <br />
union <br />
select 4 value <br />
union <br />
select 3 value)a <br />
<br />
O:select least(1,-2,4,3) value from dual <br />
<br />
20.如何处理null值(F2中的null以10代替) <br />
S:select F1,IsNull(F2,10) value from Tbl <br />
O:select F1,nvl(F2,10) value from Tbl <br />
<br />
21.求字符序号 <br />
S:select ascii('a') value <br />
O:select ascii('a') value from dual <br />
<br />
22.从序号求字符 <br />
S:select char(97) value <br />
O:select chr(97) value from dual <br />
<br />
23.连接 <br />
S:select '11'+'22'+'33' value <br />
O:select CONCAT('11','22')　　33 value from dual <br />
<br />
23.子串位置 --返回3 <br />
S:select CHARINDEX('s','sdsq',2) value <br />
O:select INSTR('sdsq','s',2) value from dual <br />
<br />
23.模糊子串的位置 --返回2,参数去掉中间%则返回7 <br />
S:select patindex('%d%q%','sdsfasdqe') value <br />
O:oracle没发现，但是instr可以通过第四个参数控制出现次数 <br />
select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6 <br />
<br />
24.求子串 <br />
S:select substring('abcd',2,2) value <br />
O:select substr('abcd',2,2) value from dual <br />
<br />
25.子串代替 返回aijklmnef <br />
S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value <br />
O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual <br />
<br />
26.子串全部替换 <br />
S:没发现 <br />
O:select Translate('fasdbfasegas','fa','我' ) value from dual <br />
<br />
27.长度 <br />
S:len,datalength <br />
O:length <br />
<br />
28.大小写转换 lower,upper <br />
<br />
29.单词首字母大写 <br />
S:没发现 <br />
O:select INITCAP('abcd dsaf df') value from dual <br />
<br />
30.左补空格（LPAD的第一个参数为空格则同space函数） <br />
S:select space(10)+'abcd' value <br />
O:select LPAD('abcd',14) value from dual <br />
<br />
31.右补空格（RPAD的第一个参数为空格则同space函数） <br />
S:select 'abcd'+space(10) value <br />
O:select RPAD('abcd',14) value from dual <br />
<br />
32.删除空格 <br />
S:ltrim,rtrim <br />
O:ltrim,rtrim,trim <br />
<br />
33. 重复字符串 <br />
S:select REPLICATE('abcd',2) value <br />
O:没发现 <br />
<br />
34.发音相似性比较(这两个单词返回值一样，发音相同) <br />
S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') <br />
O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual <br />
SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差 <br />
返回0-4，4为同音，1最高 <br />
日期函数：<br />
35.系统时间 <br />
S:select getdate() value <br />
O:select sysdate value from dual <br />
<br />
36.前后几日 <br />
直接与整数相加减 <br />
<br />
37.求日期 <br />
S:select convert(char(10),getdate(),20) value <br />
O:select trunc(sysdate) value from dual <br />
select to_char(sysdate,'yyyy-mm-dd') value from dual <br />
<br />
38.求时间 <br />
S:select convert(char(8),getdate(),108) value <br />
O:select to_char(sysdate,'hh24:mm:ss') value from dual <br />
<br />
39.取日期时间的其他部分 <br />
S:DATEPART 和 DATENAME 函数 （第一个参数决定） <br />
O:to_char函数 第二个参数决定 <br />
<br />
参数---------------------------------下表需要补充 <br />
year yy, yyyy <br />
quarter qq, q (季度) <br />
month mm, m (m O无效) <br />
dayofyear dy, y (O表星期) <br />
day dd, d (d O无效) <br />
week wk, ww (wk O无效) <br />
weekday dw (O不清楚) <br />
Hour hh,hh12,hh24 (hh12,hh24 S无效) <br />
minute mi, n (n O无效) <br />
second ss, s (s O无效) <br />
millisecond ms (O无效) <br />
---------------------------------------------- <br />
<br />
40.当月最后一天 <br />
S:不知道 <br />
O:select LAST_DAY(sysdate) value from dual <br />
<br />
41.本星期的某一天（比如星期日） <br />
S:不知道 <br />
O:SELECT Next_day(sysdate,7) vaule FROM DUAL; <br />
<br />
42.字符串转时间 <br />
S:可以直接转或者select cast('2004-09-08'as datetime) value <br />
O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL; <br />
<br />
43.求两日期某一部分的差（比如秒） <br />
S:select datediff(ss,getdate(),getdate()+12.3) value <br />
O:直接用两个日期相减（比如d1-d2=12.3） <br />
SELECT (d1-d2)*24*60*60 vaule FROM DUAL; <br />
<br />
44.根据差值求新的日期（比如分钟） <br />
S:select dateadd(mi,8,getdate()) value <br />
O:SELECT sysdate+8/60/24 vaule FROM DUAL; <br />
<br />
45.求不同时区时间 <br />
S:不知道 <br />
O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL; <br />
<br />
-----时区参数,北京在东8区应该是Ydt------- <br />
AST ADT 大西洋标准时间 <br />
BST BDT 白令海标准时间 <br />
CST CDT 中部标准时间 <br />
EST EDT 东部标准时间 <br />
GMT 格林尼治标准时间 <br />
HST HDT 阿拉斯加?夏威夷标准时间 <br />
MST MDT 山区标准时间 <br />
NST 纽芬兰标准时间 <br />
PST PDT 太平洋标准时间 <br />
YST YDT YUKON标准时间<br />
<br clear="all" />
<br clear="all" />
<img src ="http://www.blogjava.net/kylixlu/aggbug/169942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kylixlu/" target="_blank">陆昱相</a> 2007-12-24 09:59 <a href="http://www.blogjava.net/kylixlu/archive/2007/12/24/169942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>