﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava--随笔分类-oracle</title><link>http://www.blogjava.net/leekiang/category/21129.html</link><description>MDA/MDD/TDD/DDD/DDDDDDD</description><language>zh-cn</language><lastBuildDate>Thu, 29 Jul 2010 13:46:35 GMT</lastBuildDate><pubDate>Thu, 29 Jul 2010 13:46:35 GMT</pubDate><ttl>60</ttl><item><title>oracle模糊查询</title><link>http://www.blogjava.net/leekiang/archive/2010/04/28/319580.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Wed, 28 Apr 2010 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2010/04/28/319580.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/319580.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2010/04/28/319580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/319580.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/319580.html</trackback:ping><description><![CDATA[需要查询某字段是否包含一个值111是否存在于1111,2111,1112,1121,1113,中 ,<br />因为根据","逗号分开，要求的答案是：不存在。<br /><br />用传统的like '%111,%',显然不合适，这样虽然111不存在但是依然能查到该条记录。<br />所以应该用以下语句实现：<br />select * from Table where ','+columA  like '%,111,%'<br /><br />like '%AAA%'   这样的左右模糊查询不能用上索引,Oracle没法通过B-TREE找到相应的叶子节点，位图索引也是一样<br />而like '...%'和 Like '%...'是可以走索引的，后者需要reverse一下<br /><br />使用where instr(column_name,'AAA')&gt; 0没有什么效果<br /><br /><br />如果确定like部分选择性很强，试试：<br />select * from xxfl where rowid in (select rowid from xxfl where hphm like '%34443%' ) and jgsj between to_date('xxxx-xx-xx xx:xx:xx','yyyy-mm-dd hh24:mi:ss') and to_date('xxxx-xx-xx xx:xx:xx','yyyy-mm-dd hh24:mi:ss');<br /><br />参考:<br />http://www.javaeye.com/topic/653713<br />http://www.itpub.net/viewthread.php?tid=1218563<br />http://sandish.itpub.net/post/4899/464369<br /><br />别人的笔记:<br />sql中的like '%xx%'模糊查询无法走索引，影响执行速度。经测试itpub版主ifree的index_ffs+rowid方法比较有效，记录一下。<br />这里是示例：<br />scott@ORCL&gt; CREATE INDEX SCOTT.i_dept_name<br />  2   ON SCOTT.DEPT(DNAME)<br />  3  ;<br /><br />Index created.<br /><br />scott@ORCL&gt; Analyze Table SCOTT.DEPT Compute Statistics ;<br /><br />Table analyzed.<br /><br />scott@ORCL&gt; select * from scott.dept where<br />  2  rowid in (<br />  3  select /*+ index_ffs(a i_dept_dname) */<br />  4  rowid from scott.dept a where dname like '%A%')<br />  5  ;<br /><br />这个方法要求like查询出的记录不能太多，在我的应用中，这一方法使sql效率提高了近10倍。<img src ="http://www.blogjava.net/leekiang/aggbug/319580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2010-04-28 11:02 <a href="http://www.blogjava.net/leekiang/archive/2010/04/28/319580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle dba笔记</title><link>http://www.blogjava.net/leekiang/archive/2010/04/17/318620.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sat, 17 Apr 2010 14:20:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2010/04/17/318620.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/318620.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2010/04/17/318620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/318620.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/318620.html</trackback:ping><description><![CDATA[
		<a target="_blank" href="http://www.oracle.com/technology/global/cn/obe/2day_dba/index.html">Oracle DBA 两日速成课程</a>
<img src ="http://www.blogjava.net/leekiang/aggbug/318620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2010-04-17 22:20 <a href="http://www.blogjava.net/leekiang/archive/2010/04/17/318620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle游标</title><link>http://www.blogjava.net/leekiang/archive/2009/11/13/302271.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Fri, 13 Nov 2009 10:16:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/11/13/302271.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/302271.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/11/13/302271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/302271.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/302271.html</trackback:ping><description><![CDATA[使用ORACLE数据库的游标错误( maximum open cursors exceeded )<br />最近开发第一次遇到“ maximum open cursors exceeded”这个错误。表示已经达到一个进程打开的最大游标数
<br />游标：当返回一个含有多条记录的结果集时，游标就像指向结果集中当前记录的指针，通过游标我们可以处理结果集中的每一条记录。
<br />对于出现ORA-01000 maximum open cursors
exceeded错误这种情况，单纯的加大open_cursors并不是好办法，那只是治标不治本。实际上，代码中的隐患并没有解除。
而且，绝大部分情况下，open_cursors只需要设置一个比较小的值，就足够使用了，除非有非常特别的要求。
<br /><br />从网上查了一下这个错误的原因，主要还是代码问题引起的。 
<br /><br />这样的错误很容易出现在Java代码中的主要原因是：<span style="color: red;">Java代码在执行
conn.createStatement()和conn.prepareStatement()的时候，实际上都是相当于在数据库中打开了一个
cursor。尤其是，如果你的createStatement和prepareStatement是在一个循环里面的话，就会非常容易出现这个问题</span>。因为游标一直在不停的打开，而且没有关闭。 
<br /><br />一般来说，我们在写Java代码的时候，createStatement和prepareStatement都应该要放在循环外面，而且使用了这
些Statment后，及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后，如果不需要使用结果集
（ResultSet）的数据，就马上将Statment关闭。 <br /><br />我就是在循环里调用con.prepareStatement(sql)导致的这个错误。
<br />修改方法，
<br />在遍历完ResutSet后<font color="#ff0000">关闭rs和stmt</font>就可以了。
<br /><br />转自http://ltc603.javaeye.com/blog/71540<br /><br /><br />一般来说是游标不够用了。<br />
只需在initSID.ora文件中加上一行<br />
open_cursors = ****<br />
但是，很可能是由于你的程序或数据库的结构存在着一些潜伏的问题，如jlandzpa所说，没有关闭游标等。<br /><br />
我的程序有一阵一直在报这个错误，把OPEN_CURSOR加大到了300甚至1000还在出错，后来发现是表的STORAGE设置有问题。<br /><br />
建议你查一下自己的程序。<br />昨天说的有些错误，应该是physical_attributes_clause语句。<br /><br />
我们系统的数据量比较大，近200张表，有些表一天要插入1000000条左右的数据。<br /><br />
表是使用ER/STDIO设计的，然后直接生成建表的脚本，由于没有设置physical_attributes_clause语<br /><br />
句中的建表参数，因此使用了默认的参数。好像是INITIAL 10K NEXT 10K PCTFREE 20 PCTUSED 50<br /><br />
由于表的存储空间太小，在很短的时间内就会装满，因此ORACLE就需要不停为30多张表（数据量较大的）申请空间。于是在程序运行了一段时间后，开始出现ORA-01000: maximum open cursors exceeded的错误。<img src="http://www.itpub.net/images/smilies/35.gif" smilieid="212" alt="" border="0" /> 我将游标大小改到了300，还是出现错误，改到1000以后开始出现了ORA-01001:invalid cursors。再怎么加大open_cursors的数量都无济于事。<img src="http://www.itpub.net/images/smilies/12.gif" smilieid="210" alt="" border="0" /><br /><br />
使用select * from v$open_cursors查询，发现有几百条的INSERT语句游标没有释放。<img src="http://www.itpub.net/images/smilies/2.gif" smilieid="203" alt="" border="0" /><br /><br />
开始怀疑是程序调用的问题，仔细检查程序没有发现问题。但是发现对某张表进行TRUNCATE操作后，对此表进行插入的游标全部释放，于是开始怀疑是表结构本身的问题。<br /><br />
重新设置了建表参数，将数据量最大的表的INITIAL和NEXT均设置为50M。<br /><br />
至今未再出现同样的错误。<br /><br />再次提问ORA-01000: maximum open cursors exceeded问题<br /><br />
这个问题yangtingkun讲的非常详细，使我茅塞顿开，但我还有一些问题向诸位高人请教。<br />
我这里出的问题也是ORA-01000: maximum open cursors exceeded ，我将游标数由300提高到500仍然不能解决这个问题。看了这篇帖子我非常高兴，但有一些问题不明白。<br />
我使用了select * from v$open_cursor进行查询后看不出来哪些游标未被释放。一共有近4000条记录，hash_value字段象特殊点，值从几万到几百万都有，请问怎样判定哪些游标未被释放，有多少。<br />
另外请教一下，怎样重新设置了建表参数，能指点一下所需命令吗。数据库里表数量极大，怎样找到数据量最大的表啊。<br />
我是菜鸟，请不要见笑。不吝赐教。<br /><br />首先通过v$open_cursor中的SQL_TEXT字段可以查出没有释放的SQL是大致是什么语句。<br /><br />
由于建表参数设置不当，会有很多的INSERT语句无法释放。<br /><br />
SELECT * FROM V$OPEN_CURSOR WHERE SQL_TEXT LIKE 'INSERT％‘<br /><br />
找一找哪些表的INSERT语句没有释放的游标比较多。<br />
从ALL_TABLES里查看该表的建表参数是否合适。<br /><br />ALTER TABLE tablename STORAGE( NEXT N);<br /><br />建议加入精华区，我也碰到同样的问题。也是调整的存储结构，另外调整了一些索引和程序，一直不知道是存储结构的问题，调整的东西多，就不知道是什么原因了<br /><br />原帖由 <i>becochow</i> 于 2009-3-25 18:56 发表 <a href="http://www.itpub.net/redirect.php?goto=findpost&amp;pid=13202672&amp;ptid=24806" target="_blank"><img src="http://www.itpub.net/images/common/back.gif" onload="if(this.width&gt;screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width&gt;screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmousewheel="return imgzoom(this);" alt="" border="0" /></a><br />
我也出现这样的问题，我现在数据库在运行，可能是存储过程中未关闭游标，<br /><br />
我如何手动关闭呢?查询v$open_cursor 有几千条<br /><br />
今天我也碰到了这个错误,我这么关闭的:<br />
查询v$open_cursor,看哪些是由于"存储过程中未关闭游标"引起的会话,找到SID,SERIAL#,然后KILL掉就可以了.<br />以上来源于http://www.itpub.net/viewthread.php?tid=24806<br /><br /><br /><br /><p><font face="Verdana"><font size="2" color="#000000">我昨天犯的错误就是把创建statement放到了循环之内，结果导致cursor猛增，到达了数据库设置的最大数。</font></font><br />虽然解决了问题，也清楚了游标是何时创建的，但还有几个问题比较迷糊。<br />1、通过查询，JDBC是将所有的查询结果一次性放到ResultSet中，还是一次只放一定数目的记录？例如，查询结果为2000条数据，JDBC是一次性将2000条数据放到结果集中，还是分批放置呢？</p><p>2、当通过ResultSet.next()，移动结果集指针时，此时是否还与数据库发生交互？</p><br />首先结果集resultset在你的java程序处。其中有个fetchsize设置，这个表示每次从数据库处取多少条记录到resultset.
				<br />当通过ResultSet.next()，移动结果集指针时，此时是否还与数据库发生交互？
<br /><br />不发生交互，数据库执行完查询后，已经把查询结果交给ResultSet了，以后的操作，和数据库无关。<br />交互，如果1个查询有10000条记录，resultset中只有fetchsize条，当next时还会在一定时机去交互
				<br />不是将查询结果一次性放到ResultSet中, 而是分批放入ResultSet中,一般情况下是每次10条记录.
