﻿<?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/ocean07000814/category/15459.html</link><description>共同探讨STRUTS#HIBERNATE#SPRING#EJB等技术</description><language>zh-cn</language><lastBuildDate>Tue, 10 May 2011 10:13:21 GMT</lastBuildDate><pubDate>Tue, 10 May 2011 10:13:21 GMT</pubDate><ttl>60</ttl><item><title>Oracle中的BLOB和CLOB</title><link>http://www.blogjava.net/ocean07000814/articles/349569.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Thu, 05 May 2011 03:07:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/349569.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/349569.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/349569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/349569.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/349569.html</trackback:ping><description><![CDATA[Oracle中的BLOB和CLOB<br />
<br />
一、区别和定义<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LONG: 可变长的字符串数据，最长2G，LONG具有VARCHAR2列的特性，可以存储长文本一个表中最多一个LONG列<br />
<br />
&nbsp; LONG RAW: 可变长二进制数据，最长2G<br />
<br />
&nbsp; CLOB: 字符大对象Clob 用来存储单字节的字符数据<br />
<br />
&nbsp; NCLOB: 用来存储多字节的字符数据<br />
<br />
&nbsp; BLOB: 用于存储二进制数据<br />
<br />
&nbsp; BFILE: 存储在文件中的二进制数据，这个文件中的数据只能被只读访。但该文件不包含在数据库内。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复.<br />
<br />
&nbsp; <br />
<br />
&nbsp; CLOB，NCLOB，BLOB都是内部的LOB(Large Object)类型，最长4G，没有LONG只能有一列的限制<br />
<br />
&nbsp; 要保存图片、文本文件、Word文件各自最好用哪种数据类型?<br />
<br />
&nbsp; --BLOB最好，LONG RAW也不错，但Long是oracle将要废弃的类型，因此建议用BLOB。<br />
<br />
二、操作<br />
<br />
1、 get<br />
<br />
<br />
CLOB<br />
<br />
<br />
java 代码<br />
<br />
<br />
//获得数据库连接&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; Connection con = ConnectionFactory.getConnection();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; con.setAutoCommit(false);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; Statement st = con.createStatement();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; //不需要&#8220;for update&#8221;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; if (rs.next())&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.sql.Clob clob = rs.getClob("CLOBATTR");&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Reader inStream = clob.getCharacterStream();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[] c = new char[(int) clob.length()];&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inStream.read(c);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //data是读出并需要返回的数据，类型是String&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data = new String(c);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inStream.close();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; inStream.close();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; con.commit();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; con.close();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
<br />
<br />
BLOB<br />
<br />
java 代码<br />
<br />
<br />
//获得数据库连接&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; Connection con = ConnectionFactory.getConnection();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; con.setAutoCommit(false);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; Statement st = con.createStatement();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; //不需要&#8220;for update&#8221;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1");&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; if (rs.next())&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.sql.Blob blob = rs.getBlob("BLOBATTR");&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream inStream = blob.getBinaryStream();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //data是读出并需要返回的数据，类型是byte[]&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data = new byte[input.available()];&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inStream.read(data);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inStream.close();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; inStream.close();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; con.commit();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; con.close();&nbsp;&nbsp;&nbsp; <br />
<br />
<br />
2、 put<br />
<br />
CLOB<br />
<br />
java 代码<br />
<br />
<br />
//获得数据库连接&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; Connection con = ConnectionFactory.getConnection();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; con.setAutoCommit(false);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; Statement st = con.createStatement();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; //插入一个空对象empty_clob()&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; //锁定数据行进行更新，注意&#8220;for update&#8221;语句&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; if (rs.next())&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到java.sql.Clob对象后强制转换为oracle.sql.CLOB&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Writer outStream = clob.getCharacterOutputStream();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //data是传入的字符串，定义：String data&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[] c = data.toCharArray();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outStream.write(c, 0, c.length);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; outStream.flush();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; outStream.close();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; con.commit();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; con.close();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
<br />
BLOB<br />
<br />
java 代码<br />
<br />
<br />
//获得数据库连接&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; Connection con = ConnectionFactory.getConnection();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; con.setAutoCommit(false);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; Statement st = con.createStatement();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; //插入一个空对象empty_blob()&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; //锁定数据行进行更新，注意&#8220;for update&#8221;语句&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; if (rs.next())&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到java.sql.Blob对象后强制转换为oracle.sql.BLOB&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("BLOBATTR");&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputStream outStream = blob.getBinaryOutputStream();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //data是传入的byte数组，定义：byte[] data&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outStream.write(data, 0, data.length);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; outStream.flush();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; outStream.close();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; con.commit();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; con.close();&nbsp;&nbsp;&nbsp; <br />
<br />
<br />
=======================================================================<br />
<br />
厚厚发表于 2006年06月27日 <br />
<br />
网络上很多关于JAVA对Oracle中BLOB、CLOB类型字段的操作说明，有的不够全面，有的不够准确，甚至有的简直就是胡说八道。最近的项目正巧用到了这方面的知识，在这里做个总结。<br />
环境：<br />
Database: Oracle 9i<br />
App Server: BEA Weblogic 8.14<br />
表结构：<br />
CREATE TABLE TESTBLOB (ID Int, NAME Varchar2(20), BLOBATTR Blob)<br />
CREATE TABLE TESTBLOB (ID Int, NAME Varchar2(20), CLOBATTR Clob)<br />
JAVA可以通过JDBC，也可以通过JNDI访问并操作数据库，这两种方式的具体操作存在着一些差异，由于通过App Server的数据库连接池JNDI获得的数据库连接提供的java.sql.Blob和java.sql.Clob实现类与JDBC方式提供的不同，因此在入库操作的时候需要分别对待；出库操作没有这种差异，因此不用单独对待。<br />
<br />
一、BLOB操作<br />
1、入库<br />
（1）JDBC方式<br />
//通过JDBC获得数据库连接<br />
Class.forName("oracle.jdbc.driver.OracleDriver");<br />
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:testdb", "test", "test");<br />
con.setAutoCommit(false);<br />
Statement st = con.createStatement();<br />
//插入一个空对象empty_blob()<br />
st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");<br />
//锁定数据行进行更新，注意&#8220;for update&#8221;语句<br />
ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");<br />
if (rs.next())<br />
{<br />
//得到java.sql.Blob对象后强制转换为oracle.sql.BLOB<br />
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("BLOBATTR");<br />
OutputStream outStream = blob.getBinaryOutputStream();<br />
//data是传入的byte数组，定义：byte[] data<br />
outStream.write(data, 0, data.length);<br />
}<br />
outStream.flush();<br />
outStream.close();<br />
con.commit();<br />
con.close();<br />
（2）JNDI方式<br />
//通过JNDI获得数据库连接<br />
Context context = new InitialContext();<br />
ds = (DataSource) context.lookup("ORA_JNDI");<br />
Connection con = ds.getConnection();<br />
con.setAutoCommit(false);<br />
Statement st = con.createStatement();<br />
//插入一个空对象empty_blob()<br />
st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");<br />
//锁定数据行进行更新，注意&#8220;for update&#8221;语句<br />
ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");<br />
if (rs.next())<br />
{<br />
//得到java.sql.Blob对象后强制转换为weblogic.jdbc.vendor.oracle.OracleThinBlob（不同的App Server对应的可能会不同）<br />
weblogic.jdbc.vendor.oracle.OracleThinBlob blob = (weblogic.jdbc.vendor.oracle.OracleThinBlob) rs.getBlob("BLOBATTR");<br />
OutputStream outStream = blob.getBinaryOutputStream();<br />
//data是传入的byte数组，定义：byte[] data<br />
outStream.write(data, 0, data.length);<br />
}<br />
outStream.flush();<br />
outStream.close();<br />
con.commit();<br />
con.close();<br />
2、出库<br />
//获得数据库连接<br />
Connection con = ConnectionFactory.getConnection();<br />
con.setAutoCommit(false);<br />
Statement st = con.createStatement();<br />
//不需要&#8220;for update&#8221;<br />
ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1");<br />
if (rs.next())<br />
{<br />
java.sql.Blob blob = rs.getBlob("BLOBATTR");<br />
InputStream inStream = blob.getBinaryStream();<br />
//data是读出并需要返回的数据，类型是byte[]<br />
data = new byte[input.available()];<br />
inStream.read(data);<br />
inStream.close();<br />
}<br />
inStream.close();<br />
con.commit();<br />
con.close();<br />
二、CLOB操作<br />
1、入库<br />
（1）JDBC方式<br />
//通过JDBC获得数据库连接<br />
Class.forName("oracle.jdbc.driver.OracleDriver");<br />
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:testdb", "test", "test");<br />
con.setAutoCommit(false);<br />
Statement st = con.createStatement();<br />
//插入一个空对象empty_clob()<br />
st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");<br />
//锁定数据行进行更新，注意&#8220;for update&#8221;语句<br />
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");<br />
if (rs.next())<br />
{<br />
//得到java.sql.Clob对象后强制转换为oracle.sql.CLOB<br />
oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");<br />
Writer outStream = clob.getCharacterOutputStream();<br />
//data是传入的字符串，定义：String data<br />
char[] c = data.toCharArray();<br />
outStream.write(c, 0, c.length);<br />
}<br />
outStream.flush();<br />
outStream.close();<br />
con.commit();<br />
con.close();<br />
（2）JNDI方式<br />
//通过JNDI获得数据库连接<br />
Context context = new InitialContext();<br />
ds = (DataSource) context.lookup("ORA_JNDI");<br />
Connection con = ds.getConnection();<br />
con.setAutoCommit(false);<br />
Statement st = con.createStatement();<br />
//插入一个空对象empty_clob()<br />
st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");<br />
//锁定数据行进行更新，注意&#8220;for update&#8221;语句<br />
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");<br />
if (rs.next())<br />
{<br />
//得到java.sql.Clob对象后强制转换为weblogic.jdbc.vendor.oracle.OracleThinClob（不同的App Server对应的可能会不同）<br />
weblogic.jdbc.vendor.oracle.OracleThinClob clob = (weblogic.jdbc.vendor.oracle.OracleThinClob) rs.getClob("CLOBATTR");<br />
Writer outStream = clob.getCharacterOutputStream();<br />
//data是传入的字符串，定义：String data<br />
char[] c = data.toCharArray();<br />
outStream.write(c, 0, c.length);<br />
}<br />
outStream.flush();<br />
outStream.close();<br />
con.commit();<br />
con.close();<br />
2、出库<br />
//获得数据库连接<br />
Connection con = ConnectionFactory.getConnection();<br />
con.setAutoCommit(false);<br />
Statement st = con.createStatement();<br />
//不需要&#8220;for update&#8221;<br />
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");<br />
if (rs.next())<br />
{<br />
java.sql.Clob clob = rs.getClob("CLOBATTR");<br />
Reader inStream = clob.getCharacterStream();<br />
char[] c = new char[(int) clob.length()];<br />
inStream.read(c);<br />
//data是读出并需要返回的数据，类型是String<br />
data = new String(c);<br />
inStream.close();<br />
}<br />
inStream.close();<br />
con.commit();<br />
con.close();<br />
需要注意的地方：<br />
1、java.sql.Blob、oracle.sql.BLOB、weblogic.jdbc.vendor.oracle.OracleThinBlob几种类型的区别<br />
2、java.sql.Clob、oracle.sql.CLOB、weblogic.jdbc.vendor.oracle.OracleThinClob几种类型的区别
<img src ="http://www.blogjava.net/ocean07000814/aggbug/349569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2011-05-05 11:07 <a href="http://www.blogjava.net/ocean07000814/articles/349569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql语句中or用法的优化</title><link>http://www.blogjava.net/ocean07000814/articles/346701.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Mon, 21 Mar 2011 12:11:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/346701.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/346701.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/346701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/346701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/346701.html</trackback:ping><description><![CDATA[在SQL语句中用了OR之后, 其实很不容易控制, 第一次是想让一个带两个OR的用UNION去执行, 结果用了USE_CONCAT后变成了4个UNION了, 居然没有办法让他按我想象的第一个OR进行UNION. 第二次是在索引上, OR条件导致了不能在索引上进行<a href="http://www.anysql.net/dba/index_vs_table_filter.html">条件过滤</a>. 现在遇到了第三次, 是同事发现的, 怕自已记不住, 就没有征得他的同意, 在这儿共享出来了.
<p>&nbsp; &nbsp; 有下面两个表, TYPE_ID列上值的重复性很高.</p>
<blockquote>CREATE TABLE T_SMALL (TYPE_ID, ID, ...);<br />
CREATE TABLE T_MIDDLE (TYPE_ID, ID1, ID2, ...); </blockquote>
<p>&nbsp; &nbsp; 运行下面的SQL时, 总是很慢, 我们已经指定用HASH JOIN, 并也指定了T_SMALL是驱动表, 百思不得其解. </p>
<blockquote>SELECT .....<br />
&nbsp;&nbsp;FROM T_SMALL S, T_MIDDLE M<br />
&nbsp;&nbsp;WHERE S.TYPE_ID = M.TYPE_ID <br />
&nbsp;&nbsp;&nbsp;&nbsp;AND (S.ID = M.ID1 OR S.ID = M.ID2) </blockquote>
<p>&nbsp; &nbsp; 第一百零一思时, 发现了原因所在, 因为OR的问题, Oracle在做HASH JOIN时只依据了TYPE_ID这个效率不高的列, 这时的PLAN中肯定出现了FILTER这样的步骤. 后来将这个语句手工改成UNION方式, 就从2个小时变成了15分钟. </p>
<blockquote>SELECT .....<br />
&nbsp;&nbsp;FROM T_SMALL S, T_MIDDLE M<br />
&nbsp;&nbsp;WHERE S.TYPE_ID = M.TYPE_ID <br />
&nbsp;&nbsp;&nbsp;&nbsp;AND S.ID = M.ID1 <br />
UNION ALL <br />
SELECT .....<br />
&nbsp;&nbsp;FROM T_SMALL S, T_MIDDLE M<br />
&nbsp;&nbsp;WHERE S.TYPE_ID = M.TYPE_ID <br />
&nbsp;&nbsp;&nbsp;&nbsp;AND S.ID = M.ID2 AND M.ID1 &lt;&gt; M.ID2 </blockquote>
<p>&nbsp; &nbsp; SQL语句的调优, 其实很需要功夫, 也是一门很深的学问, 如此简单的SQL, 也有很深刻的知识.</p>
<img src ="http://www.blogjava.net/ocean07000814/aggbug/346701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2011-03-21 20:11 <a href="http://www.blogjava.net/ocean07000814/articles/346701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>物化视图</title><link>http://www.blogjava.net/ocean07000814/articles/342428.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Thu, 06 Jan 2011 07:08:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/342428.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/342428.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/342428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/342428.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/342428.html</trackback:ping><description><![CDATA[创建物化视图<br />
CREATE MATERIALIZED VIEW mv_test_pk<br />
&nbsp;<wbr> --如果可以快速刷新则进行快速刷新，否则完全刷新refresh force on demand&nbsp;<wbr><br />
&nbsp;<wbr>REFRESH FAST on demand<br />
&nbsp;<wbr> start with to_date('24-11-2008 18:00:10', 'dd-mm-yyyy hh24:mi:ss') --第一次刷新时间<br />
&nbsp;<wbr> next TRUNC(SYSDATE+1)+18/24 --刷新时间间隔<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> AS select * from t_test;<br />
<br />
也可以手动刷新物化视图：dbms_mview('mv_emp_pk');<br />
<br />
 <img src ="http://www.blogjava.net/ocean07000814/aggbug/342428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2011-01-06 15:08 <a href="http://www.blogjava.net/ocean07000814/articles/342428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORA-27046: file size is not a multiple of logical block size</title><link>http://www.blogjava.net/ocean07000814/articles/332397.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Sat, 18 Sep 2010 12:16:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/332397.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/332397.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/332397.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/332397.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/332397.html</trackback:ping><description><![CDATA[<p>刚改了oracle10g里面的SPFILE***.ORA文件，数据库就起不来了，抱错ORA-27046: file size is not a multiple of logical block size 。原因是动态服务器参数文件（SPFILE）是一个二进制文件，是不可以手工修改的，如果手工改了，该文件就成为了无效文件。</p>