<br />当通过ResultSet.next()，移动结果集指针时，此时还会与数据库发生交互.
<br /><br />导致maximum open cursors exceeded这个问题一般是代码本身的问题.
<br />比如执行一个查询没有关闭游标，或是在存储过程中打开了游标而没有关闭．
<br />特别是出现异常情况是没有关闭游标．严重时会导致系统崩掉
				<br />啊~!~`我刚也犯了这种错误!!``看到这里的贴子,小妹又明白了:"哦!``原来conn.createStatement()和
conn.prepareStatement()的时候实际上都是相当与在数据库中打开了一个cursor。!!"明白了这点过后,我就在循环里新建一个
prepareStatement对象,操作完一次,成功过后就马上关掉!这样,循环里每次一个insert都新new
一个prepareStatement 操作成功完成之后再马上关闭.嘎嘎.~这样,cursor就不会溢出拉.<br />http://www.blogjava.net/snoopy/archive/2005/01/27/744.html<br /><img src ="http://www.blogjava.net/leekiang/aggbug/302271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-11-13 18:16 <a href="http://www.blogjava.net/leekiang/archive/2009/11/13/302271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle存储过程笔记</title><link>http://www.blogjava.net/leekiang/archive/2009/11/07/301540.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sat, 07 Nov 2009 05:15:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/11/07/301540.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/301540.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/11/07/301540.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/301540.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/301540.html</trackback:ping><description><![CDATA[CREATE OR REPLACE PROCEDURE p_test(ST_NUM IN NUMBER, /*起始数值*/<br />                                   ED_NUM IN NUMBER /*结束数值*/) IS<br />BEGIN<br />  declare<br />    i number;<br />  begin<br />    /*循环插入*/<br />    FOR i IN ST_NUM .. ED_NUM LOOP<br />      INSERT INTO test_temp values (i, 'test');<br />    END LOOP;<br />  end;<br />  commit;<br />  /*异常处理*/<br />EXCEPTION<br />  WHEN OTHERS THEN<br />    rollback;<br />END;<br /><br />在command window里执行call p_test(1,100);<br /><img src ="http://www.blogjava.net/leekiang/aggbug/301540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-11-07 13:15 <a href="http://www.blogjava.net/leekiang/archive/2009/11/07/301540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于oracle的session</title><link>http://www.blogjava.net/leekiang/archive/2009/10/03/297116.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Fri, 02 Oct 2009 18:07:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/10/03/297116.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/297116.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/10/03/297116.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/297116.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/297116.html</trackback:ping><description><![CDATA[比如用"TEST"用户通过plsqldevleper登录,<br />执行select * from v$session t where t.USERNAME='TEST';<br />会看到至少两条记录，其中action列为Main session的是plsqldevleper固有的，<br />每一个SQL Window都会有一个session,action显示为"SQL Window - New"<br />当前window对应的session的STATUS列显示为ACTIVE,其他显示为"INACTIVE",<br />搞不明白"INACTIVE"的session为何还会显示，什么时候不显示呢?<br />至于查看当前session的ID，用 select distinct sid from v$mystat;<br /><br />顺便记录一下v$mystat,v$sesstat和v$sysstat的区别<br /><span style="font-family: SimSun;">按照</span>OracleDocument<span style="font-family: SimSun;">中的描述，</span>v$sysstat<span style="font-family: SimSun;">存储自数据库实例运行那刻起就开始累计全实例</span>(instance-wide)<span style="font-family: SimSun;">的资源使用情况,<br />我觉得可以理解为是许多综合性、全局性的指标</span>，比如总登录次数(logons cumulative)<br />如果从v$sysstat<span style="font-family: SimSun;"></span>查得有347个指标，那么v$mystat(表示当前session的情况)相应的也有347个指标，<br />v$sesstat包括了所有session(包括活动的和不活动的)的指标的值，当然也就囊括了v$mystat，其记录数为347*25(如果有25个session的话)=8675，<br />至于指标号"STATISTIC#"表示的含义，可从v$statname查得。<br /><br /><br />在B/S系统中，页面纷繁复杂，而且经过系统长时间运行，如果发现某个session的wait比较严重，进行sql优化时，很难知道这个sql是用在程
序的哪个模块，很多时候只能根据开发人员的经验来定位这个sql，或者打开程序代码，搜索。这样的效率很低，这里介绍一个方法来快速定位发生问题的sql
的位置。<br />
ORACLE提供了DBMS_APPLICATION_INFO包，其中提供了set_client_info、set_module、
set_action、read_module、read_client_info、set_session_longops几个过程，其中分别用于设置
客户端信息、设置module信息（这里同时必须设置一个action信息）、设置action信息、读取module信息（同时也会得到action信
息）、读取client_info信息和手动设置一个会话为longops。<br />exec dbms_application_info.set_client_info('test client info');<br />exec dbms_application_info.set_module(module_name =&gt; 'test module',action_name =&gt; 'test action');<br />http://zhang41082.itpub.net/post/7167/305794<br /><br />How to trace the connection pool in a Java Web application - DBMS_APPLICATION_INFO<br />http://stackoverflow.com/questions/829302/how-to-trace-the-connection-pool-in-a-java-web-application-dbmsapplicationinf<br />http://stackoverflow.com/questions/53379/using-dbmsapplicationinfo-with-jboss<br />http://www.mailinglistarchive.com/java-dev@lists.apple.com/msg10280.html<br /><br /><br />使用v$sysstat中的数据<br />该视图中数据常被用于监控系统性能。如buffer cache命中率、软解析率等都可从该视图数据计算得出。<br />该视图中的数据也被用于监控系统资源使用情况，以及系统资源利用率的变化。正因如此多的性能数据，检查某区间内系统资源使用情况可以这样做，在一个时间段开始时创建一个视图数据快照，结束时再创建一个，二者之间各统计项值的不同(end value - begin value)即是这一时间段内的资源消耗情况。这是oracle工具的常用方法，诸如Statspack以及BSTAT/ESTAT都是如此。<br />为了对比某个区间段的数据，源数据可以被格式化（每次事务，每次执行，每秒钟或每次登陆），格式化后数据更容易从两者中鉴别出差异。这类的对比在升级前，升级后或仅仅想看看一段时间内用户数量增长或数据增加如何影响资源使用方面更加实用。<br />你也可以使用v$sysstat数据通过查询v$system_event视图来检查资源消耗和资源回收。<br />参见http://www.cnblogs.com/jimeper/archive/2008/03/30/1129431.html<br />该文后面有这样一句话<font face="Verdana"><br />人生有三宝:终身运动,终身学习,终身反省.吸收新知,提高效率,懂得相处,成就自己,也成就他人,创造最</font>高价值。<br /><br />ORACLE的连接数(sessions)与其参数文件中的进程数(process)有关，它们的关系如下：<br />　　sessions=(1.1*process+5)<br />　　但是我们增加process数时，往往数据库不能启动了。这因为我们还漏调了一个unix系统参数：它是/etc/system/ 中semmns，这是unix系统的信号量参数。每个process会占用一个信号量。semmns调整后，需要重新启动unix 操作系统 ，参数才能生效。不过它的大小会受制于 硬件 的内存或ORACLE SGA。范围可从200-2000不等。<br /><br />　　semmns的计算公式为：SEMMNS &gt; processes + instance_processes + system processes = 数据库参数processes的值 instance_processes = 5(smon,pmon,dbwr,lgwr,arch)<br />　　system=系统所占用信号量。<br />　　系统所占用信号量可用下列命令查出：#ipcs -sb<br />　　其中列NSEMS显示系统已占用信号量。<br />　　其它一些跟连接有关的参数，如 licence_max_sessions, licence_sessions_warning 等默认设置都为零，也就是没有限制。<br /><br /><img src ="http://www.blogjava.net/leekiang/aggbug/297116.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-10-03 02:07 <a href="http://www.blogjava.net/leekiang/archive/2009/10/03/297116.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle不同版本间数据的导入导出(转)</title><link>http://www.blogjava.net/leekiang/archive/2009/08/23/292314.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sun, 23 Aug 2009 15:14:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/08/23/292314.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/292314.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/08/23/292314.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/292314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/292314.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自http://www.cublog.cn/u/30637/showart_481055.htmlOracle的imp/exp组件是我们常用的工具，它的一个操作原则就是向下兼容。下面是据此总结的几个使用规则和相关测试：				 												规则1：低版本的exp/imp可以连接到高版本（或同版本）的数据库服务器，但高版本的exp/imp不能连接到低版本的数据库服务...&nbsp;&nbsp;<a href='http://www.blogjava.net/leekiang/archive/2009/08/23/292314.html'>阅读全文</a><img src ="http://www.blogjava.net/leekiang/aggbug/292314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-08-23 23:14 <a href="http://www.blogjava.net/leekiang/archive/2009/08/23/292314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java调oracle存储过程</title><link>http://www.blogjava.net/leekiang/archive/2009/08/12/290778.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Wed, 12 Aug 2009 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/08/12/290778.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/290778.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/08/12/290778.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/290778.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/290778.html</trackback:ping><description><![CDATA[        OracleCallableStatement cst = null;<br />        int oracleId = CharacterSet.ZHS16GBK_CHARSET;<br />        oracle.sql.CharacterSet dbCharset = oracle.sql.CharacterSet.make(oracleId);<br />            cst = (OracleCallableStatement) conn<br />                    .prepareCall("begin ?:= pkg_test.f_getList(?); end;");<br />//String sql = "{?=call PckgStudSltCourse.addStudPreSltCourse(?,?,?,?)}";也可以这样写<br />//sql="{call sp(?,?,?,?,?)}";//如果无返回值<br />            cst.registerOutParameter(1, OracleTypes.ARRAY, "T_ARRAY");//第一个问号表示返回结果<br />            cst.setString(2, userid);//第二个问号<br />            cst.executeUpdate();//哪怕是个查询也用executeUpdate<br /><br />            oracle.sql.ARRAY simpleArray = cst.getARRAY(1);//从statement获取，而不是rs<br />            String[] values = (String[]) simpleArray.getArray();<br />            for (int i = 0; i &lt; values.length; i++) {<br />                oracle.sql.CHAR out_value = new oracle.sql.CHAR(values[i],dbCharset);<br />                System.out.println(out_value.stringValue());<br />            }<br />            <br />注意：在new oracle.sql.CHAR处，可能会报<br />java.lang.NoClassDefFoundError: oracle/gss/util/NLSError<br />    at oracle.sql.CharacterSetUnknown.failCharsetUnknown(CharacterSetFactoryThin.java:178)<br />    at oracle.sql.CharacterSetUnknown.convert(CharacterSetFactoryThin.java:145)<br />    at oracle.sql.CHAR.(CHAR.java:147)<br />    即missing some jar file in runtime environment<br />    原因是weblogic没有加载web应用下的classes12.jar,而是加载了weblogic81\server\lib里的ojdbc14.jar,<br />    而ojdbc14.jar里没有oracle.gss.util.NLSError。<br />    修改classpath先加载classes12.jar,打印出来的是乱码，只出现乱码，这次没有出现类似这样的异常java.sql.SQLException:   Non   supported   character   set:   oracle-character-set-850  。<br />    还需要修改classpath先加载nls_charset12.jar;(必须这样，光放在web应用的lib下或光放在weblogic81\server\lib都<br />    不行，jar包放置或加载的这三种方式是有区别的)<br />问题：如果使用的是ojdbc.jar,我觉得可能就不要nls_charset12.jar了,并且不需要new oracle.sql.CHAR(values[i],dbCharset)来转换<br />    <br />http://topic.csdn.net/t/20051110/17/4385336.html<br />    类是通过类加载器classloader载入的。  <br />  缺省情况下web容器遵循java的标准标准类载入机制   --   由现载入父加载器level的类。  <br />  weblogic的web容器的classloader继承自ejb容器的classloader，ejb容器的classloader又继承自 application   classloader--该loader负责加载classpath下面的类，所以缺省情况下classpath下面的类会被优先载入，即使相同的类存在于web应用的lib目录。  <br />  可以通过配置文件来修改这种加载顺序，使得lib目录中的类得到优先调用，在weblogic   8.1中，方法是在weblogic.xml中加入下面的代码段：  <br />  &lt;container-descriptor&gt;  <br />  &lt;prefer-web-inf-classes&gt;true&lt;/prefer-web-inf-classes&gt;  <br />  &lt;/container-descriptor&gt;   <br />  weblogic   的加载顺序就是weblogic   classpath优先？ <br />  <br />  <br />  一下见http://www.javaeye.com/topic/21141<br />  ClassNotFoundException发生在装入阶段。<br />当应用程序试图通过类的字符串名称，使用常规的三种方法装入类，但却找不到指定名称的类定义时就抛出该异常。<br /><br />NoClassDefFoundError： 当目前执行的类已经编译，但是找不到它的定义时<br /><br />也就是说你如果编译了一个类B，在类A中调用，编译完成以后，你又删除掉B，运行A的时候那么就会出现这个错误 <br />当你使用字符串去转换类，也就是尝试使用Class.forName等方法去获得一个类的时候，如果这个类不存在，就会抛出ClassNotFoundException。<br />   而你编译的类无错，但是在运行时刻，缺乏某些必须的类时，就是抛出NoClassDefFoundError。这种情况最常见就是你在编译时，在classpath下有这个类，但是在运行时，你的classpath缺少这个类。 <br />   <br />  加载时从外存储器找不到需要的class就出现ClassNotFoundException<br />  连接时从内存找不到需要的class就出现NoClassDefFoundError <br />  问题:加载和连接的区别<br /><br /><div id="blog_text" class="cnt"><p>创建测试用表</p><p><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">CREATE</span><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">TABLE</span><span style="color: rgb(0, 0, 0);"> T_TEST(<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />I_ID </span><span style="font-weight: bold; color: rgb(0, 0, 0);">NVARCHAR</span><span style="color: rgb(0, 0, 0);">(</span><span style="font-weight: bold; color: rgb(128, 0, 0);">20</span><span style="color: rgb(0, 0, 0);">),<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />I_NAME </span><span style="font-weight: bold; color: rgb(0, 0, 0);">NVARCHAR</span><span style="color: rgb(0, 0, 0);">(</span><span style="font-weight: bold; color: rgb(128, 0, 0);">20</span><span style="color: rgb(0, 0, 0);">)<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />)</span></p><div><p><span style="color: rgb(0, 0, 0);">一：无返回值的存储过程</span></p></div><p>1、建立存储过程<br />
CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2)  AS<br />
BEGIN <br />
    INSERT INTO T_TEST (I_ID,I_NAME) VALUES (PARA1, PARA2);<br />
END TESTA;</p><p><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 255);"><font color="#000000">2、相应的JAVA程序<br />
import java.sql.*; <br />
import java.io.OutputStream;<br />
import java.io.Writer;<br />
import java.sql.PreparedStatement;<br />
import java.sql.ResultSet;<br />
import oracle.jdbc.driver.*;<br />
public class TestProcedureOne {<br />
     public TestProcedureOne() {<br />
       }<br />
       public static void main(String[] args ){<br />
         String driver = "oracle.jdbc.driver.OracleDriver";<br />
         String strUrl = "jdbc:oracle:thin:@192.168.10.216:1521:ctbu"; <br />
         Statement stmt = null; <br />
         ResultSet rs = null; <br />
         Connection conn = null;<br />
         CallableStatement cstmt = null; <br />
         try {<br />
           Class.forName(driver);<br />
           conn =  DriverManager.getConnection(strUrl, "dbname", "password"); <br />
           CallableStatement proc = null; <br />
           proc = conn.prepareCall("{ call dbname.TESTA(?,?) }"); <br />
           proc.setString(1, "100"); <br />
           proc.setString(2, "TestOne"); <br />
           proc.execute();<br />
         }<br />
         catch (SQLException ex2) {<br />
           ex2.printStackTrace();<br />
         }<br />
         catch (Exception ex2) {<br />
           ex2.printStackTrace(); <br />
         }<br />
         finally{ <br />
           try {<br />
             if(rs != null){<br />
               rs.close(); <br />
               if(stmt!=null){ <br />
                 stmt.close();<br />
               } <br />
               if(conn!=null){<br />
                 conn.close(); <br />
               }<br />
             } <br />
           }<br />
           catch (SQLException ex1) {<br />
           }<br />
         }<br />
       } <br />
     }</font></span></span></p><p><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 255);"><font color="#000000"><span style="color: rgb(0, 0, 0);">二：有返回值的存储过程（非列表）</span></font></span></span></p><p><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 255);"><font color="#000000"><span style="color: rgb(0, 0, 0);">1、存储过程为<br />
CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2)  AS<br />
BEGIN<br />
    SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;<br />
END TESTB;</span></font></span></span></p><p><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 255);"><font color="#000000"><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">2、JAVA代码<br />
public class TestProcedureTWO {<br />
  public TestProcedureTWO() {<br />
  }<br />
  public static void main(String[] args ){<br />
     String driver = "oracle.jdbc.driver.OracleDriver";<br />
     String strUrl = "jdbc:oracle:thin:@192.168.10.216:1521:ctbu"; <br />
     Statement stmt = null;<br />
     ResultSet rs = null;<br />
     Connection conn = null;<br />
     try {<br />
       Class.forName(driver);<br />
       conn =  DriverManager.getConnection(strUrl, "dbname", "password");<br />
       CallableStatement proc = null;<br />
       proc = conn.prepareCall("{ call HYQ.TESTB(?,?) }");<br />
       proc.setString(1, "100");<br />
       proc.registerOutParameter(2, Types.VARCHAR);<br />
       proc.execute();<br />
       String testPrint = proc.getString(2);<br />
       System.out.println("=testPrint=is="+testPrint);<br />
     }<br />
     catch (SQLException ex2) {<br />
       ex2.printStackTrace();<br />
     }<br />
     catch (Exception ex2) {<br />
       ex2.printStackTrace();<br />
     }<br />
     finally{<br />
       try {<br />
         if(rs != null){<br />
           rs.close();<br />
           if(stmt!=null){<br />
             stmt.close();<br />
           }<br />
           if(conn!=null){<br />
             conn.close();<br />
           }<br />
         }<br />
       }<br />
       catch (SQLException ex1) {<br />
       }<br />
     }<br />
  }<br />
}<br />
}<br />
注意，这里的proc.getString(2)中的数值2并非任意的，而是和存储过程中的out列对应的，如果out是在第一个位置，那就是
proc.getString(1)，如果是第三个位置，就是proc.getString(3)，当然也可以同时有多个返回值，那就是再多加几个out
参数了。<br /><br />
三：返回列表<br />
由于oracle存储过程没有返回值，它的所有返回值都是通过out参数来替代的，列表同样也不例外，但由于是集合，所以不能用一般的参数，必须要用pagkage了.所以要分两部分。<br />
1、在SQL*PLUS中建一个程序包</span></span></font></span></span></p><p>CREATE OR REPLACE PACKAGE TESTPACKAGE  AS  <br />
TYPE Test_CURSOR IS REF CURSOR; <br />
procedure TESTC(cur_ref out Test_CURSOR); <br />
end TESTPACKAGE;</p><p>建立存储过程，存储过程为：<br />
create or replace package body TESTPACKAGE as <br />
procedure TESTC(cur_ref out Test_CURSOR) is <br />
begin    <br />
OPEN cur_ref FOR SELECT * FROM T_TEST;<br />
end TESTC;<br />
END TESTPACKAGE;<br />
可以看到，它是把游标（可以理解为一个指针），作为一个out 参数来返回值的。<br />
JAVA程序如下：</p><p>import java.sql.*; <br />
import java.io.OutputStream;<br />
import java.io.Writer; <br />
import java.sql.PreparedStatement; <br />
import java.sql.ResultSet;<br />
import oracle.jdbc.driver.*;</p><p>public class TestProcedureOne {<br />
     public TestProcedureOne() {<br />
       } <br />
       public static void main(String[] args ){<br />
         String driver = "oracle.jdbc.driver.OracleDriver";<br />
         String strUrl = "jdbc:oracle:thin:@192.168.10.216:1521:ctbu";<br />
         Statement stmt = null; <br />
         ResultSet rs = null; <br />
         Connection conn = null; <br />
         CallableStatement cstmt = null;<br />
         try { <br />
           Class.forName(driver); <br />
           conn = DriverManager.getConnection(strUrl,"databasename" "password");<br />
           CallableStatement proc = null; <br />
           proc = conn.prepareCall("{ call cqsb.TESTA(?,?) }"); <br />
           proc.setString(1, "100"); <br />
           proc.setString(2, "TestOne"); <br />
           proc.execute(); <br />
         } <br />
         catch (SQLException ex2) {<br />
           ex2.printStackTrace(); <br />
         } <br />
         catch (Exception ex2) {<br />
           ex2.printStackTrace(); <br />
         } <br />
         finally{ <br />
           try { <br />
             if(rs != null){ <br />
               rs.close(); <br />
               if(stmt!=null){<br />
                 stmt.close(); <br />
               } <br />
               if(conn!=null){<br />
                 conn.close();<br />
               } <br />
             } <br />
           } <br />
           catch (SQLException ex1) {<br />
           }<br />
         } <br />
       } <br />
     }</p><p>特别注意：<br />
1、在执行前一定要先把oracle的驱动包放到class路径里。<br />
2、Toad在我建立存储过程中搞了很多莫名的错误，多数是没有创建成功而不报错，<br />
或者是创建有误而不提示，应当引起重视。所以最好还是在SQL*PLUS玩这些。<br />
3、在SQL*PLUS中的换行是无效的，要换行的时候一定要空格结尾，特别是你直接复制代码的时候！</p></div><br /><img src ="http://www.blogjava.net/leekiang/aggbug/290778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-08-12 11:46 <a href="http://www.blogjava.net/leekiang/archive/2009/08/12/290778.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle的参数以及pfile和spfile</title><link>http://www.blogjava.net/leekiang/archive/2009/07/31/289196.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Thu, 30 Jul 2009 16:19:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/07/31/289196.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/289196.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/07/31/289196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/289196.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/289196.html</trackback:ping><description><![CDATA[
		<font face="Arial">对这些东西都没什么整体概念，以下是东抄西抄的。<br /><br />1,Select isspecified,count(*) from v$spparameter group by isspecified;<br />
 如果isspecified里有true，表明用spfile进行了指定配置<br />
 如果全为false，则表明用pfile启动<br /><br /></font>2,spfile是二进制的<br /><br />3,http://snakeskin.javaeye.com/blog/155136<br />db_buffer_size=db_block_buffers*db_block_size, db_block_size为数据库默认值, 不要修改<br />pfile不要有SGA_TARGET这个参数, 也不要有db_cache_size这个参数, SGA_MAX_SIZE也不需要<br /><br /><strong>1）创建pfile<br /></strong>SQL&gt;create pfile from spfile<br />这样就在d:/oracle/product/10.1.0/db_1/database目录下面多1个文件INITorcl.ORA<br />或者copy d:/oracle/product/10.1.0/admin/orcl/pfile/init.ora.XXXXXXXX到上述目录, 名字改成INITorcl.ORA<br />init.ora.XXXX也是个pfile文件, 不妨试着用这个文件启动你的数据库<br />SQL&gt;startup pfile='d:/oracle/product/10.1.0/admin/orcl/pfile/init.ora.XXXXXXXX'<br />特别是你改动参数导致数据库无法启动的情况下, 用这个文件恢复你的spfile将非常有用<br />SQL&gt;create spfile from pfile='d:/oracle/product/10.1.0/admin/orcl/pfile/init.ora.XXXXXXXX'<p><strong>2)修改pfile的内容<br /></strong>修改后主要内容为<br />sga_target=1700000000(1.7G左右)<br />lock_sga=true<br />pre_aggregate_tagert=250000000(250M左右)<br />workarea_size_policy=auto<br />pre_page_sga=true<br />sga_max_size=1720000000(1.72G左右)</p><p><strong>3)根据pfile启动数据库<br /></strong>SQL&gt;startup pfile='d:/oracle/product/10.1.0/db_1/database/INITorcl.ORA'<br />如果不能启动, 可能是某些参数的原因, 那么就修改INIToracl.ORA的配置文件, 直到能正常启动为止.</p><p>4,http://www.orafaq.com/node/5</p><p><span style="font-weight: bold;">What is the difference between a PFILE and SPFILE:</span></p><p>A PFILE is a static, client-side text file that must be updated with
a standard text editor like "notepad" or "vi". This file normally
reside on the server, however, you need a local copy if you want to
start Oracle from a remote machine. DBA's commonly refer to this file
as the INIT.ORA file.</p><p>An SPFILE (Server Parameter File), on the other hand, is a
persistent server-side binary file that can only be modified with the
"ALTER SYSTEM SET" command. This means you no longer need a local copy
of the pfile to start the database from a remote machine. Editing an
SPFILE will corrupt it, and you will not be able to start your database
anymore.</p><p>5,怎样查看一个参数修改是否需要重启数据库</p><p><font id="font_word" class="htd" style="font-size: 14px; font-family: 宋体,Verdana,Arial,Helvetica,sans-serif;"><font size="2">select name,value ,ISSYS_MODIFIABLE from v$parameter<br />
        如果ISSYS_MODIFIABLE 返回的是false，说明该参数无法用alter system语句动态修改,需要重启数据库</font></font></p><p><br /></p><p>6,用命令修改参数</p><p>alter system set java_pool_size=2 scope=spfile ;</p><p>scope=spfile 的修改是需要重启数据库<br />
scope=both 实时生效和写入spfile，不需要重启数据库<br />
scope=memory 实时生效，但不写spfile，这样如果重启数据库，则恢复原来的参数值<br /><br />
每个参数能修改的scope是不一样的，可以查询v$parameter了解参数能被修改的类型</p><p>见http://bbs.chinaunix.net/archiver/?tid-974075.html<br /></p><p>10,<br /></p><p>http://www.cnblogs.com/jacktu/archive/2008/02/27/1083232.html</p><p>http://topic.csdn.net/u/20090227/16/fb3d88ed-f2ca-44ed-8097-dc363054515c.html<br /></p><br /><img src ="http://www.blogjava.net/leekiang/aggbug/289196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-07-31 00:19 <a href="http://www.blogjava.net/leekiang/archive/2009/07/31/289196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORA-00060:等待资源的时候检测到死锁</title><link>http://www.blogjava.net/leekiang/archive/2009/07/31/289194.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Thu, 30 Jul 2009 16:08:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/07/31/289194.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/289194.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/07/31/289194.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/289194.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/289194.html</trackback:ping><description><![CDATA[
		<br />参见：<br />http://www.d9soft.com/article/353/Article25047_1.htm<br />http://topic.csdn.net/u/20070719/09/13f24bd3-5fc4-43dc-b1e4-5475718031b4.html<br /><img src ="http://www.blogjava.net/leekiang/aggbug/289194.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-07-31 00:08 <a href="http://www.blogjava.net/leekiang/archive/2009/07/31/289194.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle10g笔记</title><link>http://www.blogjava.net/leekiang/archive/2009/07/30/289135.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Thu, 30 Jul 2009 08:41:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/07/30/289135.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/289135.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/07/30/289135.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/289135.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/289135.html</trackback:ping><description><![CDATA[1，<br />oracle10g装了几个实例，就会在service里看到多个OracleService,同时有多个OracleDBConsole,<br />只有OracleDBConsole起来了，才能访问http://127.0.0.1:1158/em，<br />那么如何知道每一个em的http端口呢?<br />有人说在oracle\product\10.2.0\db_1\sysman\config\emca.properties，<br />看了一下只有默认端口DBCONTROL_HTTP_PORT_DEFAULT为1158<br />后来在oracle\product\10.2.0\db_1\install\install\portlist.ini里<br />发现了每一个实例的Enterprise Manager Console HTTP 端口<br /><br /><img src ="http://www.blogjava.net/leekiang/aggbug/289135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-07-30 16:41 <a href="http://www.blogjava.net/leekiang/archive/2009/07/30/289135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle回滚段</title><link>http://www.blogjava.net/leekiang/archive/2009/05/29/278948.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Fri, 29 May 2009 13:44:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/05/29/278948.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/278948.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/05/29/278948.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/278948.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/278948.html</trackback:ping><description><![CDATA[Oracle回滚段概念用法规划及问题解决<br />http://bbs.zdnet.com.cn/archiver/tid-127193.html<br /><img src ="http://www.blogjava.net/leekiang/aggbug/278948.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-05-29 21:44 <a href="http://www.blogjava.net/leekiang/archive/2009/05/29/278948.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle处理数据的笔记</title><link>http://www.blogjava.net/leekiang/archive/2009/05/12/270295.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Tue, 12 May 2009 14:26:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/05/12/270295.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/270295.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/05/12/270295.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/270295.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/270295.html</trackback:ping><description><![CDATA[1，create table tbA as select * from tbB<br />  这样会丢失索引等信息<br /><br />2,生成10万条测试记录表可以用如下SQL：<br /> create table myTestTable as <br />select rownum as id,<br />               to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime,<br />               trunc(dbms_random.value(0, 100)) as random_id,<br />               dbms_random.string('x', 20) random_string<br />          from dual<br />        connect by level &lt;= 100000;<br />来源:http://blog.csdn.net/yzsind/archive/2009/12/08/4967133.aspx<br /><img src ="http://www.blogjava.net/leekiang/aggbug/270295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-05-12 22:26 <a href="http://www.blogjava.net/leekiang/archive/2009/05/12/270295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bitmap位图索引</title><link>http://www.blogjava.net/leekiang/archive/2008/06/25/210564.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Wed, 25 Jun 2008 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/06/25/210564.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/210564.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/06/25/210564.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/210564.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/210564.html</trackback:ping><description><![CDATA[1,<font size="2"><font face="\&quot;宋体\&quot;">Oracle</font><font face="\&quot;宋体\&quot;">数据库的位图索引</font><font face="\&quot;宋体\&quot;">(Bitmap Index)</font><font face="\&quot;宋体\&quot;">确实是针对那些数值稀疏</font><font face="\&quot;宋体\&quot;">(low-cardinality</font><font face="\&quot;宋体\&quot;">，</font><font face="\&quot;宋体\&quot;">低基数</font><font face="\&quot;宋体\&quot;">)</font><font face="\&quot;宋体\&quot;">的字段，但是还应记住的一点是，它是针对那些</font><font face="\&quot;宋体\&quot;">值不经常改变的</font><font face="\&quot;宋体\&quot;">字段的。在实际应用中，如果某个字段的值需要频繁更新，那么就不适合在它上面创建位图索引。在位图索引中，如果你更新或插入其中一条数值为</font><font face="\&quot;宋体\&quot;">N的记录，那么相应表中数值为N的记录（可能成百上千条）全部被Oracle锁定，这就意味着其它用户不能同时更新这些数值为N的记录，其它用户必须要等第一个用户提交后，才能获得锁，更新或插入数据。</font></font><br /><a target="_blank" href="http://blog.ccidnet.com/blog-htm-do-showone-uid-4092-itemid-291252-type-blog.html">http://blog.ccidnet.com/blog-htm-do-showone-uid-4092-itemid-291252-type-blog.html</a><br /><br />在我们的系统里，不仅不是在一个column上创建bitmap index，而是在多个column上联合起来创建bitmap
index，从而可以想见，几乎等同于每个bitmap index
entry对应的只有极少数的rowid，即只对应极少数的row，而且每个bitmap都要创建一个或多个bitmap
segment，相应的，DML操作可能需要频繁的lock很多rows，影响并发性（影响也需要修改同样bitmap
entry的用户），同时，由于pctfree等存储参数影响index空间的分配及管理，和由于数据操作导致物理地址更改从而修改index
entry，扩展，链接bitmap index entry，频繁修改导致的磁盘碎片，block分配链接等。这是空间增长和系统性能下降的部分原因。<br /><br />bitmap主要用于数据仓库，table有大量的数据并且列上基数很小（一般是column的distinct
values占rows总数的1%以下，或重复出现超过100次以上，Oracle建议此时才可以把该column列为创建bitmap
index的侯选字段），同时，还由于数据仓库上并行访问的事务非常少。bitmap
index并不适用于OLTP业务，OLTP一般都是有大量的并发事务来修改同样的数据。bitmap主要就是设计来为数据仓库服务的，即应用于低基数超
级大数据量查询服务，而且只用在where clause里包含and ,or,not,或equality
queries（比如在and和or条件的查询，在把bit转换成rowid以前，就能很快的得到相应的boolean操作）。<br /><a target="_blank" href="http://bigboar.itpub.net/post/8411/225321">http://bigboar.itpub.net/post/8411/225321</a><br /><br />2,位图索引占用的空间很大.一个466万行记录的只有两个字段的表，占用空间约 88M,在该两个字段上建有一个位图索引，这个位图索引占用空间约168M<br /><a target="_blank" href="http://bigboar.itpub.net/post/8411/225321">http://bigboar.itpub.net/post/8411/225321<br /></a><br />查看各个表(包括索引)占用空间大小的sql:<br />Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name<br /><br /><a target="_blank" href="http://space.itpub.net/193161/viewspace-50292">http://space.itpub.net/193161/viewspace-50292</a><br /><a target="_blank" href="http://www.ixdba.com/html/y2007/m05/102-bitmap-index-deadlock.html">http://www.ixdba.com/html/y2007/m05/102-bitmap-index-deadlock.html</a><br /><br />3，Oracle强烈建立，任何一个应用程序的库表至少需要创建两个表空间，其中之一用于存储表数据，而另一个用于存储表索引数据。因为如果将表数据和索引数
据放在一起，表数据的I/O操作和索引的I/O操作将产生影响系统性能的I/O竞争，降低系统的响应效率。将表数据和索引数据存放在不同的表空间中（如一
个为APP_DATA，另一个为APP_IDX），并在物理层面将这两个表空间的数据文件放在不同的物理磁盘上，就可以避免这种竞争了。<br />拥有独立的表空间，就意味着可以独立地为表数据和索引数据提供独立的物理存储参数，而不会发生相互影响，毕竟表数据和索引数据拥有不同的特性，而这些特性又直接影响了物理存储参数的设定。<br />此外，表数据和索引数据独立存储，还会带来数据管理和维护上的方面。如你在迁移一个业务数据库时，为了降低数据大小，可以只迁出表数据的表空间，在目标数据库中通过重建索引的方式就可以生成索引数据了。<br /><a target="_blank" href="http://blog.ccidnet.com/blog-htm-do-showone-uid-19759-itemid-341747-type-blog.html">http://blog.ccidnet.com/blog-htm-do-showone-uid-19759-itemid-341747-type-blog.html</a><br /><br />4，B-Tree索引即normal普通索引<img src ="http://www.blogjava.net/leekiang/aggbug/210564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-06-25 15:12 <a href="http://www.blogjava.net/leekiang/archive/2008/06/25/210564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle dblink介绍(转)</title><link>http://www.blogjava.net/leekiang/archive/2008/04/17/193850.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Thu, 17 Apr 2008 11:37:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/04/17/193850.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/193850.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/04/17/193850.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/193850.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/193850.html</trackback:ping><description><![CDATA[
		<p>两台不同的数据库服务器，从一台数据库服务器的一个用户读取另一台数据库服务器下的某个用户的数据，这个时候可以使用dblink<br />　　其实dblink和数据库中的view差不多，建dblink的时候需要知道待读取数据库的ip地址，ssid以及数据库用户名和密码。<br />dblink =database links</p>
		<p>　　创建可以采用两种方式(<font color="#ff0000">自己试验时只有第一种方式可以，不知何故</font>)：</p>
		<p>　　1、已经配置本地服务<br />以下是引用片段：<br />　　create public database<br />　　link fwq12 connect to fzept<br />　　identified by neu using 'fjept'<br />　　CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘本地配置的数据的实例名’;</p>
		<p>　　2、未配置本地服务<br />以下是引用片段：<br />create database link linkfwq<br />　　 connect to fzept identified by neu<br />　　 using '(DESCRIPTION =<br />　　 (ADDRESS_LIST =<br />　　 (ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521))<br />　　 )<br />　　 (CONNECT_DATA =<br />　　 (SERVICE_NAME = fjept)<br />　　 )<br />　　 )';<br />　　host=数据库的ip地址，service_name=数据库的ssid。</p>
		<p>　　其实两种方法配置dblink是差不多的，我个人感觉还是第二种方法比较好，这样不受本地服务的影响。</p>
		<p>　　数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.<br />　　数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样</p>
		<p>　　数据库全局名称可以用以下命令查出<br />　　SELECT * FROM GLOBAL_NAME;</p>
		<p>　　查询远端数据库里的表<br />　　SELECT …… FROM 表名@数据库链接名;</p>
		<p>　　查询、删除和插入数据和操作本地的数据库是一样的，只不过表名需要写成“表名@dblink服务器”而已。</p>
		<p>　　附带说下同义词创建:<br />　　CREATE SYNONYM 同义词名 FOR 表名;<br />　　CREATE SYNONYM 同义词名 FOR 表名@数据库链接名;<br />　　删除dblink：DROP PUBLIC DATABASE LINK linkfwq。</p>
		<p>　　如果创建全局dblink，必须使用systm或sys用户，在database前加public。<br />　　参考资料:<br />　　<a href="http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14231/ds_admin.htm#i1008271">http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14231/ds_admin.htm#i1008271</a></p>
<img src ="http://www.blogjava.net/leekiang/aggbug/193850.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-04-17 19:37 <a href="http://www.blogjava.net/leekiang/archive/2008/04/17/193850.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle函数笔记(主要是日期函数)</title><link>http://www.blogjava.net/leekiang/archive/2008/02/18/180566.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Mon, 18 Feb 2008 15:04:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/02/18/180566.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/180566.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/02/18/180566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/180566.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/180566.html</trackback:ping><description><![CDATA[
		<font color="#ff0000">1</font>，求一段时间内共跨越了多少天(例如求平均日访问量时要用到)<br />select to_date(to_char(max(t.logdate), 'yyyy-MM-dd'), 'yyyy-MM-dd') -<br />                              to_date(to_char(min(t.logdate), 'yyyy-MM-dd'),'yyyy-MM-dd') + 1<br />                         from tb_log t<br /><font color="#ff0000">2</font>，<span class="oblog_text">Add_months(d,n) 当前日期d后推n个月(n可以为负数)<br />   当找不到某月的匹配日时取该月最后一天。例如3-31后推1个月为4-30<br /><font color="#ff0000">3</font>，</span><span class="oblog_text">last_day(d)  某日期d所在月份的最后一天<br /><font color="#ff0000">4</font>，转换某日期为'yyyy-m-d'格式<br />    select to_char(sysdate, 'yyyy') || '-' || to_number(to_char(sysdate, 'mm')) || '-' ||<br />       to_number(to_char(sysdate, 'dd')) from dual<br /><font color="#ff0000">5</font>,查询</span><span style="FONT-FAMILY: 宋体">系统时间戳的毫秒值</span><br /><span class="oblog_text">SELECT (SYSDATE - TO_DATE('1970-1-1 8', 'YYYY-MM-DD HH24')) * 86400000 +<br />       TO_NUMBER(TO_CHAR(SYSTIMESTAMP(3), 'FF')) AS MILLIONS<br />  FROM DUAL<br />见http://yangtingkun.itpub.net/post/468/244564<br /><br /><font color="#ff0000">6</font>,oracle函数处理字符串时，下标是从1开始的。<br /><br /><font color="#ff0000">7</font>,<br /></span>INSTR方法的格式为<br />INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)  (注:<font color="#ff0000">起始位置是从1开始，不能从0开始</font>)<br />例如：INSTR('CORPORATE FLOOR','OR', 3, 2)中，源字符串为'CORPORATE FLOOR', 目标字符串为'OR'，起始位置为3，取第2个匹配项的位置。<br />默认查找顺序为从左到右。当起始位置为负数的时候，从右边开始查找。<br />所以SELECT INSTR('CORPORATE FLOOR', 'OR', -1, 1) "Instring" FROM DUAL的显示结果是<br />Instring<br />——————<br />14<br /><span class="oblog_text"><br />注:</span><font color="#ff0000">INSTR('test','a')得到的是0,而不是-1</font><br /><span class="oblog_text">参考:<br />http://df41.spaces.live.com/blog/cns!D064C4537B2605A6!317.entry<br />http://hi.baidu.com/fgfd0/blog/item/7a48d5f9155a0059252df2dc.html<br /><br /><font color="#ff0000">8</font>，to_date时报"格式代码出现两次"<br />   原因是"</span><span class="t18">You are using MM twice"<br /><br /><font color="#ff0000">9</font>,substr( string, start_position, [length])  下标从1开始<br />substr('This is a test', 6, 2)   would return 'is'<br />substr('This is a test', 6)      would return 'is a test'<br />substr('TechOnTheNet', 1, 4)     would return 'Tech'<br />substr('TechOnTheNet', -3, 3)    would return 'Net'<br />substr('TechOnTheNet', -6, 3)    would return 'The'<br />substr('TechOnTheNet', -8, 2)    would return 'On'<br /><br /><font color="#ff0000">10</font>,select to_date(2008-03-14 14:49:37,'yyyy-MM-dd hh24:mi')  from dual<br />报错：ora-01830错误：日期格式图片在转换整个输入字符串之前结束<br />原因是格式化的字符窜长度大于格式化标准（yyyy-MM-dd hh24:mi）的长度<br />注意:月份的mm大小写不一样,hh24和hh不一样,分钟用mi而不是mm<br /><br />11，lengthb查看字节数<br /><br />12，case的用法<br />select case when t.classtype = 1 then<br />          '名称一'<br />         when t.classtype = 2 then<br />          '名城二'<br />       end name from tb_test t<br /><br />13,<br />where   t.fsdate &lt;= to_date('2007-12-15','yyyy-mm-dd')<br /> where   to_char(t.fsdate,'yyyy-mm-dd')&lt;='2007-12-15'<br /><br />14,decode<br /></span>decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)<br /><br />15，跨多少月<br />select to_char(add_months(to_date('1999-2', 'yyyy-mm'), (rownum - 1)), 'YYYY-MM') as TEMPMONTH from dual connect by rownum &lt; months_between(to_date('2009-9', 'yyyy-mm'), to_date('1999-2', 'yyyy-mm')) + 2<br /><br />16，统计字符串中某个字符出现的次数<br />SELECT LENGTHB('ABCDEFGEFGDBE')-LENGTHB(REPLACE('ABCDEFGEFGDBE','E','')) FROM DUAL;<br /><a href="http://windows9834.blog.163.com/blog/static/2734500420103154920954/">http://windows9834.blog.163.com/blog/static/2734500420103154920954/</a><br /><img src ="http://www.blogjava.net/leekiang/aggbug/180566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-02-18 23:04 <a href="http://www.blogjava.net/leekiang/archive/2008/02/18/180566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle相关文章</title><link>http://www.blogjava.net/leekiang/archive/2008/02/13/179733.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Tue, 12 Feb 2008 19:13:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/02/13/179733.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/179733.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/02/13/179733.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/179733.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/179733.html</trackback:ping><description><![CDATA[1,<a target="_blank" href="http://tech.it168.com/o/2006-05-09/200605091122297.shtml">3 Node ORACLE RAC项目手记</a><br />2,<a target="_blank" href="http://school.300soft.com/ArticleView/171110296.html">sql*plus使用的一些技巧</a><b><font style="font-size: 15pt;" color="#003399"></font></b><img src ="http://www.blogjava.net/leekiang/aggbug/179733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-02-13 03:13 <a href="http://www.blogjava.net/leekiang/archive/2008/02/13/179733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle删除重复数据</title><link>http://www.blogjava.net/leekiang/archive/2008/02/01/178909.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Fri, 01 Feb 2008 15:21:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/02/01/178909.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/178909.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/02/01/178909.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/178909.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/178909.html</trackback:ping><description><![CDATA[查找重复数据<br />select count(*), id from test  group by id having count(id) &gt; 1<br />详见<br /><a href="http://www.cnblogs.com/shw0315/articles/305959.html">http://www.cnblogs.com/shw0315/articles/305959.html</a><br /><br />例子:登录日志表里有128794条记录，执行以下sql<br /> delete from test a where a.rowid !=<br /> ( select max(b.rowid) from test b where a.id = b.id  )<br />共删掉3471条，用时12617秒，有点慢。可改用上面链接里讲的建临时表的方式。<br /><img src ="http://www.blogjava.net/leekiang/aggbug/178909.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-02-01 23:21 <a href="http://www.blogjava.net/leekiang/archive/2008/02/01/178909.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在windows上升级oracle9201至9206的注意事项</title><link>http://www.blogjava.net/leekiang/archive/2008/01/02/172051.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Tue, 01 Jan 2008 20:08:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/01/02/172051.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/172051.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/01/02/172051.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/172051.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/172051.html</trackback:ping><description><![CDATA[1，必须把所有的oracle服务停掉。如果忘停就执行升级，则会报错，不要紧，这时仍然可以停掉oracle服务然后retry<br />2，缺省是新建一个ORACLE_HOME，我们应该选择原来装的ORACLE_HOME，如C:\oracle\ora92，名字为"OraHome92",否则升级可能不成功<br />3，如果报"无法确定主机的IP地址时产生异常错误",解决办法:<br />     修改 c:\windows\system32\drivers\etc\hosts，加一行<br />     192.168.1.101      LENOVO-PC<br />     其中ip是通过ipconfig查得的，右边是机器名，可通过hostname命令查得。<br />     同时需要启动服务“TCP/IP NetBIOS Helper Service”<br /><br />4,修改shared_pool_size=150M;shared_pool_size=150M。 必须以spfile的方式。<br />这时可能报:<br /><font color="#ff0000">ORA-02097: 无法修改参数, 因为指定的值无效<br />
ORA-04033: 没有足够的内存来增加池的容量<br /></font>原因是sga_max_size太小，把其调大。<br />
select sum(bytes)/1024/1024 from v$sgastat where name='free memory';<br />
它统计的空闲空间是当前各缓冲池未使用的空间，而不是SGA预留而未分配给各池的空间。<br /><br />详细步骤:<br />C:\&gt;sqlplus /nolog<br />conn sys/sys as sysdba;<br />startup;<br />--设置共享池和Java池大于150M<br />ALTER SYSTEM SET SHARED_POOL_SIZE='150M' SCOPE=spfile;<br />ALTER SYSTEM SET JAVA_POOL_SIZE='150M' SCOPE=spfile;<br />--修改System表空间大小，保证有50M的多余空间<br />--修改XDB表空间大小，保证有20M的多余空间<br />shutdown immediate;<br />--重新启动数据库到升级状态<br />STARTUP MIGRATE;<br />SPOOL c:\patch.log;<br />@C:\oracle\ora92\rdbms\admin\catpatch.sql;<br />--开始运行升级脚本，内存足够的话运行时间小于1个小时,建议在运行期间关闭所有其它相关的运行程序，另外最好有200M的多余内存空间<br />--升级时可以通过WINDOWS任务管理器监视ORACLE是否在升级。<br />SPOOL OFF;<br />--还原共享池和JAVA池大小，根据实际情况设置<br />ALTER SYSTEM SET SHARED_POOL_SIZE='50M' SCOPE=spfile;<br />ALTER SYSTEM SET JAVA_POOL_SIZE='50M' SCOPE=spfile;<br />shutdown immediate;<br />STARTUP;<br />--以下脚本为重新编译所有失效对象<br />@C:\oracle\ora92\rdbms\admin\utlrp.sql;<br /><br />详见http://www.cnblogs.com/njlhb/archive/2007/12/23/1011410.html<br />http://dev.21tx.com/2005/03/07/11952.html<br /><img src ="http://www.blogjava.net/leekiang/aggbug/172051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-01-02 04:08 <a href="http://www.blogjava.net/leekiang/archive/2008/01/02/172051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Top Ten Oracle JDBC Tips(转)</title><link>http://www.blogjava.net/leekiang/archive/2007/12/30/171763.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sun, 30 Dec 2007 14:03:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/12/30/171763.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/171763.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/12/30/171763.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/171763.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/171763.html</trackback:ping><description><![CDATA[http://www.onjava.com/pub/a/onjava/2001/12/19/oraclejdbc.html<br /><br /><span class="bright-message-list"><span class="bright-subject">
                 为什么要始终使用PreparedStatement代替Statement及争议:<br />http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&amp;threadID=10397&amp;start=0&amp;tstart=0<br /></span></span><img src ="http://www.blogjava.net/leekiang/aggbug/171763.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-12-30 22:03 <a href="http://www.blogjava.net/leekiang/archive/2007/12/30/171763.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何用JDBC连接Oracle RAC 实现透明应用程序故障切换(转)</title><link>http://www.blogjava.net/leekiang/archive/2007/12/30/171761.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sun, 30 Dec 2007 13:51:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/12/30/171761.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/171761.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/12/30/171761.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/171761.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/171761.html</trackback:ping><description><![CDATA[   企业要求它们的企业应用程序有 99.99% 或者甚至 99.999% 的可用性是很常见的。考虑一下要确保全年不超过 0.5 小时的停机时间或者甚至没有停机时间将花费多大的代价。为了回应这些大量的高可用性需求，企业正投资于在一个参与系统出现故障时能够提供自动故障切换的机制。当考虑 Oracle 数据库的可用性时，Oracle9i RAC 提供了一个拥有高级故障切换机制的优越的解决方案。<br /><br />     Oracle9i RAC 包含了全部在一个集群配置中工作并负责提供持续的可用性的所需组件—当集群中的一个参与系统出现故障时，用户可以自动移植到其它的可用系统上。 Oracle9i RAC 的一个负责故障切换处理的主要组件是透明应用程序故障切换 (TAF) 选件。所有释放连接的数据库连接（和过程)都被重新连接到了集群中的另一个节点上。故障切换对用户是完全透明的。<br /><br />    下面是通过JDBC实现的透明应用程序故障切换的代码片断<p><br /><font color="#008000">     //Author : newall Date 2005-08-05 14:41</font> <br /><font color="#008000">     </font>Class.forName("oracle.jdbc.driver.OracleDriver"); <br /><font color="#008000">     </font>String
url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST =(LOAD_BALANCE =
yes)(ADDRESS=(PROTO =TCP)(HOST=node1)(PORT=1521))(ADDRESS=(PROTO
=TCP)(HOST=node2)(PORT=1521))(ADDRESS=(PROTO
=TCP)(HOST=node3)(PORT=1521))(ADDRESS=(PROTO
=TCP)(HOST=node4)(PORT=1521))(CONNECT_DATA =(SERVICE_NAME = <b><font color="#ff0000">oracleServerName</font></b>)(failover_mode = (type = select)(method = basic)(retries = 20)(delay = 15)))))";<br /><font color="#008000">     </font>String user="<font color="#ff0000"><strong>userName</strong></font>"; <br /><font color="#008000">     </font>String password="<font color="#ff0000"><strong>userPassword</strong></font>"; <br /><font color="#008000">     </font>conn= DriverManager.getConnection(url,user,password);</p><img src ="http://www.blogjava.net/leekiang/aggbug/171761.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-12-30 21:51 <a href="http://www.blogjava.net/leekiang/archive/2007/12/30/171761.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle行列转换</title><link>http://www.blogjava.net/leekiang/archive/2007/12/06/165798.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Thu, 06 Dec 2007 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/12/06/165798.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/165798.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/12/06/165798.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/165798.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/165798.html</trackback:ping><description><![CDATA[
		<a href="http://topic.csdn.net/t/20050929/16/4302364.html">http://topic.csdn.net/t/20050929/16/4302364.html</a>
		<br />
		<a href="http://topic.csdn.net/t/20050929/09/4301014.html">http://topic.csdn.net/t/20050929/09/4301014.html</a>
		<br />
		<br />Oracle多行记录合并/连接/聚合字符串的几种方法<br />http://blog.ccidnet.com/blog-htm-do-showone-uid-51502-type-blog-itemid-153656.html<br />http://www.china-askpro.com/msg45/qa43.shtml<br />http://topic.csdn.net/t/20060828/11/4980114.html<br /><img src ="http://www.blogjava.net/leekiang/aggbug/165798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-12-06 14:34 <a href="http://www.blogjava.net/leekiang/archive/2007/12/06/165798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>树的查询</title><link>http://www.blogjava.net/leekiang/archive/2007/10/31/157309.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Wed, 31 Oct 2007 13:13:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/10/31/157309.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/157309.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/10/31/157309.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/157309.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/157309.html</trackback:ping><description><![CDATA[1，查所有的子节点 select  *  from wz_tree   start with id = 1 connect by prior id = pid;<br />2，查所有的父节点  select  *  from wz_tree   start with id = 256 connect by prior pid = id;<br />   无论正树还是倒树, 关键就在于connect by的条件. <br />  
正树:  必须是  ‘父’= prior ‘子’<br />  
倒树:  必须是  ‘子’= prior ‘父’<br />3，查分类的路径, 用逗号连接:select  sys_connect_by_path(mc, ',')   from wz_tree   start with id = 1 connect by prior id = pid;<a href="http://www.itpub.net/838127.html">http://www.itpub.net/838127.html</a>讲的很详细。<br />   后注:<font color="#0000ff">查某个节点的全路径，用上面的办法是先取得所有节点的全路径的一个临时结果集，再从这个临时结果集里查询某个节点的全路径，这种办法太慢了。正确的做法是先查倒树的全路径，再取全路径最大的那条记录，这样做速度飞快。sql如下:<br />   select  max(sys_connect_by_path(mc, ','))   from wz_tree   start with id = ? connect by prior pid = id</font><br />   后注:后来发现一棵15000条记录的树，查所有节点的全路径还是非常快的(0.1秒)。<br />   <br />4，查某个表的字段名:<br />select max(substr(SYS_CONNECT_BY_PATH(COLUMN_NAME, ','), 2)) col<br />  from (select COLUMN_NAME, column_id<br />          from user_tab_columns<br />         where table_name = '&amp;TEST')--&amp;为plsqldeveloper里的字符串占位符,执行时会弹出对话框让你填值<br /> start with column_id = 1<br />connect by column_id = rownum;<br /><br />5，select  *  from wz_tree where mc like '%五金'  start with id = 1 connect by prior id = pid;<br />和select  *  from wz_tree start with id = 1 connect by prior id = pid and mc like '%五金' <br />二者的查询结果不一样.前者正常的先按名称进行过滤，后者过滤的是树的分支? 详见前面的链接。<br /><br />6,ORA-30004: 使用 SYS_CONNECT_BY_PATH 函数时，不能将分隔符作为列值的一部分。<br />  这是因为分隔符在列值里出现了。这个在使用oracle的SYS_CONNECT_BY_PATH函数时是禁止的。所以要把分隔符换掉。<br />  如果出现过以上报错，换掉分隔符后再次执行含SYS_CONNECT_BY_PATH 函数的sql时可能会报 "ora-00600: 内部错误代码 ,参数:[kokvxsql1],[][],[],..." 。不明白为什么，但重启oracle就不报错了。<br /><br />7,在oracle10g可以利用伪列函数CONNECT_BY_ISLEAF来判断当前行是不是叶子,如果是叶子就会在伪列中显示“1”，如果不是叶子而是一个分支就显示“0”<br /><br />8,<font size="2">sys_connect_by_path除了用于层次关系，还可以用于</font><font size="2">行列转换(借助rownum)。<br /></font><font size="2">  如把一个表的所有列连成一行，用逗号分隔:<br />select max(substr(sys_connect_by_path(column_name,','),2))<br />from (select column_name,rownum rn from user_tab_columns where table_name ='DEPT')<br />start with rn=1 connect by rn=rownum ;</font><br />-------------查得结果为:<br /><font size="2">DEPTNO,DEPTNAME,MGRNO</font><br /><br />参考:<br />http://ons.javaeye.com/blog/227113<br /><br /><br /><br /><img src ="http://www.blogjava.net/leekiang/aggbug/157309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-10-31 21:13 <a href="http://www.blogjava.net/leekiang/archive/2007/10/31/157309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>树的一种特殊设计(转)</title><link>http://www.blogjava.net/leekiang/archive/2007/09/12/144466.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Wed, 12 Sep 2007 05:37:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/09/12/144466.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/144466.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/09/12/144466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/144466.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/144466.html</trackback:ping><description><![CDATA[<div class="content">不考虑极端的情况，通常组织机构有个10几个层次就是顶天了。 所有，可以用一个字段存储下所有祖先的信息，例如varchar2(300),其中可以用 '.'隔开。 我的设想是这样的：<br />
id name Nodecode<br />
1 a 1<br />
2 b 1.2<br />
3 c 1.3<br />
4 d 1.2.4<br />
5 e 1.2.5<br />
6 f 1.2.5.6 <br />
<br />
从6可以直接看到它的上级脉络是6.5.2.1 。当然这里考虑的是级别不多的。但是除非你是很极端的应用，我想还是可以满足的。在插入和更新的时候注意维护nodecode即可。<br />
如果要照到祖先，则只要解析一下nodecode即可。<br />
同理如果要照后代，例如2的后代，则马上可以通过Like的方式获得.<br />
<br />
<a title="另一篇" href="http://db.phpup.com/show-article-1152/">另一篇</a>:<br />
因为TreeKey是个字符串，而1.10会排到1.2, 1.3之前，很显然，这不是我们要的结果。要解决其实也很简单，在编号前面补0，比如，1.10就写成0001.0010，1.2就写成0001.0002，这样排序就不会有问题了。<br />
<p>这让我想起很早前看的微软的一个有关树的软件代码，就看到他们是以000x.000x这种方式进行处理的，当时我还感觉他们怎么这么麻烦，现在想来，才发现是自己无知了，呵呵。</p>
<br />
</div>
<img src ="http://www.blogjava.net/leekiang/aggbug/144466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-09-12 13:37 <a href="http://www.blogjava.net/leekiang/archive/2007/09/12/144466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查找某个表被哪些表引用。外键</title><link>http://www.blogjava.net/leekiang/archive/2007/08/13/136345.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Mon, 13 Aug 2007 05:10:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/08/13/136345.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/136345.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/08/13/136345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/136345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/136345.html</trackback:ping><description><![CDATA[select fk_col.constraint_name, fk_col.table_name, fk_col.column_name<br />  from user_constraints pk, user_constraints fk, user_cons_columns fk_col<br /> where pk.table_name = 'TEST'<br />   and pk.constraint_type = 'P'<br />   and fk.r_constraint_name = pk.constraint_name<br />   and fk_col.constraint_name = fk.constraint_name<br /> order by 2, 3;<br /><br /><br /><span style="color: rgb(0, 0, 255);">select</span><span style="color: rgb(0, 0, 0);"> a.table_name 外键表名,a.column_name 外键列名,b.table_name 主键表名,b.column_name 主键列名<br /></span><span style="color: rgb(0, 0, 255);">from</span><span style="color: rgb(0, 0, 0);"> <br />
(</span><span style="color: rgb(0, 0, 255);">select</span><span style="color: rgb(0, 0, 0);"> a.constraint_name,b.table_name,b.column_name,a.r_constraint_name<br /></span><span style="color: rgb(0, 0, 255);">from</span><span style="color: rgb(0, 0, 0);"> user_constraints a, user_cons_columns b<br /></span><span style="color: rgb(0, 0, 255);">WHERE</span><span style="color: rgb(0, 0, 0);"> a.constraint_type</span><span style="color: rgb(128, 128, 128);">=</span><span style="color: rgb(255, 0, 0);">'</span><span style="color: rgb(255, 0, 0);">R</span><span style="color: rgb(255, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(128, 128, 128);">and</span><span style="color: rgb(0, 0, 0);"> a.constraint_name</span><span style="color: rgb(128, 128, 128);">=</span><span style="color: rgb(0, 0, 0);">b.constraint_name<br />
) a,<br />
(</span><span style="color: rgb(0, 0, 255);">select</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">distinct</span><span style="color: rgb(0, 0, 0);"> a.r_constraint_name,b.table_name,b.column_name<br /></span><span style="color: rgb(0, 0, 255);">from</span><span style="color: rgb(0, 0, 0);"> user_constraints a, user_cons_columns b<br /></span><span style="color: rgb(0, 0, 255);">WHERE</span><span style="color: rgb(0, 0, 0);">   a.constraint_type</span><span style="color: rgb(128, 128, 128);">=</span><span style="color: rgb(255, 0, 0);">'</span><span style="color: rgb(255, 0, 0);">R</span><span style="color: rgb(255, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(128, 128, 128);">and</span><span style="color: rgb(0, 0, 0);"> <br />
a.r_constraint_name</span><span style="color: rgb(128, 128, 128);">=</span><span style="color: rgb(0, 0, 0);">b.constraint_name)<br />
b<br /></span><span style="color: rgb(0, 0, 255);">where</span><span style="color: rgb(0, 0, 0);"> a.r_constraint_name</span><span style="color: rgb(128, 128, 128);">=</span><span style="color: rgb(0, 0, 0);">b.r_constraint_name <br /><br /><br /><br /></span><img src ="http://www.blogjava.net/leekiang/aggbug/136345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-08-13 13:10 <a href="http://www.blogjava.net/leekiang/archive/2007/08/13/136345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle TIPS</title><link>http://www.blogjava.net/leekiang/archive/2007/07/15/130327.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sat, 14 Jul 2007 19:15:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/07/15/130327.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/130327.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/07/15/130327.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/130327.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/130327.html</trackback:ping><description><![CDATA[
		<p>1,"&amp;"有时候不认，则改为"&amp;amp;"</p>
		<p>   但在执行insert操作或update操作时如果sql语句中含"&amp;amp;",如何处理？</p>
		<p>   <span id="lblsummary">     1) update userinfo set pageurl='myjsp?page=1'||'&amp;'||'pagesize=10' where id='test'         2) update userinfo set <strong style="color: black; background-color: rgb(160, 255, 255);"></strong>pageurl='myjsp?page=1'||chr(38)||'pagesize=10' where id='test'其中||是连字符, chr(38)跟ASCII的字符转码是一致的。plsql中还可以set define off<strong style="color: black; background-color: rgb(153, 255, 153);"></strong>来关闭特殊字符，还可以用show define来查看有些特殊定义的字符</span></p>
		<p>
				<br />2,慎用where pid!=3等用法,这样没有囊括is null的情况,要实现同样目的可where pid!=3 or pid is null<br />3,快速从另外一个表复制数据<br />  insert into tablea (id,name) select id,name from tableb<br />4,查版本<br />  select * from PRODUCT_COMPONENT_VERSION;或 select * from v$version;<br />5,nls==National   Language   Support   国际语言支持<br />6,PLSQL<br />  HKEY_CURRENT_USER\Software\Allround Automations<br />  HKEY_CURRENT_USER\Software\Microsoft\Security<br />7,查blob大小<br />  select dbms_lob.getlength(blobfield) from wd_blob<br />8,改变表空间<br />  alter table TB_USER move tablespace myspace;<br />  如果被转移表空间的表含有索引, 表转移后索引变得不可用. 要删除旧索引,建立新索引<font color="#333333"><br />  alter index user_name.index_name rebuild; 主键索引名与主键名相同<br />9,导入时表空间错误<br />  导出dmp时的用户的默认表空间必须是表所在的表空间，这样导入时才不会出错。<br />  如果dmp小，也可用UE打开直接修改表空间。<br /><br />10，用select into 复制数据<br /></font><font color="#333333">insert into test<br />  (id, name)<br />  select id, name from <a href="mailto:mis_group@dblink">mis@dblink</a>;<br />  或<br />  create table test--需先删表<br />as (select * from <a href="mailto:mis_group@sjy">mis@dblink</a>)<br /><br />11,中文字段按拼音排序：<br />select username from tab_name order by nlssort(username,'nls_sort=schinese_pinyin_m');<br />按偏旁部首:<br />select username from tab_name order by nlssort(username,'nls_sort=schinese_radical_m');<br />按笔画:<br />select username from tab_name order by nlssort(username,'nls_sort=schinese_stroke_m');</font></p>
		<p>
				<font color="#333333">12,插入带单引号的字符</font>
		</p>
		<p>
				<font color="#333333">insert into t(a) values ('a'||chr(39)||'b' );<br />或insert into t(a) varlus ('a''b');</font>
		</p>
		<p>
				<font color="#333333">13,</font>如果你连接到数据库后没有在取nextval之后再取currval，就会出现ORA-08002出错.  <br />  因此对每一个session来说，应该先用nextval，才可以取currval。 <br /></p>
		<p>14<br /></p>
		<p>truncate table mapevent时，如果建了外键引用(外键所在那张表不一定有数据,有数据就会报另外一个错误了)<br />则报 ORA-02266:表中的唯一主键被启用的外部关键字引用<br />ORA-02266: unique/primary keys in table referenced by enabled foreign keys<br />(外键所在那张表无数据时delete from table mapevent是可以执行的)<br />正确的步骤:<br />----------------<br />alter table mapevent disable primary key cascade;<br />truncate table mapevent;<br />alter table mapevent enable primary key;<br />---------------<br /></p>
		<p>15<br />查询某个表被哪些表引用<br />select *<br />  from user_constraints t<br /> where t.constraint_type = 'R'<br />   and t.r_constraint_name = '该表的主键名';</p>
		<p>16,按中文排序，但中文的一二三四五有问题，可用下面的办法:<br /></p>
		<p>select * from T_TIME_SETUP order by translate(ccname,'一二三四五','12345')</p>
		<p>来源:http://www.itpub.net/226375,1.html</p>
		<p>17,误删了怎么办?用Oracle中的回闪查询</p>
		<p>查20分钟前的数据:<br /></p>
		<p> select * from tb_wz as of timestamp(sysdate - 20 / 1440)</p>
		<p>  http://blog.csdn.net/xuyuan77/archive/2007/06/06/1640757.aspx</p>
		<p>18，导出带有blobh或clob类型字段表时会出现:EXP-00003: 未找到段 (8,375419) 的存储定义<br /> 原因见http://read.newbooks.com.cn/info/116619.html</p>
		<p>19,导出命令</p>
		<p>exp Test1/Test1passwd@服务名 owner=Test1 file=D:\files\Test1.dmp log=d:\log.log</p>
		<p>exp还有一个参数full=y</p>
		<p>imp aichannel/aichannel@HUST full=y  file=test.dmp ignore=y</p>
		<p>20，查oracle的保留字 select * from v$reserved_words</p>
		<p>21,修改序列的当前值</p>
		<p>alter sequence userseq increment by 500;<br /> select userseq.nextval from dual;<br />alter sequence userseq increment by 1;</p>
		<p>
				<br />
		</p>22，序列跳20号<br />create sequence ORA_SEQ <br /> minvalue 100000000000 <br /> maxvalue 999999999999 <br /> start with 100000000260 <br /> increment by 1 <br /> cache 20 <br />如果设置了cache 20，数据库关闭时这20个序列成员会丢失，造成序列不连续的现象。 <br /> 序列设置nocache模式即可<br />http://topic.csdn.net/u/20090421/20/7edde8ab-dbcc-4765-b9b9-a7fae3d2af39.html<br />绝不能跳号的序列号设计问题 http://www.itpub.net/viewthread.php?tid=403149<br /><br />23,用9i的OEM去连10g,如果是普通用户登录，就会报<br />你必须具有select any dictionary权限才能运行此应用程序,请要求DBA为你赋予此权限<br /> 这是是9I的OEM在连接10G的数据库的时候的一个BUG,目前没有解决办法。<br />http://www.itpub.net/thread-888007-1-1.html<br /><br />24,可用其他dba用户修改system用户的密码<br /><br />25,查看oracle最大连接数<br />show parameter processes<br />show parameter sessions<br />一个session对应一个process，但是一个process未必对应一个session<br />SELECT * FROM v$process p<br /> WHERE NOT EXISTS (SELECT 1 FROM v$session WHERE p.paddr = p.addr);<br /> alter system set sessions=300 scope=spfile;需重启<br /><br />v$resource_limit视图各字段的含义<br />current_utilization   -   Number   of   (resources,   locks,   or   processes)   currently <br /> being   used <br /><br /> max_utization   -   Maximum   consumption   of   the   resource   since   the   last <br /> instance   start   up 自从上次启动以来的最大值<br /><br /> initial_allocation   -   Initial   allocation.   This   will   be   equal   to   the   value <br /> specified   for   the   resource   in   the   initialization   parameter <br /> file   (UNLIMITED   for   infinite   allocation) <br /><br /> limit_value   -   Unlimited   for   resources   and   locks.   This   can   be   greater <br /> than   the   initial   allocation   value   (UNLIMITED   for   infinite <br /> limit). <br /><br />26,<br />IMP-00003: 遇到 ORACLE 错误 959<br />ORA-00959: 表空间'TBS_BSS'不存在<br />这种类型的错误往往是因为表上有大字段，而大字段所在的表空间不存在。普通字段是可以导到不同名的表空间的。<br /><br />27,<br />alter table USERS add  primary key (userid);//不好，会自动生成约束名，不利于移植数据<br />alter table USERS  add  constraint PK_USERS  primary key (userid);//ok.外键也是如此。<br /><br />28,<br />INTERSECT 
操作符用来返回两个查询中都存在的记录，即返回两个查询结果的交集，前提是两个查询的列的数量和数据类型必须完全相同。<br /><p></p><p></p><p><br /></p><img src ="http://www.blogjava.net/leekiang/aggbug/130327.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-07-15 03:15 <a href="http://www.blogjava.net/leekiang/archive/2007/07/15/130327.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>取最新的几条记录(及rownum的解释)</title><link>http://www.blogjava.net/leekiang/archive/2007/07/15/130326.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sat, 14 Jul 2007 19:12:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/07/15/130326.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/130326.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/07/15/130326.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/130326.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/130326.html</trackback:ping><description><![CDATA[select rownum,c1 from t1 where rownum &gt; 10没有记录，
<p>因为第一条不满足去掉的话，第二条的ROWNUM又成了1，所以永远没有满足条件的记录。或者可以这样理解：</p><p>ROWNUM是一个序列，是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1，第二条为2，依次类推。如果你用&gt;,&gt;=,=,between...and这些条件，因为从缓冲区或数据文件中得到的第一条记录的rownum为1，则被删除，接着取下条，可是它的rownum还是1，又被删除，依次类推，便没有了数据。</p><p>select rownum,c1 from t1 where rownum != 10 为何是返回前9条数据呢？<br />为什么 rownum &gt;1 时查不到一条记录，而 rownum &gt;0 或 rownum &gt;=1 却总显示所以的记录<br />任何时候想把 rownum = 1 这条记录抛弃是不对的，它在结果集中是不可或缺的，少了rownum=1 就像空中楼阁一般不能存在，所以你的 rownum 条件要包含到 1 </p><p>但如果就是想要用 rownum &gt; 10 这种条件的话话就要用嵌套语句,把 rownum 先生成，然后对他进行查询。<br />select * <br />from (selet rownum as rn，t1.* from a where ...)<br />where rn &gt;10</p><p>一般代码中对结果集进行分页就是这么干的。</p><p>另外：rowid 与 rownum 虽都被称为伪列，但它们的存在方式是不一样的，rowid 可以说是物理存在的，表示记录在表空间中的唯一位置ID，在DB中唯一。只要记录没被搬动过，rowid是不变的。rowid 相对于表来说又像表中的一般列，所以以 rowid 为条件就不会有 rownum那些情况发生。</p>详见<a href="http://hi.baidu.com/jztchina/blog/item/4cca34971258fe6954fb96d6.html">http://hi.baidu.com/jztchina/blog/item/4cca34971258fe6954fb96d6.html</a><br /><br />Oracle在检索的时候，会首先把数据都检索出来，然后在排序段中进行排序。假如你有一个SQL语句如下所示 
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">SELECT</span><span style="COLOR: #000000"><br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        EMP_NO<br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">FROM</span><span style="COLOR: #000000"><br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        EMP<br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">WHERE</span><span style="COLOR: #000000"><br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        ROWNUM </span><span style="COLOR: #808080">&lt;</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #800000">10</span><span style="COLOR: #000000"><br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">ORDER</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">BY</span><span style="COLOR: #000000"><br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        EMP_NO</span></div></div><p>        在检索的时候，会首先把数据检索出来，也就是把EMP表数据都检索出来，然后再Order by排序操作。因为ROWNUM 数据是在排序前就检索出来的了，所以不能利用ROWNUM来取得排序后的前10条操作。那么应该如何操作呢。其实很简单，利用子查询，先排序，再取ROWNUM。如下所示</p><div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">SELECT</span><span style="COLOR: #000000"><br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        EMP_NO<br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">FROM</span><span style="COLOR: #000000"><br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        (<br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">SELECT</span><span style="COLOR: #000000"> <br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                EMP_NO<br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">FROM</span><span style="COLOR: #000000"><br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                EMP<br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">ORDER</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">BY</span><span style="COLOR: #000000"><br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                EMP_NO<br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        )<br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">WHERE</span><span style="COLOR: #000000"><br /><img title="点击图片可在新窗口打开" style="CURSOR: pointer" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        ROWNUM </span><span style="COLOR: #808080">&lt;</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #800000">10</span></div></div><img src ="http://www.blogjava.net/leekiang/aggbug/130326.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-07-15 03:12 <a href="http://www.blogjava.net/leekiang/archive/2007/07/15/130326.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>触发器</title><link>http://www.blogjava.net/leekiang/archive/2007/07/14/130306.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sat, 14 Jul 2007 14:35:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/07/14/130306.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/130306.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/07/14/130306.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/130306.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/130306.html</trackback:ping><description><![CDATA[create or replace trigger auth_secure <br>before insert or update or delete&nbsp; <br>on auths //对整表更新前触发<br>begin <br>if(to_char(sysdate,'DY')='SUN' <br>RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表auths'); <br>end if; <br>end&nbsp;<br><br>RAISE_APPLICATION_ERROR的错误代码在-20000到-20999之间，这样就不会与 ORACLE 的任何错误代码发生冲突 <br><br><font face=Verdana>禁止ddl操作<br>create or replace trigger ddl_deny<br>before create or alter or drop or truncate on database//系统级别的触发器<br>declare<br>v_errmsg varchar2(100):= 'You have no permission to this operation';<br>begin<br>if ora_sysevent = 'CREATE' then<br>raise_application_error(-20001, ora_dict_obj_owner || '.' || ora_dict_obj_name || ' ' || v_errmsg);<br>elsif ora_sysevent = 'ALTER' then<br>raise_application_error(-20001, ora_dict_obj_owner || '.' || ora_dict_obj_name || ' ' || v_errmsg);<br>elsif ora_sysevent = 'DROP' then<br>raise_application_error(-20001, ora_dict_obj_owner || '.' || ora_dict_obj_name || ' ' || v_errmsg);<br>elsif ora_sysevent = 'TRUNCATE' then<br>raise_application_error(-20001, ora_dict_obj_owner || '.' || ora_dict_obj_name || ' ' || v_errmsg);<br>end if;<br>exception<br>when no_data_found then<br>null;<br>end;<br></font>又一例:<br>create or replace trigger his_trig_u<br>&nbsp; after update ON MYDATA<br>&nbsp; FOR EACH ROW<br>declare<br>&nbsp; temp_count number;<br>BEGIN<br>&nbsp; select count(*)<br>&nbsp;&nbsp;&nbsp; into temp_count<br>&nbsp;&nbsp;&nbsp; from DATAHIS t<br>&nbsp;&nbsp; where t.num = :new.num<br>&nbsp;&nbsp;&nbsp;&nbsp; and t.time = :new.time;<br>&nbsp; if temp_count = 0 then<br>&nbsp;&nbsp;&nbsp; insert into DATAHIS<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (uid, num, value, time)<br>&nbsp;&nbsp;&nbsp; values<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (data_sql.nextval,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.num,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.value,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :new.time);<br>&nbsp; end if;<br>END;<br>begin前面出现的new，old不加冒号，begin和end之间出现的new和old都要在前面加上":"<br><br>用触发器完成动态数据的操作 <br>　　在涉及如何实现动态库存的问题时，可用触发器解决。仓库有验收、出库、调拨、报废、退料、让售等这些数据必须与以前的库存相加减，才能完成动态库存操作。本文仅以验收单触发器为例，其它的结构雷同。它们涉及到两个基表：bi&shy;_ysd(验收单)，Bj_kcb(当前库存表)，前者的表结构（rq(日期)，ysdh(验收单号)， bjbm(备件编码)，yssl(验收数量)，ysdj(验收单价)），后者的表结构为（bjbm（备件编码）,dqkcl（当前库存量）,dqkcje（当前库存金额））触发器如下： <br>　　<br>&nbsp;create or replace trigger trig_ysd <br>&nbsp;after insert or update or delete on bj_ysd <br>&nbsp;for each row <br>&nbsp;&nbsp;declare rq1 varchar2(8);rq2 varchar2(8); <br>&nbsp;&nbsp;/*限于篇幅，yssl1,yssl2,ysdj1,ysdj2,bjbm1,bjbm2,ii声明略*/ <br>&nbsp;&nbsp;if inserting or updating then <br>&nbsp;&nbsp;&nbsp;rq1:=:new.rq;bjbm1:=:new.bjbm;yssl1:=:new.yssl; <br>&nbsp;&nbsp;&nbsp;ysdj1:=:new.ysdj; <br>　　<br>&nbsp;&nbsp;&nbsp;select count(*) into ii from bj_dqkcb <br>&nbsp;&nbsp;&nbsp;where bjbm=bjbm1; <br>　　<br>&nbsp;&nbsp;&nbsp;if　ii=0　then <br>&nbsp;&nbsp;&nbsp;&nbsp;insert　into　bj_dqkcb(bjbm,dqkcl,dqkcje) <br>&nbsp;&nbsp;&nbsp;&nbsp;value(bjbm1,yssl1,ysdj1); <br>&nbsp;&nbsp;&nbsp;else <br>&nbsp;&nbsp;&nbsp;&nbsp;update bj_dqkcb <br>&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;dqkcl=dqkcl+yssl1; <br>　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dqkcje=dqkcje+yssl1*ysdj1; <br>&nbsp;&nbsp;&nbsp;end if <br>&nbsp;&nbsp;end if <br>　　<br>&nbsp;&nbsp;if deleting or updating then <br>&nbsp;&nbsp;&nbsp;rq2:=:old.rq;<br>&nbsp;&nbsp;&nbsp;bjbm2:=:old.bjbm;<br>&nbsp;&nbsp;&nbsp;yssl2:=:old.yssl; <br>&nbsp;&nbsp;&nbsp;ysdj2:=:old.ysdj; <br>&nbsp;&nbsp;&nbsp;update&nbsp;bj_dqkcb <br>&nbsp;&nbsp;&nbsp;set&nbsp;dqkcb=dqkcl-yssl2; <br>&nbsp;&nbsp;&nbsp;&nbsp;dqkcje=dqkcje-yssl2*ysdj2 <br>&nbsp;&nbsp;end if; <br>&nbsp;end ; <br>
<img src ="http://www.blogjava.net/leekiang/aggbug/130306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-07-14 22:35 <a href="http://www.blogjava.net/leekiang/archive/2007/07/14/130306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>别名为什么不能做条件，ORA-00904: "CCC": 标识符无效</title><link>http://www.blogjava.net/leekiang/archive/2007/07/04/128185.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Wed, 04 Jul 2007 12:53:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/07/04/128185.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/128185.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/07/04/128185.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/128185.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/128185.html</trackback:ping><description><![CDATA[<font face=Verdana>别名为什么不能做条件，ORA-00904: "CCC": 标识符无效。</font>
<p><font face="verdana, arial, helvetica" size=2><span class=javascript id=text6875927 style="FONT-SIZE: 12px">请教：<br>SQL&gt; select jno,jname,nval,val,val-nval ccc from jj where ccc &gt; 1;<br>出现错误:<br>ORA-00904: "CCC": 标识符无效<br><br>为什么啊，查资料select的用法里面没用查到。<br>SQL&gt; select jno,jname,nval,val,val-nval ccc from jj where (val-nval)&gt; 1;<br>这样就可以的，我还想按 ccc 排序，也不行。<br>哪位老大指点一下，多谢！！</span></font></p>
<p><font face="verdana, arial, helvetica" size=2><span class=javascript id=text6875965 style="FONT-SIZE: 12px">where子句中只能直接使用栏位或者常量，而不能使用栏位的别名，除非这个别名来自子查询之中，如：select .... from (select col1 ccc from table) where ccc &gt; 1<br>而order by 则可以直接使用别名，如select col1 ccc from table order by ccc<br>我想，这和sql 的执行顺序是有关的，where中的部分先执行 －&gt; 如果有group by，接着执行group by －&gt; select中的函数计算、别名指定再运行 －&gt; 最后order by<br>因此，字段、表达式的别名在where子句和group by子句都是不能使用的，而在order by中不仅可以使用别名，甚至可以直接使用栏位的下标来进行排序，如：order by 1 desc,2 asc 呵呵</span></font></p>
<img src ="http://www.blogjava.net/leekiang/aggbug/128185.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-07-04 20:53 <a href="http://www.blogjava.net/leekiang/archive/2007/07/04/128185.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle的Number(p,s)的含义</title><link>http://www.blogjava.net/leekiang/archive/2007/07/03/127956.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Tue, 03 Jul 2007 13:35:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/07/03/127956.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/127956.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/07/03/127956.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/127956.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/127956.html</trackback:ping><description><![CDATA[<p>number(p,s) p:1~38&nbsp; s:-84~127<br></p>
<p>最高整数位数＝p-s<br>s正数，小数点右边指定位置开始四舍五入<br>s负数，小数点左边指定位置开始四舍五入<br>s是0或者未指定，四舍五入到最近整数<br>当p小于s时候，表示数字是绝对值小于1的数字，且从小数点右边开始的前s-p 位必须是0，保留s位小数。<br><br>p&gt;0，对s分2种情况：<br>1. s&gt;0<br>精确到小数点右边s位，并四舍五入。然后检验有效数位是否&lt;=p；如果s&gt;p，小数点右边至少有s-p个0填充。<br>2. s&lt;0<br>精确到小数点左边s位，并四舍五入。然后检验有效数位是否&lt;=p+|s|<br>比如<br><span style="FONT-SIZE: 10pt"><font color=#0000bb>Value &nbsp;&nbsp;&nbsp;&nbsp;Datatype &nbsp;&nbsp;&nbsp;&nbsp;Stored Value <br>123.2564&nbsp;&nbsp;&nbsp;&nbsp;NUMBER&nbsp;&nbsp;&nbsp;&nbsp;123.2564<br>1234.9876&nbsp;&nbsp;&nbsp;&nbsp;NUMBER</font><font color=#007700>(</font><font color=#0000bb>6</font><font color=#007700>,</font><font color=#0000bb>2</font><font color=#007700>)&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span style="FONT-SIZE: 10pt"><font color=#0000bb>1234.99<br>12345.12345&nbsp;&nbsp;&nbsp;&nbsp;NUMBER</font><font color=#007700>(</font><font color=#0000bb>6</font><font color=#007700>,</font><font color=#0000bb>2</font><font color=#007700>)&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span style="FONT-SIZE: 10pt"><font color=#0000bb>Error<br>1234.9876&nbsp;&nbsp;&nbsp;&nbsp;NUMBER</font><font color=#007700>(</font><font color=#0000bb>6</font><font color=#007700>)&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span style="FONT-SIZE: 10pt"><font color=#0000bb>1235<br>12345.345&nbsp;&nbsp;&nbsp;&nbsp;NUMBER</font><font color=#007700>(</font><font color=#0000bb>5</font><font color=#007700>,-</font><font color=#0000bb>2</font><font color=#007700>)&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span style="FONT-SIZE: 10pt"><font color=#0000bb>12300<br>1234567&nbsp;&nbsp;&nbsp;&nbsp;NUMBER</font><font color=#007700>(</font><font color=#0000bb>5</font><font color=#007700>,-</font><font color=#0000bb>2</font><font color=#007700>)&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span style="FONT-SIZE: 10pt"><font color=#0000bb>1234600<br>12345678&nbsp;&nbsp;&nbsp;&nbsp;NUMBER</font><font color=#007700>(</font><font color=#0000bb>5</font><font color=#007700>,-</font><font color=#0000bb>2</font><font color=#007700>)&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span style="FONT-SIZE: 10pt"><font color=#0000bb>Error<br>123456789&nbsp;&nbsp;&nbsp;&nbsp;NUMBER</font><font color=#007700>(</font><font color=#0000bb>5</font><font color=#007700>,-</font><font color=#0000bb>4</font><font color=#007700>)&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span style="FONT-SIZE: 10pt"><font color=#0000bb>123460000<br>1234567890&nbsp;&nbsp;&nbsp;&nbsp;NUMBER</font><font color=#007700>(</font><font color=#0000bb>5</font><font color=#007700>,-</font><font color=#0000bb>4</font><font color=#007700>)&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span style="FONT-SIZE: 10pt"><font color=#0000bb>Error<br>12345.58&nbsp;&nbsp;&nbsp;&nbsp;NUMBER</font><font color=#007700>(*, </font><font color=#0000bb>1</font><font color=#007700>)&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span style="FONT-SIZE: 10pt"><font color=#0000bb>12345.6<br>0.1&nbsp;&nbsp;&nbsp;&nbsp;NUMBER</font><font color=#007700>(</font><font color=#0000bb>4</font><font color=#007700>,</font><font color=#0000bb>5</font><font color=#007700>)&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span style="FONT-SIZE: 10pt"><font color=#0000bb>Error<br>0.01234567&nbsp;&nbsp;&nbsp;&nbsp;NUMBER</font><font color=#007700>(</font><font color=#0000bb>4</font><font color=#007700>,</font><font color=#0000bb>5</font><font color=#007700>)&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span style="FONT-SIZE: 10pt"><font color=#0000bb>0.01235<br>0.09999&nbsp;&nbsp;&nbsp;&nbsp;NUMBER</font><font color=#007700>(</font><font color=#0000bb>4</font><font color=#007700>,</font><font color=#0000bb>5</font><font color=#007700>)&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span style="FONT-SIZE: 10pt"><font color=#0000bb>0.09999<br>0.099996&nbsp;&nbsp;&nbsp;&nbsp;NUMBER</font><font color=#007700>(</font><font color=#0000bb>4</font><font color=#007700>,</font><font color=#0000bb>5</font><font color=#007700>)&nbsp;&nbsp;&nbsp;&nbsp;</font><font font="">&lt;&gt;<br><img height=223 alt="" src="http://www.blogjava.net/images/blogjava_net/leekiang/ora.png" width=514 border=0></font></span></p>
<img src ="http://www.blogjava.net/leekiang/aggbug/127956.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-07-03 21:35 <a href="http://www.blogjava.net/leekiang/archive/2007/07/03/127956.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>游标</title><link>http://www.blogjava.net/leekiang/archive/2007/05/10/116448.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Thu, 10 May 2007 04:38:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/05/10/116448.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/116448.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/05/10/116448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/116448.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/116448.html</trackback:ping><description><![CDATA[select * from v$Open_cursor;<br>show parameters open_cursors;
<img src ="http://www.blogjava.net/leekiang/aggbug/116448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-05-10 12:38 <a href="http://www.blogjava.net/leekiang/archive/2007/05/10/116448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>