<p>此时可以通过以下方法解决：</p>
<p>1。将SPFILE中的参数拷贝到init***.ora文件中</p>
<p>2。删除DATABASE目录下的SPFILE***.ORA文件。</p>
<p>3。启动数据库 （现在应该可以成功启动）</p>
<p>４。SQL&gt; create spfile from pfile　生成ＳＰＦＩＥＬ</p>
<p style="line-height: 150%; margin: 0cm 0cm 7.5pt; background: white" class="MsoNormal"><font size="3"><font color="#800000"><span style="line-height: 150%; color: #333333; font-size: 9pt">使用</span><span style="line-height: 150%; color: #333333; font-size: 9pt">startup</span><span style="line-height: 150%; color: #333333; font-size: 9pt">命令<span style="line-height: 150%; color: #333333; font-size: 9pt">启动数据库，</span>，</span><span style="line-height: 150%; color: #333333; font-size: 9pt">Oralce</span><span style="line-height: 150%; color: #333333; font-size: 9pt">将会按照以下顺序在缺省目录中(9i,10i在oracle_home/database目录下）搜索参数文件：（１）spfile***.ora文件 （２）如果没有spfile***.ora文件就用spfile.ora文件（３） 如果没有spfile.ora文件就用init***.ora（４）如果没有init***.ora文件就用 pfile.ora</span></font></font></p>
<p style="line-height: 150%; margin: 0cm 0cm 7.5pt; background: white" class="MsoNormal"><span style="line-height: 150%; color: #333333; font-size: 9pt">所以上面我们采取的解决方法是将破坏的ＳＰＦＩＬＥ中的参数复制到init***.ora中，然后删除ＳＰＦＩＬＥ文件，这样启动时就会用init***.ora文件启动，然后用<font color="#000000">create spfile from pfile　命令生成ＳＰＦＩＥＬ</font></span></p>
<p style="line-height: 150%; margin: 0cm 0cm 7.5pt; background: white" class="MsoNormal"><span style="line-height: 150%; color: #333333; font-size: 9pt"><font color="#000000">以后如果要修改ＳＰＦＩＬＥ中的参数绝对不能在手工修改ＳＰＦＩＬＥ文件了，用下面命令：<span style="color: #333333; font-size: 9pt">alter system set parameter=Value scope=spfile|both|memory　例如：<span style="color: #333333; font-size: 9pt">alter system set db_cache_size=24M scope=both;来修改</span></span></font></span></p>
<img src ="http://www.blogjava.net/ocean07000814/aggbug/332397.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2010-09-18 20:16 <a href="http://www.blogjava.net/ocean07000814/articles/332397.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 重要文件系统解释</title><link>http://www.blogjava.net/ocean07000814/articles/332394.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Sat, 18 Sep 2010 11:33:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/332394.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/332394.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/332394.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/332394.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/332394.html</trackback:ping><description><![CDATA[<div id="blog_text" class="cnt">
<p>Oracle 中要了解的文件实在太多了，一不小心就被弄晕了头，下面归类下：</p>
<p>版本：Oracle Database 10g Enterprise Edition Release 10.2.0.1.0&nbsp;&nbsp; <br />
<br />
一般来讲，Oracle文件分以下几个类型： <br />
<br />
数据文件：　　　　　　真实数据 <br />
重做日志文件：　　　　联机日志、归档日志 <br />
控制文件：　　　　　　包含物理文件到数据字典中的逻辑表空间之间的映射 <br />
初始化参数文件：　　　控制内存 <br />
警告和追踪日志文件： <br />
备份文件： <br />
<br />
C:\oracle\product\10.2.0\db_3\srvm\admin\init.ora　　　--初始化参数文件 <br />
<font color="#ff0000">C:\oracle\product\10.2.0\admin\orcl\bdump\alert_orcl.LOG　　　　　　</font> --警告日志文件(报警文件包括了数据库日常操作的信息，它存放在由BACKGROUND_DUMP_DEST参数所定义的目录下。该文件得有数据库管理员来管理。作为一合格的DBA应该每天都要查看报警文件以获取数据库的诊断或出错信息。 报警文件中主要记录了：A数据库启动和关闭的时间。B所有非默认初始化参数。C LGWR正在写的日志序列号 D 日志切换信息 E 所执行的ALTER语句 F 创建表空间和还原段等)</p>
<p><br />
C:\oracle\product\10.2.0\admin\orcl\udump\orcl_ora_2828.TRC 用户追踪文件<br />
<br />
C:\oracle\product\10.2.0\oradata\orcl\SYSTEM01.DBF　　　　　　　　　--表空间数据文件 <br />
C:\oracle\product\10.2.0\oradata\orcl\SYSAUX01.DBF<br />
C:\oracle\product\10.2.0\oradata\orcl\USERS01.DBF&nbsp;&nbsp; <br />
C:\oracle\product\10.2.0\oradata\orcl\TEMP01.DBF <br />
C:\oracle\product\10.2.0\oradata\orcl\UNDOTBS01.DBF<br />
<br />
<font color="#ff0000">C:\oracle\product\10.2.0\oradata\orcl\CONTROL01.CTL　　　　　　　　 --控制文件 <br />
C:\oracle\product\10.2.0\oradata\orcl\CONTROL02.CTL <br />
C:\oracle\product\10.2.0\oradata\orcl\CONTROL03.CTL <br />
</font><br />
<font color="#ff0000">C:\oracle\product\10.2.0\oradata\orcl\REDO01.LOG　　　　　　　　　　--联机日志文件 <br />
C:\oracle\product\10.2.0\oradata\orcl\REDO02.LOG <br />
C:\oracle\product\10.2.0\oradata\orcl\REDO03.LOG <br />
</font><br />
C:\oracle\ora92\ldap\odi\archive\ORADB2T001S01100.ARC　--归档日志文件 <br />
... <br />
C:\oracle\ora92\ldap\odi\archive\ORADB2T001S01199.ARC <br />
<br />
&nbsp;&nbsp; <br />
<font color="#ff0000">C:\oracle\product\10.2.0\db_3\database\initorcl.ora　　　　　--启动参数文件 <br />
C:\oracle\product\10.2.0\db_3\database\oradim.log　　　　　　 --SVRMGRL管理器出错日志 <br />
</font><br />
<font color="#ff0000">C:\oracle\product\10.2.0\db_3\NETWORK\log\listener.log　　　　--监听器日志文件 <br />
</font>C:\oracle\product\10.2.0\db_3\NETWORK\log\sqlnet.log　　　　　--Sql*Net 日志文件 <br />
<font color="#ff0000">C:\oracle\product\10.2.0\db_3\NETWORK\ADMIN\tnsnames.ora　　　--TNS 连接文件（数据库别名）</font> <br />
C:\oracle\product\10.2.0\db_3\NETWORK\ADMIN\sqlnet.ora　　　　--Sql*Net 环境文件 <br />
<font color="#ff0000">C:\oracle\product\10.2.0\db_3\NETWORK\ADMIN\listener.ora　　　--监听器参数文件 <br />
</font><br />
C:\oracle\product\10.2.0\db_3\sqlplus\admin\glogin.sql　　　　--Sql*Plus登录自动执行脚本 <br />
C:\oracle\product\10.2.0\db_3\sqlplus\bin\sqlplus.ini　　　 --Sql*Plus环境初始化文件 <br />
<br />
<br />
<br />
C:\oracle\product\10.2.0\db_3\RDBMS\ADMIN\standard.sql　　　　--建立数据库基本结构的包 <br />
C:\oracle\product\10.2.0\db_3\RDBMS\ADMIN\catalog.sql　　　　 --建立数据字典视图脚本，以SYS、INTERNAL连接 <br />
C:\oracle\product\10.2.0\db_3\RDBMS\ADMIN\catexp.sql　　　　　--建立EXP/IMP用数据字典视图 <br />
C:\oracle\product\10.2.0\db_3\RDBMS\ADMIN\catexp7.sql　　　　 --使v7版本的EXP文件可以导入到v8中 <br />
C:\oracle\product\10.2.0\db_3\RDBMS\ADMIN\catdbsyn.sql　　　　--建立DBA私有数据字典视图 <br />
C:\oracle\product\10.2.0\db_3\RDBMS\ADMIN\cataudit.sql　　　　--建立审计用数据字典视图 <br />
C:\oracle\product\10.2.0\db_3\RDBMS\ADMIN\catsnap.sql　　　　 --建立快照数据字典视图，以SYS、INTERNAL连接 <br />
C:\oracle\product\10.2.0\db_3\RDBMS\ADMIN\SCOTT.SQL　　　　　 --生成SCOTT用户及其用户数据 <br />
<br />
C:\oracle\ora92\sqlplus\admin\pupbld.sql　　　　　　　　　--新建一个数据库之后需要执行的脚本</p>
</div>
<img src ="http://www.blogjava.net/ocean07000814/aggbug/332394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2010-09-18 19:33 <a href="http://www.blogjava.net/ocean07000814/articles/332394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle EM中的主机身份证明</title><link>http://www.blogjava.net/ocean07000814/articles/331850.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Sun, 12 Sep 2010 14:01:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/331850.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/331850.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/331850.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/331850.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/331850.html</trackback:ping><description><![CDATA[<h2 id="t_4b4a38cb0100b77p" class="titName SG_txta">&nbsp;</h2>
<div id="sina_keyword_ad_area2" class="articalContent">
<p>oracle oem中的主机身份证明在10g的web database control中，进行一些操作需要进行主机身份证明,比如启动、关闭数据库，进行数据备份、数据的导出导入等等一些操作。这样对于数据库的安全增强了一定的保证。如果我们有进行适当的配置，可以第一次会遇到一些错误：比如 RemoteOperationException<wbr>: ERROR: Wrong password for user。所以此时我们需要进行简单的配置：</p>
<p>1、从开始（start）进入设置——控制面板——管理工具 找到本地安全策略</p>
<p>2、打开本地安全策略,找到本地策略（local policies）</p>
<p>3、打开其中的用户权限分配（user rights assignment）</p>
<p>4、在右边的列表中找到&#8220;以批量任务登录&#8221;（log on as a batch job）</p>
<p>5、选中，点击右键，选择属性，将数据库安装的所在操作系统用户，添加其中即可<br />
6、然后应用、确定。</p>
</div>
<img src ="http://www.blogjava.net/ocean07000814/aggbug/331850.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2010-09-12 22:01 <a href="http://www.blogjava.net/ocean07000814/articles/331850.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）网络断掉，不能启动DBConsole服务的解决（发生特定错误）</title><link>http://www.blogjava.net/ocean07000814/articles/331748.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Sat, 11 Sep 2010 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/331748.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/331748.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/331748.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/331748.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/331748.html</trackback:ping><description><![CDATA[<p>网络断掉，不能启动DBConsole服务的解决这个问题有不少刚刚接触的Oracle 10g的XDJM都遇到过，我在笔记本上也遇到过，本来DBConsole是可以用的，但是一旦笔记本是使用无线网卡连网的，所以有时候出去的时候没有接上wifi的话，也会出现同样的状况。 </p>
<p>错误状况： <br />
Window平台 <br />
以前的DBConsole是可以启动的，但是拔掉网络启动OracleDBConsoleXXX服务，服务启动不了。 </p>
<p>错误排查: <br />
先设置window环境变量 ORACLE_SID=数据库SID <br />
打开cmd <br />
输入 emctl start dbconsole <br />
将会有错误信息提示，如果没有设置ORACLE_SID 则提示 <br />
Environment variable ORACLE_SID not defined. Please define it. </p>
<p>如果已经设置了ORACLE_SID 则错误提示为 <br />
oc4j configration issue.D:\oracle\product\10.1.0\db_1\oc4j\j2ee\OC4J_DBConsole_localhost_java not found. <br />
其中D:\oracle\product\10.1.0\db_1为你自己机器中ORacle10g的home目录 </p>
<p>这个信息非常的重要，也是服务起不来的根本原因 <br />
DBConsole是一个java的web application，在建立dbconsole的时候，我们会根据机器以及Oracle的信息创建repos，这个repos就是存放 DBConsole的配置信息的仓库，由于机器断网，会把机器的名字映射为localhost，而建库的时候是默认用的是机器名，所以这时候两个目录不匹配了，DBConsole找不到配置仓库的目录也就出错了。 </p>
<p>解决方案， <br />
解决方案有两种，一种是比较正式的 <br />
通过emca重新建立repos <br />
命令如下 <br />
emca -config dbcontrol db -repos recreate </p>
<p>方法二是自己实验出来的，并不是一个正式的方法，但是比上一种方法简单，易于操作。 <br />
信息提示里找不到一个目录D:\oracle\product\10.1.0\db_1\oc4j\j2ee \OC4J_DBConsole_localhost_java， 到这个信息提示的上一层目录里一看，可以看到有个类似的目录，形如OC4J_DBConsole_janes_java，这里janes是我的机器名，把这个目录copy到当前目录下，改成信息提示里没有找到的目录名，比如我这里就改成D:\oracle\product\10.1.0\db_1\oc4j\j2ee \OC4J_DBConsole_localhost_java </p>
<p>同时来到D:\oracle\product\10.1.0\db_1目录下，可以找到一个名字形如janes_ORCL的目录， <br />
注意janes_ORCL 这里的janes是我的机器名，ORCL是我这里ORacle的SID，你可以根据你的具体情况，来找到类似的目录, 同样在当前copy到当前目录，并改名为localhost_ORCL. </p>
<p>还有第三方法，不过没有试过 <br />
有出现这样问题的帮着试试 set ORACLE_HOSTNAME=localhost </p>
<p>然后通过emctl start dbconsole或者服务里的ORacleDBConsoleXXXX的服务就可以启动了。 </p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/inthirties/archive/2009/08/20/4464583.aspx</p>
<img src ="http://www.blogjava.net/ocean07000814/aggbug/331748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2010-09-11 16:27 <a href="http://www.blogjava.net/ocean07000814/articles/331748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle数据导入导出</title><link>http://www.blogjava.net/ocean07000814/articles/328422.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Tue, 10 Aug 2010 07:50:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/328422.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/328422.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/328422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/328422.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/328422.html</trackback:ping><description><![CDATA[<font size="3">Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服
务器导出到本地的dmp文件，imp命令可以把dmp文件从本地导入到远处的数据库服务器中。利用这个功能可以构建两个相同的数据库，一个用来测试，一个
用来正式使用。 </font>
<p><font size="3">&nbsp;&nbsp;&nbsp; 执行环境：可以在SQLPLUS.EXE或者DOS（命令行）中执行，DOS中可以执行时由于
在oracle 8i 中&nbsp;
安装目录\ora81\BIN被设置为全局路径，该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。oracle用java编
写，SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。<br />
&nbsp;&nbsp;&nbsp;SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类，完成导入导出功能。下面介绍的是导入导出的实例。</font></p>
<p><br />
<font size="3">数据导出：<br />
&nbsp;1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中<br />
&nbsp; exp system/manager@TEST file=d:\daochu.dmp full=y<br />
&nbsp;2 将数据库中system用户与sys用户的表导出<br />
&nbsp; exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)<br />
&nbsp;3 将数据库中的表inner_notify、notify_staff_relat导出<br />
&nbsp; exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat)<br />
&nbsp;4 将数据库中的表table1中的字段filed1以"00"打头的数据导出<br />
&nbsp; exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\"
where filed1 like '00%'\" 上面是常用的导出，对于压缩，既用winzip把dmp文件可以很好的压缩。<br />
&nbsp;也可以在上面命令后面 加上 compress=y 来实现。</font></p>
<p><font size="3">数据的导入：<br />
&nbsp;1 将D:\daochu.dmp 中的数据导入 TEST数据库中。<br />
&nbsp; imp system/manager@TEST&nbsp; file=d:\daochu.dmp<br />
&nbsp; imp aichannel/aichannel@HUST full=y&nbsp; file=file= d:\data\newsmgnt.dmp ignore=y<br />
&nbsp;上面可能有点问题，因为有的表已经存在，然后它就报错，对该表就不进行导入。<br />
&nbsp;在后面加上 ignore=y 就可以了。<br />
&nbsp;2 将d:\daochu.dmp中的表table1 导入<br />
&nbsp; imp system/manager@TEST&nbsp; file=d:\daochu.dmp&nbsp; tables=(table1)<br />
&nbsp;基本上上面的导入导出够用了。不少情况要先是将表彻底删除，然后导入。 注意：<br />
&nbsp;操作者要有足够的权限，权限不够它会提示。<br />
&nbsp;数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。</font></p>
<p><br />
<font size="3">附录一：<br />
&nbsp;给用户增加导入数据权限的操作<br />
&nbsp;第一,启动sql*puls<br />
&nbsp;第二，以system/manager登陆<br />
&nbsp;第三，create user 用户名 IDENTIFIED BY 密码（如果已经创建过用户，这步可以省略）<br />
&nbsp;第四，GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,<br />
&nbsp; DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,<br />
&nbsp; DBA,CONNECT,RESOURCE,CREATE SESSION&nbsp; TO 用户名字<br />
&nbsp;第五, 运行-cmd-进入dmp文件所在的目录,<br />
&nbsp; imp userid=system/manager full=y file=*.dmp<br />
&nbsp; 或者 imp userid=system/manager full=y file=filename.dmp<br />
&nbsp;执行示例:<br />
&nbsp;F:\Work\Oracle_Data\backup&gt;imp userid=test/test full=y file=inner_notify.dmp<br />
&nbsp;屏幕显示<br />
&nbsp;Import: Release 8.1.7.0.0 - Production on 星期四 2月 16 16:50:05 2006<br />
&nbsp;(c) Copyright 2000 Oracle Corporation.&nbsp; All rights reserved.<br />
&nbsp;连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production<br />
&nbsp;With the Partitioning option<br />
&nbsp;JServer Release 8.1.7.0.0 - Production<br />
&nbsp;经由常规路径导出由EXPORT:V08.01.07创建的文件<br />
&nbsp;已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入<br />
&nbsp;导出服务器使用UTF8 NCHAR 字符集 (可能的ncharset转换)<br />
&nbsp;. 正在将AICHANNEL的对象导入到 AICHANNEL<br />
&nbsp;. . 正在导入表&nbsp; "INNER_NOTIFY"&nbsp; 4行被导入<br />
&nbsp;准备启用约束条件...<br />
&nbsp;成功终止导入，但出现警告。</font></p>
<p><font size="3">附录二：<br />
&nbsp;Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.<br />
&nbsp;先建立import9.par,<br />
&nbsp;然后，使用时命令如下：imp parfile=/filepath/import9.par<br />
&nbsp;例 import9.par 内容如下：<br />
&nbsp;FROMUSER=TGPMS<br />
&nbsp;TOUSER=TGPMS2（注：把表的拥有者由FROMUSER改为TOUSER，FROMUSER和TOUSER的用户可以不同）<br />
&nbsp;ROWS=Y<br />
&nbsp;INDEXES=Y<br />
&nbsp;GRANTS=Y<br />
&nbsp;CONSTRAINTS=Y<br />
&nbsp;BUFFER=409600<br />
&nbsp;file==/backup/ctgpc_20030623.dmp<br />
&nbsp;log==/backup/import_20030623.log <br />
</font></p>
<img src ="http://www.blogjava.net/ocean07000814/aggbug/328422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2010-08-10 15:50 <a href="http://www.blogjava.net/ocean07000814/articles/328422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 查看锁，解锁</title><link>http://www.blogjava.net/ocean07000814/articles/316942.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Tue, 30 Mar 2010 07:49:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/316942.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/316942.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/316942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/316942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/316942.html</trackback:ping><description><![CDATA[[ 查看锁 ] <br />
select a.object_name||'|'||b.session_id||'|'||c.serial#||'|'||c.program||'|'||c.username||'|'||c.command||'|'||c.machine||'|'|| <br />
c.lockwait from all_objects a,v$locked_object b,v$session c where a.object_id=b.object_id and c.sid=b.session_id; <br />
<br />
[ 解锁 ] <br />
alter system kill session '<font size="-1">session_id,serial</font>'<br />
<img src ="http://www.blogjava.net/ocean07000814/aggbug/316942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2010-03-30 15:49 <a href="http://www.blogjava.net/ocean07000814/articles/316942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>case when 用法</title><link>http://www.blogjava.net/ocean07000814/articles/311086.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Thu, 28 Jan 2010 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/311086.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/311086.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/311086.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/311086.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/311086.html</trackback:ping><description><![CDATA[select <br />
NVL(sum(case when n.type='OK' then n.nums else 0 end),0) as nums<br />
from XX n<br />
<br />
结果：统计得到type=OK的所有记录的nums。<br />
<br />
<img src ="http://www.blogjava.net/ocean07000814/aggbug/311086.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2010-01-28 16:14 <a href="http://www.blogjava.net/ocean07000814/articles/311086.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql语句的执行顺序</title><link>http://www.blogjava.net/ocean07000814/articles/243288.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Fri, 28 Nov 2008 08:58:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/243288.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/243288.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/243288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/243288.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/243288.html</trackback:ping><description><![CDATA[一、sql语句的执行步骤：<br />
&nbsp;1）语法分析，分析语句的语法是否符合规范，衡量语句中各表达式的意义。 <br />
2） 语义分析，检查语句中涉及的所有数据库对象是否存在，且用户有相应的权限。 <br />
3）视图转换，将涉及视图的查询语句转换为相应的对基表查询语句。 <br />
4）表达式转换， 将复杂的 SQL 表达式转换为较简单的等效连接表达式。<br />
&nbsp;5）选择优化器，不同的优化器一般产生不同的&#8220;执行计划&#8221; <br />
6）选择连接方式， ORACLE 有三种连接方式，对多表连接 ORACLE 可选择适当的连接方式。 <br />
7）选择连接顺序， 对多表连接 ORACLE 选择哪一对表先连接，选择这两表中哪个表做为源数据表。 <br />
8）选择数据的搜索路径，根据以上条件选择合适的数据搜索路径，如是选用全表搜索还是利用索引或是其他的方式。 <br />
9）运行&#8220;执行计划&#8221; <br />
二、oracle 共享原理：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ORACLE将执行过的SQL语句存放在内存的共享池(shared buffer pool)中，可以被所有的数据库用户共享
当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, ORACLE就能很快获得已经被解析的语句以及最好的
执行路径. 这个功能大大地提高了SQL的执行性能并节省了内存的使用 <br />
三、oracle 语句提高查询效率的方法：1： where column in(select * from ... where ...);
2：... where exists (select 'X' from ...where ...);
第二种格式要远比第一种格式的效率高。在Oracle中可以几乎将所有的IN操作符子查询改写为使用EXISTS的子查询
使用EXIST，Oracle系统会首先检查主查询，然后运行子查询直到它找到第一个匹配项，这就节省了时间
Oracle系统在执行IN子查询时，首先执行子查询，并将获得的结果列表存放在在一个加了索引的临时表中 避免使用having字句
避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作.
如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销<br />
<p>SQL Select语句完整的执行顺序：&nbsp;</p>
<p>1、from子句组装来自不同数据源的数据；<br />
&nbsp;2、where子句基于指定的条件对记录行进行筛选； <br />
3、group by子句将数据划分为多个分组； <br />
4、使用聚集函数进行计算；<br />
5、使用having子句筛选分组； <br />
6、计算所有的表达式； <br />
7、使用order by对结果集进行排序。</p>
<p>----------------------------------------------------------------------------------------------<br />
</p>
<p>WHERE子句解析顺序分析：</p>
<p>由于SQL优化起来比较复杂,并且还会受环境限制,在开发过程中,写SQL必须必须要遵循以下几点的原则：
<br />
<br />
1.ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.
<br />
<br />
例如:
<br />
<br />
(低效)
<br />
<br />
SELECT &#8230; FROM EMP E WHERE SAL &gt; 50000 AND JOB = &#8216;MANAGER&#8217; AND 25 &lt; (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO);
<br />
<br />
(高效)
<br />
<br />
SELECT &#8230; FROM EMP E WHERE 25 &lt; (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO) AND SAL &gt; 50000 AND JOB = &#8216;MANAGER&#8217;;
<br />
<br />
2.SELECT子句中避免使用&#8217;*&#8217;
<br />
<br />
当在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 &#8216;*&#8217; 是一个方便的方法.可是,这是一个非常低效的方法.
实际上,ORACLE在解析的过程中, 会将&#8217;*&#8217; 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间. <br />
<br />
3.使用表的别名(Alias)
<br />
<br />
当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.
<br />
<br />
注：Column歧义指的是由于SQL中不同的表具有相同的Column名,当SQL语句中出现这个Column时,SQL解析器无法判断这个Column的归属。</p>
<img src ="http://www.blogjava.net/ocean07000814/aggbug/243288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2008-11-28 16:58 <a href="http://www.blogjava.net/ocean07000814/articles/243288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>详细介绍oracle的RBO/CBO优化器</title><link>http://www.blogjava.net/ocean07000814/articles/90529.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Thu, 28 Dec 2006 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/90529.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/90529.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/90529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/90529.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/90529.html</trackback:ping><description><![CDATA[Oracle的优化器有两种优化方式,即基于规则的优化方式(Rule-Based Optimization，简称为RBO)和基于代价的优化方式(Cost-Based Optimization，简称为CBO)，在Oracle8及以后的版本,Oracle强列推荐用CBO的方式 
<p></p><p>    RBO方式：优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的，当一个where子句中的一列有索引时去走索引。</p><p>    CBO方式：它是看语句的代价(Cost),这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小、有少行、每行的长度等信息。这些统计信息起初在库内是没有的，是做analyze后才出现的，很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些应及时更新这些信息。</p><p>    注意：走索引不一定就是优的，比如一个表只有两行数据，一次IO就可以完成全表的检索,而此时走索引时则需要两次IO,这时全表扫描(full table scan)是最好</p><p>    优化模式包括Rule、Choose、First rows、All rows四种方式：</p><p>    Rule：基于规则的方式。</p><p>    Choolse：默认的情况下Oracle用的便是这种方式。指的是当一个表或或索引有统计信息，则走CBO的方式，如果表或索引没统计信息，表又不是特别的小，而且相应的列有索引时，那么就走索引，走RBO的方式。</p><p>    First Rows：它与Choose方式是类似的，所不同的是当一个表有统计信息时，它将是以最快的方式返回查询的最先的几行，从总体上减少了响应时间。</p><p>    All Rows:也就是我们所说的Cost的方式，当一个表有统计信息时，它将以最快的方式返回表的所有的行，从总体上提高查询的吞吐量。没有统计信息则走RBO的方式。</p><p>    设定选用哪种优化模式：</p><p>    A、Instance级别我们可以通过在initSID.ora文件中设定OPTIMIZER_MODE=RULE/CHOOSE/FIRST_ROWS/ALL_ROWS如果没设定OPTIMIZER_MODE参数则默认用的是Choose方式。<br />    B、Sessions级别通过ALTER SESSION SET OPTIMIZER_MODE=RULE/CHOOSE/FIRST_ROWS/ALL_ROWS来设定。<br />    C、语句级别用Hint（/*+ ... */）来设定</p><p>    为什么表的某个字段明明有索引，但执行计划却不走索引？</p><p>    1、优化模式是all_rows的方式 <br />    2、表作过analyze，有统计信息<br />    3、表很小，上文提到过的，Oracle的优化器认为不值得走索引。<br /><br /></p><img src ="http://www.blogjava.net/ocean07000814/aggbug/90529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2006-12-28 16:56 <a href="http://www.blogjava.net/ocean07000814/articles/90529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE常用傻瓜问题1000问</title><link>http://www.blogjava.net/ocean07000814/articles/71016.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Thu, 21 Sep 2006 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/71016.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/71016.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/71016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/71016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/71016.html</trackback:ping><description><![CDATA[
		<p>
				<span class="unnamed3">                                             <font color="#ff0000" size="4"><strong>ORACLE常用傻瓜问题1000问</strong></font></span>
		</p>
		<p>1. Oracle安装完成后的初始口令? <br />　internal/oracle <br />　　sys/change_on_install <br />　　system/manager <br />　　scott/tiger <br />　　sysman/oem_temp </p>
		<p>2. ORACLE9IAS WEB CACHE的初始默认用户和密码？ <br />administrator/administrator </p>
		<p>3. oracle 8.0.5怎么创建数据库? <br />用orainst。如果有motif界面，可以用orainst /m </p>
		<p>4. oracle 8.1.7怎么创建数据库? <br />dbassist </p>
		<p>5. oracle 9i 怎么创建数据库? <br />dbca </p>
		<p>6. oracle中的裸设备指的是什么? <br />裸设备就是绕过文件系统直接访问的储存空间 </p>
		<p>7. oracle如何区分 64-bit/32bit 版本？ <br />$ sqlplus '/ AS SYSDBA' <br />SQL*Plus： Release 9.0.1.0.0 - Production on Mon Jul 14 17：01：09 2003 <br />(c) Copyright 2001 Oracle Corporation. All rights reserved。 <br />Connected to： <br />Oracle9i Enterprise Edition Release 9.0.1.0.0 - Production <br />With the Partitioning option <br />JServer Release 9.0.1.0.0 - Production <br />SQL&gt; select * from v$version； <br />BANNER <br />---------------------------------------------------------------- <br />Oracle9i Enterprise Edition Release 9.0.1.0.0 - Production <br />PL/SQL Release 9.0.1.0.0 - Production <br />CORE 9.0.1.0.0 Production <br />TNS for Solaris： Version 9.0.1.0.0 - Production <br />NLSRTL Version 9.0.1.0.0 - Production <br />SQL&gt; </p>
		<p>8. SVRMGR什么意思？ <br />svrmgrl，Server Manager 9i下没有，已经改为用SQLPLUS了 <br />sqlplus /nolog 变为归档日志型的 </p>
		<p>9. 请问如何分辨某个用户是从哪台机器登陆ORACLE的? <br />SELECT machine ，terminal FROM V$SESSION； </p>
		<p>10. 用什么语句查询字段呢？ <br />desc table_name 可以查询表的结构 <br />select field_name，... from ... 可以查询字段的值 <br />select * from all_tables where table_name like '%' <br />select * from all_tab_columns where table_name='??' </p>
		<p>11. 怎样得到触发器、过程、函数的创建脚本？ <br />desc user_source <br />user_triggers </p>
		<p>12. 怎样计算一个表占用的空间的大小？ <br />select owner，table_name，NUM_ROWS，BLOCKS*AAA/1024/1024 "Size M"，EMPTY_BLOCKS，LAST_ANALYZED <br />from dba_tables <br />where table_name='XXX'； <br />Here： AAA is the value of db_block_size； <br />XXX is the table name you want to check <br />13. 如何查看最大会话数？ <br />SELECT * FROM V$PARAMETER WHERE NAME LIKE 'proc%'； <br />SQL&gt; <br />SQL&gt; show parameter processes <br />NAME TYPE VALUE <br />------------------------------------ ------- ------------------------------ <br />aq_tm_processes integer 1 <br />db_writer_processes integer 1 <br />job_queue_processes integer 4 <br />log_archive_max_processes integer 1 <br />processes integer 200 <br />这里为200个用户。 <br />Select * from v$license； <br />其中sessions_highwater纪录曾经到达的最大会话数 <br />14. 如何查看系统被锁的事务时间？ <br />select * from v$locked_object ； <br />15. 如何以archivelog的方式运行oracle？ <br />init.ora <br />log_archive_start = true <br />RESTART DATABASE <br />16. 怎么获取有哪些用户在使用数据库？ <br />select username from v$session； <br />17. 数据表中的字段最大数是多少? <br />表或视图中的最大列数为 1000 <br />18. 怎样查得数据库的SID ? <br />select name from v$database；也可以直接查看 init.ora文件 <br />19. 如何在Oracle服务器上通过SQLPLUS查看本机IP地址 ? <br />select sys_context('userenv'，'ip_address') from dual； <br />如果是登陆本机数据库，只能返回127.0.0.1 <br />20. UNIX 下怎么调整数据库的时间？ <br />su -root <br />date -u 08010000 <br />21. 在ORACLE TABLE中如何抓取MEMO类型栏为空的资料记录? <br />select remark from oms_flowrec where trim(' ' from remark) is not null ； <br />22. 如何用BBB表的资料去更新AAA表的数据(有关联的字段) <br />UPDATE AAA SET BNS_SNM=(SELECT BNS_SNM FROM BBB WHERE AAA.DPT_NO=BBB.DPT_NO) WHERE BBB.DPT_NO IS </p>
		<p>NOT NULL； <br />23. P4计算机安装方法 <br />将SYMCJIT.DLL改为SYSMCJIT.OLD <br />24. 如何查询SERVER是不是OPS? <br />SELECT * FROM V$OPTION； <br />如果PARALLEL SERVER=TRUE则有OPS能 <br />25. 如何查询每个用户的权限? <br />SELECT * FROM DBA_SYS_PRIVS； <br />26. 如何将表移动表空间? <br />ALTER TABLE TABLE_NAME MOVE TABLESPACE_NAME； <br />27. 如何将索引移动表空间? <br />ALTER INDEX INDEX_NAME REBUILD TABLESPACE TABLESPACE_NAME； <br />28. 在LINUX，UNIX下如何启动DBA STUDIO? <br />OEMAPP DBASTUDIO <br />29. 查询锁的状况的对象有? <br />V$LOCK， V$LOCKED_OBJECT， V$SESSION， V$SQLAREA， V$PROCESS ； <br />查询锁的表的方法： <br />SELECT S.SID SESSION_ID，S.USERNAME，DECODE(LMODE，0，'None'，1，'Null'，2，'Row-S (SS)'，3，</p>
		<p>'Row-X (SX)'，4，'Share'，5，'S/Row-X (SSX)'，6，'Exclusive'，TO_CHAR(LMODE)) MODE_HELD，</p>
		<p>DECODE(REQUEST，0，'None'，1，'Null'，2，'Row-S (SS)'，3，'Row-X (SX)'，4，'Share'，5，'S/Row-X </p>
		<p>(SSX)'，6，'Exclusive'，TO_CHAR(REQUEST)) MODE_REQUESTED，O.OWNER||'.'||O.OBJECT_NAME||' </p>
		<p>('||O.OBJECT_TYPE||')'，S.TYPE LOCK_TYPE，L.ID1 LOCK_ID1，L.ID2 LOCK_ID2 FROM V$LOCK L，</p>
		<p>SYS.DBA_OBJECTS O，V$SESSION S WHERE L.SID = S.SID AND L.ID1 = O.OBJECT_ID ； <br />30. 如何解锁? <br />ALTER SYSTEM KILL SESSION ‘SID，SERIR#’； <br />31. SQLPLUS下如何修改编辑器? <br />DEFINE _EDITOR="&lt;编辑器的完整路经&gt;" -- 必须加上双引号来定义新的编辑器，也可以把这个写在</p>
		<p>$ORACLE_HOME/sqlplus/admin/glogin.sql里面使它永久有效。 <br />32. ORACLE产生随机数的函数? <br />DBMS_RANDOM.RANDOM <br />33. LINUX下查询磁盘竞争状况命令? <br />sar -d <br />33. LINUX下查询CPU竞争状况命令? <br />sar -r <br />34. 查询当前用户对象? <br />SELECT * FROM USER_OBJECTS； <br />SELECT * FROM DBA_SEGMENTS； <br />35. 如何获取错误信息? <br />SELECT * FROM USER_ERRORS； <br />36. 如何获取链接状况? <br />SELECT * FROM DBA_DB_LINKS； <br />37. 查看数据库字符状况? <br />SELECT * FROM NLS_DATABASE_PARAMETERS； <br />SELECT * FROM V$NLS_PARAMETERS； <br />38. 查询表空间信息? <br />SELECT * FROM DBA_DATA_FILES； <br />39. ORACLE的INTERAL用户要口令? <br />修改 SQLNET.ORA <br />SQLNET.AUTHENTICATION_SERVICES=(NTS) <br />40. 出现JAVA.EXE的解决办法? <br />一般是将ORACLEORAHOMEXIHTTPSERVER改成手工启动可以的，X是8或9 <br />41. 如何给表、列加注释？ <br />SQL&gt;comment on table 表 is '表注释'； <br />注释已创建。 <br />SQL&gt;comment on column 表.列 is '列注释'； <br />注释已创建。 <br />SQL&gt; select * from user_tab_comments where comments is not null； <br />42. 如何查看各个表空间占用磁盘情况？ <br />SQL&gt; col tablespace format a20 <br />SQL&gt; select <br />b.file_id 文件ID号， <br />b.tablespace_name 表空间名， <br />b.bytes 字节数， <br />(b.bytes-sum(nvl(a.bytes，0))) 已使用， <br />sum(nvl(a.bytes，0)) 剩余空间， <br />sum(nvl(a.bytes，0))/(b.bytes)*100 剩余百分比 <br />from dba_free_space a，dba_data_files b <br />where a.file_id=b.file_id <br />group by b.tablespace_name，b.file_id，b.bytes <br />order by b.file_id <br />43. 如把ORACLE设置为MTS或专用模式？ <br />#dispatchers="(PROTOCOL=TCP) (SERVICE=SIDXD" <br />加上就是MTS，注释就是专用模式，SID是指你的实例名。 <br />44. 如何才能得知系统当前的SCN号 ? <br />select max(ktuxescnw * power(2，32) + ktuxescnb) from x$ktuxe； <br />45. 请问如何在ORACLE中取毫秒? <br />9i之前不支持，9i开始有timestamp。 <br />9i可以用select systimestamp from dual； <br />46. 如何在字符串里加回车？ <br />select 'Welcome to visit'||chr(10)||'www.CSDN.NET' from dual ； <br />47. 中文是如何排序的？ <br />Oracle9i之前，中文是按照二进制编码进行排序的。 <br />在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值： <br />SCHINESE_RADICAL_M 按照部首（第一顺序）、笔划（第二顺序）排序 <br />SCHINESE_STROKE_M 按照笔划（第一顺序）、部首（第二顺序）排序 <br />SCHINESE_PINYIN_M 按照拼音排序 <br />48. Oracle8i中对象名可以用中文吗？ <br />可以 <br />49. 如何改变WIN中SQL*Plus启动选项？ <br />SQL*PLUS自身的选项设置我们可以在$ORACLE_HOME/sqlplus/admin/glogin.sql中设置。 <br />50. 怎样修改oracel数据库的默认日期? <br />alter session set nls_date_format='yyyymmddhh24miss'； <br />或可以在init.ora中加上一行 nls_date_format='yyyymmddhh24miss' <br />51. 如何将小表放入keep池中? <br />alter table xxx storage(buffer_pool keep)； <br />52. 如何检查是否安装了某个patch? <br />check that oraInventory <br />53. 如何使select语句使查询结果自动生成序号? <br />select rownum，COL from table； <br />54. 如何知道数据裤中某个表所在的tablespace? <br />select tablespace_name from user_tables where table_name='TEST'； <br />select * from user_tables中有个字段TABLESPACE_NAME，（oracle）； <br />select * from dba_segments where …； <br />55. 怎么可以快速做一个和原表一样的备份表? <br />create table new_table as (select * from old_table)； <br />55. 怎么在sqlplus下修改procedure? <br />select line，trim(text) t from user_source where name =’A’ order by line； <br />56. 怎样解除PROCEDURE被意外锁定? <br />alter system kill session ，把那个session给杀掉，不过你要先查出她的session id <br />或把该过程重新改个名字就可以了。 <br />57. SQL Reference是个什么东西？ <br />是一本sql的使用手册，包括语法、函数等等，Oracle官方网站的文档中心提供下载。 <br />58. 如何查看数据库的状态? <br />UNIX下 <br />ps -ef | grep ora <br />Windows下 <br />看服务是否起来；是否可以连上数据库 <br />59. 请问如何修改一张表的主键? <br />alter table aaa <br />drop constraint aaa_key ； <br />alter table aaa <br />add constraint aaa_key primary key(a1，b1) ； <br />60. 改变数据文件的大小? <br />用 ALTER DATABASE .... DATAFILE .... ； <br />手工改变数据文件的大小，对于原来的 数据文件有没有损害。 <br />61. 怎样查看ORACLE中有哪些程序在运行之中？ <br />查看v$sessions表 <br />62. 怎么可以看到数据库有多少个tablespace? <br />select * from dba_tablespaces； <br />63. 如何修改oracle数据库的用户连接数？ <br />修改initSID.ora，将process加大，重启数据库。 <br />64. 如何查出一条记录的最后更新时间? <br />可以用logminer 察看 <br />65. 如何在PL/SQL中读写文件？ <br />UTL_FILE包允许用户通过PL/SQL读写操作系统文件。 <br />66. 怎样把“&amp;”放入一条记录中？ <br />insert into a values (translate ('at{&amp;}t'，'at{}'，'at'))； <br />67. EXP　如何加QUERY参数？ <br />EXP USER/PASS FILE=A.DMP TABLES(BSEMPMS) <br />QUERY='"WHERE EMP_NO=\'S09394\'\"﹔ <br />68. 关于oracle8i支持简体和繁体的字符集问题？ <br />ZHS16GBK可以支持 <br />69. Data Guard是什么软件？ <br />就是Standby的换代产品 <br />70. 如何创建SPFILE? <br />SQL&gt; connect / as sysdba <br />SQL&gt; select * from v$version； <br />SQL&gt; create pfile from spfile； <br />SQL&gt; CREATE SPFILE FROM PFILE='E：\ora9i\admin\eygle\pfile\init.ora'； <br />文件已创建。 <br />SQL&gt; CREATE SPFILE='E：\ora9i\database\SPFILEEYGLE.ORA' FROM PFILE='E：</p>
		<p>\ora9i\admin\eygle\pfile\init.ora'； <br />文件已创建。 <br />71. 内核参数的应用? <br />shmmax <br />　　含义：这个设置并不决定究竟Oracle数据库或者操作系统使用多少物理内存，只决定了最多可以使用的内</p>
		<p>存数目。这个设置也不影响操作系统的内核资源。 <br />　　设置方法：0.5*物理内存 <br />　　例子：Set shmsys：shminfo_shmmax=10485760 <br />　　shmmin <br />　　含义：共享内存的最小大小。 <br />　　设置方法：一般都设置成为1。 <br />　　例子：Set shmsys：shminfo_shmmin=1： <br />　　shmmni <br />　　含义：系统中共享内存段的最大个数。 <br />　　例子：Set shmsys：shminfo_shmmni=100 <br />　　shmseg <br />　　含义：每个用户进程可以使用的最多的共享内存段的数目。 <br />　　例子：Set shmsys：shminfo_shmseg=20： <br />　　semmni <br />　　含义：系统中semaphore identifierer的最大个数。 <br />　　设置方法：把这个变量的值设置为这个系统上的所有Oracle的实例的init.ora中的最大的那个processes的</p>
		<p>那个值加10。 <br />　　例子：Set semsys：seminfo_semmni=100 <br />　　semmns <br />　　含义：系统中emaphores的最大个数。 <br />　　设置方法：这个值可以通过以下方式计算得到：各个Oracle实例的initSID.ora里边的processes的值的总</p>
		<p>和（除去最大的Processes参数）＋最大的那个Processes×2＋10×Oracle实例的个数。 <br />　　例子：Set semsys：seminfo_semmns=200 <br />　　semmsl <br />　　含义：一个set中semaphore的最大个数。 <br />　　设置方法：设置成为10＋所有Oracle实例的InitSID.ora中最大的Processes的值。 <br />　　例子：Set semsys：seminfo_semmsl=-200 <br />72. 怎样查看哪些用户拥有SYSDBA、SYSOPER权限？ <br />SQL&gt;conn sys/change_on_install <br />SQL&gt;select * from V_$PWFILE_USERS； <br />73. 如何单独备份一个或多个表？ <br />exp 用户/密码 tables=(表1，…，表2) <br />74. 如何单独备份一个或多个用户？ <br />exp system/manager owner=(用户1，用户2，…，用户n) file=导出文件 <br />75. 如何对CLOB字段进行全文检索？ <br />SELECT * FROM A WHERE dbms_lob.instr(a.a，'K'，1，1)&gt;0； <br />76. 如何显示当前连接用户? <br />SHOW USER <br />77. 如何查看数据文件放置的路径? <br />col file_name format a50 <br />SQL&gt; select tablespace_name，file_id，bytes/1024/1024，file_name from dba_data_files order by </p>
		<p>file_id； <br />78. 如何查看现有回滚段及其状态? <br />SQL&gt; col segment format a30 <br />SQL&gt; SELECT SEGMENT_NAME，OWNER，TABLESPACE_NAME，SEGMENT_ID，FILE_ID，STATUS FROM </p>
		<p>DBA_ROLLBACK_SEGS <br />79. 如何改变一个字段初始定义的Check范围？ <br />SQL&gt; alter table xxx drop constraint constraint_name； <br />之后再创建新约束： <br />SQL&gt; alter table xxx add constraint constraint_name check()； <br />80. Oracle常用系统文件有哪些？ <br />通过以下视图显示这些文件信息：v$database，v$datafile，v$logfile v$controlfile v$parameter； <br />81. 内连接INNER JOIN? <br />select a.* from bsempms a，bsdptms b where a.dpt_no=b.dpt_no； <br />82. 如何外连接? <br />select a.* from bsempms a，bsdptms b where a.dpt_no=b.dpt_no(+)； <br />select a.* from bsempms a，bsdptms b wherea.dpt_no(+)=b.dpt_no； <br />83. 如何执行脚本SQL文件? <br />SQL&gt;@$PATH/filename.sql； <br />84. 如何快速清空一个大表? <br />SQL&gt;truncate table table_name； <br />85. 如何查有多少个数据库实例? <br />SQL&gt;SELECT * FROM V$INSTANCE； <br />86. 如何查询数据库有多少表? <br />SQL&gt;select * from all_tables； <br />87. 如何测试SQL语句执行所用的时间? <br />SQL&gt;set timing on； <br />SQL&gt;select * from tablename； <br />88. CHR()的反函数? <br />ASCII() <br />SELECT CHAR(65) FROM DUAL； <br />SELECT ASCII('A') FROM DUAL； <br />89. 字符串的连接 <br />SELECT CONCAT(COL1，COL2) FROM TABLE； <br />SELECT COL1||COL2 FROM TABLE； <br />90. 怎么把select出来的结果导到一个文本文件中？ <br />SQL&gt;SPOOL C：\ABCD.TXT； <br />SQL&gt;select * from table； <br />SQL &gt;spool off； <br />91. 怎样估算SQL执行的I/O数 ? <br />SQL&gt;SET AUTOTRACE ON ； <br />SQL&gt;SELECT * FROM TABLE； <br />或 <br />SQL&gt;SELECT * FROM v$filestat；可以查看IO数 <br />92. 如何在sqlplus下改变字段大小? <br />alter table table_name modify (field_name varchar2(100))； <br />改大行，改小不行（除非都是空的） <br />93. 如何查询某天的数据? <br />select * from table_name where trunc(日期字段)＝to_date('2003-05-02'，'yyyy-mm-dd')； <br />94. sql 语句如何插入全年日期？ <br />create table BSYEAR (d date)； <br />insert into BSYEAR <br />select to_date('20030101'，'yyyymmdd')+rownum-1 <br />from all_objects <br />where rownum &lt;= to_char(to_date('20031231'，'yyyymmdd')，'ddd')； <br />95. 如果修改表名? <br />alter table old_table_name rename to new_table_name； <br />96. 如何取得命令的返回状态值？ <br />sqlcode=0 <br />97. 如何知道用户拥有的权限? <br />SELECT * FROM dba_sys_privs ； <br />98. 从网上下载的ORACLE9I与市场上卖的标准版有什么区别？ <br%></br%></p>
<img src ="http://www.blogjava.net/ocean07000814/aggbug/71016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2006-09-21 10:33 <a href="http://www.blogjava.net/ocean07000814/articles/71016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE----触发器，存储过程及JOB </title><link>http://www.blogjava.net/ocean07000814/articles/70827.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Wed, 20 Sep 2006 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/70827.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/70827.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/70827.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/70827.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/70827.html</trackback:ping><description><![CDATA[
		<h2>
				<a id="viewpost1_TitleUrl" href="http://www.cnblogs.com/debugdou/articles/14643.html">ORACLE----触发器，存储过程及JOB</a>
		</h2>
		<div class="postbody">
				<p>一、ORACLE中创建自增的ID字段<br />1、创建序列<br /> create *sequence_name*  increment by 1 start with 1 maxvalue 999999999;<br />2、创建触发器---(创建一个基于该表的before insert 触发器，在触发器中使用该SEQUENCE)<br />create or replace trigger *triger_name*<br />before insert on       *table_name*<br />referencing old as old new as new for each row<br />begin<br />select  *sequence_name.nextval into :new.id from dual;<br />end;<br />例:<br />      create sequence FP_FP_SEQ<br />      minvalue 1<br />      maxvalue 999999999999999999999999999<br />      start with 49231<br />      increment by 1<br />      cache 10;<br /><br />      create or replace trigger FP_FP_tig before insert on FP_FP for each row<br />      begin<br />       select FP_FP_seq.nextval into :new.id from dual;<br />      end;<br />/<br />二、ORACLE中JOB的应用<br />1、创建存储过程<br />create or replace procedure    *pro_name<br />as<br />begin<br /> insert into agri_exhibition_basecur (messid,title,type,pub_date)   select id,title,sort,pub_date from agri_message  where    (trunc(sysdate-pub_date)=0 and rownum&lt;6) and sort='供' ;<br /> insert into agri_exhibition_basecur (messid,title,type,pub_date)   select id,title,sort,pub_date from agri_message  where    (trunc(sysdate-pub_date)=0 and rownum&lt;6) and sort='求' ;<br />end;<br />/<br />2、创建JOB<br />variable jobdxm number;<br />begin <br />dbms_job.submit(:jobdxm,'exhi_pro_dxm;',sysdate,'trunc(sysdate,''dd'')+32.5/24');<br />end;<br />三、收集的一个简单的JOB实列<br />1、创建测试表<br />SQL&gt; create table a(a date);</p>
				<p>表已创建。</p>
				<p>2、创建一个自定义过程<br />SQL&gt; create or replace procedure test as<br />  2  begin<br />  3  insert into a values(sysdate);<br />  4  end;<br />  5  /</p>
				<p>过程已创建。</p>
				<p>3、创建JOB<br />SQL&gt; variable job1 number;<br />SQL&gt; <br />SQL&gt; begin<br />  2  dbms_job.submit(:job1,'test;',sysdate,'sysdate+1/1440');　　--每天1440分钟，即一分钟运行test过程一次<br />  3  end;<br />  4  /</p>
				<p>PL/SQL 过程已成功完成。</p>
				<p>4、运行JOB<br />SQL&gt; begin<br />  2  dbms_job.run(:job1);<br />  3  end;<br />  4  /</p>
				<p>PL/SQL 过程已成功完成。</p>
				<p>SQL&gt; select to_char(a,'yyyy/mm/dd hh24:mi:ss') 时间 from a;</p>
				<p>时间<br />-------------------<br />2001/01/07 23:51:21<br />2001/01/07 23:52:22<br />2001/01/07 23:53:24</p>
				<p>5、删除JOB<br />SQL&gt; begin<br />  2  dbms_job.remove(:job1);<br />  3  end;<br />  4  /</p>
				<p>PL/SQL 过程已成功完成。<br />6、一些必要的参数<br />修改initsid.ora参数<br />job_queue_processes = 4<br />job_queue_interval = 10<br />job_queue_keep_connections=true</p>
				<p>修改可执行作业个数为20个<br />ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 20</p>
				<p>修改取消限制模式<br />ALTER SYSTEM DISABLE RESTRICTED SESSION;<br /><br />7、两个必要的表<br />      user_jobs及dba_jobs_running<br /><br />8、相关的几个JOB操作<br />删除job:dbms_job.remove(jobno);<br />修改要执行的操作:job:dbms_job.what(jobno,what);<br />修改下次执行时间：dbms_job.next_date(job,next_date);<br />修改间隔时间：dbms_job.interval(job,interval);<br />停止job:dbms.broken(job,broken,nextdate);<br />启动job:dbms_job.run(jobno);<br /><br /></p>
		</div>
<img src ="http://www.blogjava.net/ocean07000814/aggbug/70827.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2006-09-20 16:14 <a href="http://www.blogjava.net/ocean07000814/articles/70827.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQLServer和Oracle的常用函数对比（转）</title><link>http://www.blogjava.net/ocean07000814/articles/70723.html</link><dc:creator>非洲小白脸</dc:creator><author>非洲小白脸</author><pubDate>Wed, 20 Sep 2006 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/ocean07000814/articles/70723.html</guid><wfw:comment>http://www.blogjava.net/ocean07000814/comments/70723.html</wfw:comment><comments>http://www.blogjava.net/ocean07000814/articles/70723.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ocean07000814/comments/commentRss/70723.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ocean07000814/services/trackbacks/70723.html</trackback:ping><description><![CDATA[
		<h4 class="TextColor1" id="subjcns!AD0C13D338EEA74C!146" style="MARGIN-BOTTOM: 0px">SQLServer和Oracle的常用函数对比</h4>
		<div id="msgcns!AD0C13D338EEA74C!146">
				<div>---------数学函数 
<p>　　1.绝对值 <br />　　S:select abs(-1) value<br />　　O:select abs(-1) value from dual</p><p>　　2.取整(大) <br />　　S:select ceiling(-1.001) value <br />　　O:select ceil(-1.001) value from dual</p><p>　　3.取整（小） <br />　　S:select floor(-1.001) value <br />　　O:select floor(-1.001) value from dual</p><p>　　4.取整（截取）<br />　　S:select cast(-1.002 as int) value <br />　　O:select trunc(-1.002) value from dual </p><p>　　5.四舍五入<br />　　S:select round(1.23456,4) value 1.23460<br />　　O:select round(1.23456,4) value from dual 1.2346</p><p>　　6.e为底的幂 <br />　　S:select Exp(1) value 2.7182818284590451 <br />　　O:select Exp(1) value from dual 2.71828182</p><p>　　7.取e为底的对数<br />　　S:select log(2.7182818284590451) value 1<br />　　O:select ln(2.7182818284590451) value from dual; 1</p><p>　　8.取10为底对数<br />　　S:select log10(10) value 1<br />　　O:select log(10,10) value from dual; 1</p><p>　　9.取平方<br />　　S:select SQUARE(4) value 16<br />　　O:select power(4,2) value from dual 16</p><p>　　10.取平方根<br />　　S:select SQRT(4) value 2<br />　　O:select SQRT(4) value from dual 2</p><p>　　11.求任意数为底的幂<br />　　S:select power(3,4) value 81<br />　　O:select power(3,4) value from dual 81</p><p>　　12.取随机数<br />　　S:select rand() value <br />　　O:select sys.dbms_random.value(0,1) value from dual;</p><p>　　13.取符号<br />　　S:select sign(-8) value -1<br />　　O:select sign(-8) value from dual -1<br />　　----------数学函数</p><p>　　14.圆周率<br />　　S:SELECT PI() value 3.1415926535897931<br />　　O:不知道</p><p>　　15.sin,cos,tan 参数都以弧度为单位<br />　　例如：select sin(PI()/2) value 得到1（SQLServer）</p><p>　　16.Asin,Acos,Atan,Atan2 返回弧度</p><p>　　17.弧度角度互换(SQLServer，Oracle不知道)<br />　　DEGREES：弧度-〉角度<br />　　RADIANS：角度-〉弧度</p><p>　　---------数值间比较</p><p>　　18. 求集合最大值<br />　　S:select max(value) value from <br />　　(select 1 value<br />　　union<br />　　select -2 value<br />　　union<br />　　select 4 value<br />　　union<br />　　select 3 value)a</p><p>　　O:select greatest(1,-2,4,3) value from dual</p><p>　　19. 求集合最小值<br />　　S:select min(value) value from <br />　　(select 1 value<br />　　union<br />　　select -2 value<br />　　union<br />　　select 4 value<br />　　union<br />　　select 3 value)a</p><p>　　O:select least(1,-2,4,3) value from dual</p><p>　　20.如何处理null值(F2中的null以10代替)<br />　　S:select F1,IsNull(F2,10) value from Tbl<br />　　O:select F1,nvl(F2,10) value from Tbl</p><p>　　--------数值间比较</p><p>　　21.求字符序号<br />　　S:select ascii('a') value<br />　　O:select ascii('a') value from dual</p><p>　　22.从序号求字符<br />　　S:select char(97) value<br />　　O:select chr(97) value from dual</p><p>　　23.连接<br />　　S:select '11'+'22'+'33' value<br />　　O:select CONCAT('11','22')||33 value from dual</p><p>　　23.子串位置 --返回3<br />　　S:select CHARINDEX('s','sdsq',2) value <br />　　O:select INSTR('sdsq','s',2) value from dual</p><p>　　23.模糊子串的位置 --返回2,参数去掉中间%则返回7<br />　　S:select patindex('%d%q%','sdsfasdqe') value <br />　　O:oracle没发现，但是instr可以通过第四霾问刂瞥鱿执问?BR&gt;　　select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6</p><p>　　24.求子串<br />　　S:select substring('abcd',2,2) value <br />　　O:select substr('abcd',2,2) value from dual</p><p>　　25.子串代替 返回aijklmnef<br />　　S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value<br />　　O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual</p><p>　　26.子串全部替换<br />　　S:没发现<br />　　O:select Translate('fasdbfasegas','fa','我' ) value from dual</p><p>　　27.长度<br />　　S:len,datalength<br />　　O:length</p><p>　　28.大小写转换 lower,upper</p><p>　　29.单词首字母大写<br />　　S:没发现<br />　　O:select INITCAP('abcd dsaf df') value from dual</p><p>　　30.左补空格（LPAD的第一个参数为空格则同space函数）<br />　　S:select space(10)+'abcd' value<br />　　O:select LPAD('abcd',14) value from dual</p><p>　　31.右补空格（RPAD的第一个参数为空格则同space函数）<br />　　S:select 'abcd'+space(10) value<br />　　O:select RPAD('abcd',14) value from dual</p><p>　　32.删除空格<br />　　S:ltrim,rtrim<br />　　O:ltrim,rtrim,trim</p><p>　　33. 重复字符串<br />　　S:select REPLICATE('abcd',2) value <br />　　O:没发现</p><p>　　34.发音相似性比较(这两个单词返回值一样，发音相同)<br />　　S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')<br />　　O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual<br />　　SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差<br />　　返回0-4，4为同音，1最高</p><p>　　--------------日期函数</p><p>　　35.系统时间<br />　　S:select getdate() value<br />　　O:select sysdate value from dual</p><p>　　36.前后几日<br />　　直接与整数相加减</p><p>　　37.求日期<br />　　S:select convert(char(10),getdate(),20) value<br />　　O:select trunc(sysdate) value from dual<br />　　select to_char(sysdate,'yyyy-mm-dd') value from dual</p><p>　　38.求时间<br />　　S:select convert(char(8),getdate(),108) value<br />　　O:select to_char(sysdate,'hh24:mm:ss') value from dual</p><p>　　39.取日期时间的其他部分<br />　　S:DATEPART 和 DATENAME 函数 （第一个参数决定） <br />　　O:to_char函数 第二个参数决定</p><p>　　参数---------------------------------下表需要补充<br />　　year yy, yyyy <br />　　quarter qq, q (季度)<br />　　month mm, m (m O无效)<br />　　dayofyear dy, y (O表星期)<br />　　day dd, d (d O无效)<br />　　week wk, ww (wk O无效)<br />　　weekday dw (O不清楚)<br />　　Hour hh,hh12,hh24 (hh12,hh24 S无效)<br />　　minute mi, n (n O无效)<br />　　second ss, s (s O无效)<br />　　millisecond ms (O无效)<br />　　----------------------------------------------</p><p>　　40.当月最后一天<br />　　S:不知道<br />　　O:select LAST_DAY(sysdate) value from dual</p><p>　　41.本星期的某一天（比如星期日）<br />　　S:不知道<br />　　O:SELECT Next_day(sysdate,7) vaule FROM DUAL;</p><p>　　42.字符串转时间<br />　　S:可以直接转或者select cast('2004-09-08'as datetime) value<br />　　O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;</p><p>　　43.求两日期某一部分的差（比如秒）<br />　　S:select datediff(ss,getdate(),getdate()+12.3) value<br />　　O:直接用两个日期相减（比如d1-d2=12.3）<br />　　SELECT (d1-d2)*24*60*60 vaule FROM DUAL;</p><p>　　44.根据差值求新的日期（比如分钟）<br />　　S:select dateadd(mi,8,getdate()) value<br />　　O:SELECT sysdate+8/60/24 vaule FROM DUAL;</p><p>　　45.求不同时区时间<br />　　S:不知道<br />　　O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;</p><p>　　-----时区参数,北京在东8区应该是Ydt-------<br />　　AST ADT 大西洋标准时间<br />　　BST BDT 白令海标准时间<br />　　CST CDT 中部标准时间<br />　　EST EDT 东部标准时间<br />　　GMT 格林尼治标准时间<br />　　HST HDT 阿拉斯加—夏威夷标准时间<br />　　MST MDT 山区标准时间<br />　　NST 纽芬兰标准时间<br />　　PST PDT 太平洋标准时间<br />　　YST YDT YUKON标准时间<br /></p></div>
		</div>
<img src ="http://www.blogjava.net/ocean07000814/aggbug/70723.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ocean07000814/" target="_blank">非洲小白脸</a> 2006-09-20 10:49 <a href="http://www.blogjava.net/ocean07000814/articles/70723.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>