﻿<?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-semovy-文章分类-Oracle数据库方面</title><link>http://www.blogjava.net/WshmAndLily/category/25143.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 21 Apr 2008 09:43:13 GMT</lastBuildDate><pubDate>Mon, 21 Apr 2008 09:43:13 GMT</pubDate><ttl>60</ttl><item><title>递归遍历无限级类别</title><link>http://www.blogjava.net/WshmAndLily/articles/194532.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Mon, 21 Apr 2008 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/194532.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/194532.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/194532.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/194532.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/194532.html</trackback:ping><description><![CDATA[<p><br />
/*drop table categories;<br />
create table categories<br />
(<br />
&nbsp; id int primary key ,<br />
&nbsp; pid int ,<br />
&nbsp; name varchar(64),<br />
&nbsp; constraint cc_fk foreign key(pid)&nbsp; references categories(id)&nbsp; on&nbsp; delete cascade<br />
);</p>
<p><br />
create or replace procedure ins_cat(v_id int,v_pid int,v_name varchar2) as<br />
begin<br />
&nbsp;insert into categories values(v_id,v_pid,v_name);<br />
end ins_cat; </p>
<p>*/</p>
<p>--delete from categories;<br />
/*<br />
begin<br />
ins_cat(1,null,'category1');<br />
ins_cat(2,null,'category2');<br />
ins_cat(3,1,'category3');<br />
ins_cat(4,1,'category4');<br />
ins_cat(5,2,'category5');<br />
ins_cat(6,2,'category6');<br />
ins_cat(7,4,'category7');<br />
ins_cat(8,4,'category8');<br />
ins_cat(9,5,'category9');<br />
end;<br />
*/<br />
select * from categories;</p>
<p>--start with .. connect by 递归遍历无限级类别<br />
select * from categories start with id=2<br />
&nbsp;connect by prior id=pid;</p>
<p>&nbsp;</p>
<p><br />
&nbsp;</p>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/194532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-04-21 16:12 <a href="http://www.blogjava.net/WshmAndLily/articles/194532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试向oracle 读,写文件Blob 读,写大文本Clob</title><link>http://www.blogjava.net/WshmAndLily/articles/187103.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Tue, 18 Mar 2008 14:09:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/187103.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/187103.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/187103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/187103.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/187103.html</trackback:ping><description><![CDATA[<p>package com.semovy.test;</p>
<p>import java.io.BufferedInputStream;<br />
import java.io.BufferedReader;<br />
import java.io.BufferedWriter;<br />
import java.io.FileInputStream;<br />
import java.io.FileOutputStream;<br />
import java.io.IOException;<br />
import java.io.InputStream;<br />
import java.io.InputStreamReader;<br />
import java.io.OutputStream;<br />
import java.io.PrintWriter;<br />
import java.io.Reader;<br />
import java.sql.Blob;<br />
import java.sql.Clob;<br />
import java.sql.Connection;<br />
import java.sql.DriverManager;<br />
import java.sql.ResultSet;<br />
import java.sql.ResultSetMetaData;<br />
import java.sql.SQLException;<br />
import java.sql.Statement;</p>
<p>/**<br />
&nbsp;* <br />
&nbsp;* @author semovy 测试向oracle 读,写文件Blob 读,写大文本Clob<br />
&nbsp;*/<br />
public class OracleBlobTest {</p>
<p>&nbsp;private String driver = "oracle.jdbc.driver.OracleDriver";</p>
<p>&nbsp;private String url = "jdbc:oracle:thin:@localhost:1521:teckotooling";</p>
<p>&nbsp;private String user = "scott";</p>
<p>&nbsp;private String pwd = "tiger";</p>
<p>&nbsp;public OracleBlobTest() {<br />
&nbsp;}</p>
<p>&nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp;OracleBlobTest obt = new OracleBlobTest();<br />
&nbsp;&nbsp;obt.writeBlob();<br />
&nbsp;&nbsp;obt.readBlob();<br />
&nbsp;&nbsp;obt.writeClob();<br />
&nbsp;&nbsp;obt.readClob();<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 读二进制文件<br />
&nbsp; * <br />
&nbsp; */<br />
&nbsp;private void readBlob() {<br />
&nbsp;&nbsp;Connection conn = null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;conn = getConnection();<br />
&nbsp;&nbsp;&nbsp;Statement stmt = conn.createStatement();<br />
&nbsp;&nbsp;&nbsp;ResultSet rs = stmt.executeQuery("select * from test where id=1");<br />
&nbsp;&nbsp;&nbsp;byte[] buffer = new byte[1024];<br />
&nbsp;&nbsp;&nbsp;OutputStream out = new FileOutputStream("d:/360安全卫士定1.exe");<br />
&nbsp;&nbsp;&nbsp;int tempLen = 0;<br />
&nbsp;&nbsp;&nbsp;int amount = 0;<br />
&nbsp;&nbsp;&nbsp;if (rs.next()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;Blob blob = rs.getBlob("BINARYCONTENT");<br />
&nbsp;&nbsp;&nbsp;&nbsp;InputStream in = blob.getBinaryStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;while ((tempLen = in.read(buffer)) != -1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.write(buffer, 0, tempLen);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;amount += tempLen;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("已经读出并写:" + amount + " 字节");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("已经读出并写:完成");<br />
&nbsp;&nbsp;&nbsp;&nbsp;out.flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;out.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;in.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;rs.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;stmt.close();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} catch (ClassNotFoundException e) {<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;} catch (SQLException e) {<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;} catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;} finally {<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (conn != null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close();<br />
&nbsp;&nbsp;&nbsp;} catch (SQLException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 写二进制文件<br />
&nbsp; * <br />
&nbsp; */<br />
&nbsp;private void writeBlob() {<br />
&nbsp;&nbsp;Connection conn = null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;conn = getConnection();<br />
&nbsp;&nbsp;&nbsp;conn.setAutoCommit(false);<br />
&nbsp;&nbsp;&nbsp;String sql = null;<br />
&nbsp;&nbsp;&nbsp;Statement stmt = conn.createStatement();<br />
&nbsp;&nbsp;&nbsp;sql = "delete from test where id=1";<br />
&nbsp;&nbsp;&nbsp;stmt.executeUpdate(sql);<br />
&nbsp;&nbsp;&nbsp;sql = "insert into test(1,BINARYCONTENT,CLOBCONTENT) values(1,empty_blob(),empty_clob())";<br />
&nbsp;&nbsp;&nbsp;stmt.executeUpdate(sql);<br />
&nbsp;&nbsp;&nbsp;ResultSet rs = stmt.executeQuery("select * from test where id=1");<br />
&nbsp;&nbsp;&nbsp;if (rs.next()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;Blob blob = rs.getBlob("BINARYCONTENT");<br />
&nbsp;&nbsp;&nbsp;&nbsp;OutputStream out = ((oracle.sql.BLOB) blob).setBinaryStream(0);// 从0开始,否则写出的文件有差错<br />
&nbsp;&nbsp;&nbsp;&nbsp;int bufferSize = ((oracle.sql.BLOB) blob).getBufferSize();<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("bufferSize :" + bufferSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;BufferedInputStream in = new BufferedInputStream(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new FileInputStream("d:/360安全卫士定.exe"), bufferSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;byte[] b = new byte[bufferSize];<br />
&nbsp;&nbsp;&nbsp;&nbsp;int count = in.read(b, 0, bufferSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;int amount = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (count != -1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.write(b, 0, count);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;amount += count;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("处理了 " + amount + " 字节");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count = in.read(b, 0, bufferSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("处理了 " + amount + " 字节,成功");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;out.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;out = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;in.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;conn.commit();<br />
&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;} catch (ClassNotFoundException e) {<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;} catch (SQLException e) {<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;conn.rollback();<br />
&nbsp;&nbsp;&nbsp;} catch (SQLException e1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e1.getLocalizedMessage());<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;} catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;} finally {<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (conn != null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close();<br />
&nbsp;&nbsp;&nbsp;} catch (SQLException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 读大文本<br />
&nbsp; * <br />
&nbsp; */<br />
&nbsp;private void readClob() {<br />
&nbsp;&nbsp;Connection conn = null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;conn = getConnection();<br />
&nbsp;&nbsp;&nbsp;Statement stmt = conn.createStatement();<br />
&nbsp;&nbsp;&nbsp;ResultSet rs = stmt.executeQuery("select * from test where id=2");<br />
&nbsp;&nbsp;&nbsp;String tempStr = null;<br />
&nbsp;&nbsp;&nbsp;if (rs.next()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;Clob clob = rs.getClob("CLOBCONTENT");<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (clob != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reader in = clob.getCharacterStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader br = new BufferedReader(in);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("开始读....");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while ((tempStr = br.readLine()) != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(tempStr);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("读完成....");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;rs.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;stmt.close();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} catch (ClassNotFoundException e) {<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;} catch (SQLException e) {<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;} catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;} finally {<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (conn != null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close();<br />
&nbsp;&nbsp;&nbsp;} catch (SQLException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 写大文本<br />
&nbsp; * <br />
&nbsp; */<br />
&nbsp;private void writeClob() {<br />
&nbsp;&nbsp;Connection conn = null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;conn = getConnection();<br />
&nbsp;&nbsp;&nbsp;conn.setAutoCommit(false);<br />
&nbsp;&nbsp;&nbsp;String sql = null;<br />
&nbsp;&nbsp;&nbsp;Statement stmt = conn.createStatement();<br />
&nbsp;&nbsp;&nbsp;sql = "delete from test where id=2";<br />
&nbsp;&nbsp;&nbsp;stmt.executeUpdate(sql);<br />
&nbsp;&nbsp;&nbsp;sql = "insert into test values(2,empty_blob(),empty_clob())";<br />
&nbsp;&nbsp;&nbsp;stmt.executeUpdate(sql);<br />
&nbsp;&nbsp;&nbsp;ResultSet rs = stmt.executeQuery("select * from test where id=2");<br />
&nbsp;&nbsp;&nbsp;if (rs.next()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;Clob clob = rs.getClob("CLOBCONTENT");<br />
&nbsp;&nbsp;&nbsp;&nbsp;PrintWriter out = new PrintWriter(new BufferedWriter(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((oracle.sql.CLOB) clob).setCharacterStream(0)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader in = new BufferedReader(new InputStreamReader(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new FileInputStream(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"d:/在北大校园BBS引起轰动的一篇文章请热爱祖国的人转发！！！！.mht")));<br />
&nbsp;&nbsp;&nbsp;&nbsp;String str = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("开始写...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;while ((str = in.readLine()) != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(str);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(str);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;in.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;out.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;rs.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;conn.commit();<br />
&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;} catch (ClassNotFoundException e) {<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;} catch (SQLException e) {<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;conn.rollback();<br />
&nbsp;&nbsp;&nbsp;} catch (SQLException e1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e1.getLocalizedMessage());<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;} catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;} finally {<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (conn != null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close();<br />
&nbsp;&nbsp;&nbsp;} catch (SQLException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e.getLocalizedMessage());<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;private Connection getConnection() throws ClassNotFoundException,<br />
&nbsp;&nbsp;&nbsp;SQLException {<br />
&nbsp;&nbsp;Class.forName(driver);<br />
&nbsp;&nbsp;return DriverManager.getConnection(url, user, pwd);<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * <br />
&nbsp; * @param rs<br />
&nbsp; * @throws SQLException<br />
&nbsp; */<br />
&nbsp;private void displayResultSet(ResultSet rs) throws SQLException {<br />
&nbsp;&nbsp;ResultSetMetaData rsmd = rs.getMetaData();<br />
&nbsp;&nbsp;int colnum = rsmd.getColumnCount();<br />
&nbsp;&nbsp;while (rs.next()) {<br />
&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; colnum; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (i == colnum - 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(rsmd.getColumnLabel(i + 1) + ": "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ rs.getObject(i + 1));<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(rsmd.getColumnLabel(i + 1) + ": "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ rs.getObject(i + 1) + " , ");<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;System.out.println();<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
}<br />
</p>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/187103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-03-18 22:09 <a href="http://www.blogjava.net/WshmAndLily/articles/187103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle alter语句</title><link>http://www.blogjava.net/WshmAndLily/articles/187083.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Tue, 18 Mar 2008 12:30:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/187083.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/187083.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/187083.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/187083.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/187083.html</trackback:ping><description><![CDATA[<div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;test(a&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">20</span><span style="color: #000000">),b&nbsp;</span><span style="font-weight: bold; color: #000000">number</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000">))<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />重名命<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">alter</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;test&nbsp;rename&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;test1<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />（rename&nbsp;test1&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;test2）<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />
<p>增删字段</p>
<p><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></p>
<p><span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000"><span style="color: #0000ff">alter</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;test2&nbsp;</span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">column</span><span style="color: #000000">&nbsp;&nbsp;f</span></span> </p>
<p><span style="color: #000000">修改字段类型和大小<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">alter</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;test2&nbsp;modify&nbsp;d&nbsp;</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">40</span><span style="color: #000000">)<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">alter</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;test2&nbsp;modify&nbsp;f&nbsp;</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">40</span><span style="color: #000000">)<br />
</span></p>
<p>&nbsp;</p>
</span><span style="color: #0000ff">alter</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;test2&nbsp;</span><span style="color: #0000ff">add</span><span style="color: #000000">&nbsp;&nbsp;c&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">30</span><span style="color: #000000">)<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">alter</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;test2&nbsp;</span><span style="color: #0000ff">add</span><span style="color: #000000">&nbsp;&nbsp;(d&nbsp;</span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">30</span><span style="color: #000000">),e&nbsp;</span><span style="font-weight: bold; color: #000000">number</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">4</span><span style="color: #000000">))</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">alter</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;test2&nbsp;rename&nbsp;</span><span style="color: #0000ff">column</span><span style="color: #000000">&nbsp;e&nbsp;&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;f</span></div>
<div>
<p>处理约束</p>
</div>
<div><span style="color: #000000">&nbsp;&nbsp; <font color="#0000ff">alter &nbsp; table</font>&nbsp;&nbsp;&nbsp;test2&nbsp;&nbsp;&nbsp;&nbsp; <font color="#3366ff">add &nbsp; constraint</font>&nbsp;&nbsp; pk_mypri &nbsp; primary &nbsp; key &nbsp; (d</span><span style="color: #000000">,f</span><span style="color: #000000">)</span></div>
<div></div>
<div><span style="color: #000000">&nbsp;&nbsp;&nbsp; 利用下面的语句在删除DEPT表中的PRIMARY KEY约束时，同时将删除其它表中引用这个约束的FOREIGN KEY约束:&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;alter table dept drop primary key cascade </span></div>
<div></div>
<div><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">加foreign key约束(多字段／表级） <br />
&nbsp;&nbsp;&nbsp; alter table employees&nbsp;&nbsp; add constraint emp_jobs_fk foreign key (job,deptno) references jobs (jobid,deptno) on delete cascade&nbsp;<br />
</span></div>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/187083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-03-18 20:30 <a href="http://www.blogjava.net/WshmAndLily/articles/187083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 10g表空间操作</title><link>http://www.blogjava.net/WshmAndLily/articles/181795.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Sun, 24 Feb 2008 09:28:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/181795.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/181795.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/181795.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/181795.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/181795.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">---------------------------------------------- -</font></span><span>表空间的操作</span><span><font face="Times New Roman">----------------------------------------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">1.</font></span><span>创建表空间：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">create tablespace tablespace_name datafile 'filepath' size filesize autoextend on next autosize maxsize filemaxsize [unlimited]</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">eg:</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">create tablespace sales datafile 'c:\1.txt' size 10m autoextend on next 1m maxsize 100m</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">2.</font></span><span>为表空间增加数据文件：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter tablespace tablespace_name add datafile 'filepath' size filesize autoextend on next autosize maxsize filemaxsize[unlimited]</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">eg:</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter tablespace sales datafile 'c:\2.txt' size 10m autoextend on next 1m maxsize unlimited</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">3.</font></span><span>调整表空间：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter database datafile 'filepath' resize filesize--</font></span><span>重置表空间的大小</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">eg:</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter database datafile 'c:\2.txt' resize 10m</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">4.</font></span><span>关闭表空间的自动扩展属性：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter database datafile 'filepath' autoextend off</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">eg:</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter database datafile 'c:\2.txt' autoextend off</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">5.</font></span><span>打开表空间的自动扩展属性：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter database datafile 'filepath' autoextend on</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">eg:</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter database datafile 'c:\2.txt' autoextend on</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">6.</font></span><span>使表空间脱机：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter tablespace tablespace_name offline</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">7.</font></span><span>使表空间联机：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter tablespace tablespace_name online</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">8.</font></span><span>设置表空间为只读：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter tablespace tablespace_name read only</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">9.</font></span><span>设置表空间为读写：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter tablespace tablespace_name read write</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">11.</font></span><span>删除表空间：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">drop tablespace tablespace_name</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">12.</font></span><span>删除表空间的同时，删除数据文件</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">drop tablespace tablespace_name including contents and datefiles</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">13.</font></span><span>查看每个表空间占用空间的大小：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">select tablespace_name,sum(bytes)/1024/1024 from dba_segments group by tablespace_name</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">10.</font></span><span>移动表空间数据文件步骤：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">a.</font></span><span>使表空间脱机：</span><span><font face="Times New Roman">alter tablespace tablespace_name offline</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">b.</font></span><span>物理移动数据文件到目的地（可以是表空间的部分数据文件或者是修改数据文件的名称）</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">c.</font></span><span>逻辑移动：</span><span><font face="Times New Roman">alter tablespace tablespace_name rename datafile '</font></span><span>源文件地址</span><span><font face="Times New Roman">'to '</font></span><span>目的文件地址</span><span><font face="Times New Roman">'--</font></span><span>注意可以将多个源文件转移到同一个目的文件地址（多个源文件地址用逗号分隔）</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">d.</font></span><span>将表空间联机：</span><span><font face="Times New Roman">alter tablespace tablespace_name online</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">11.</font></span><span>查询表空间的信息：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">select tablespace_name,bytes/1024/1024<span>&nbsp;&nbsp;</span>file_size_mb,file_name from DBA_DATE_FILES--</font></span><span>注意书籍库中的实体都是以大写表示</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">12.</font></span><span>当数据文件被删除的时候，如果对该数据文件操作的时候，</span><span><font face="Times New Roman">oracle</font></span><span>会报不能找到该数据文件的错误。如何处理。</span></p>
<p style="margin: 0cm 0cm 0pt"><span>（</span><span><font face="Times New Roman">1</font></span><span>）</span><span><font face="Times New Roman">shutdown—</font></span><span>关闭</span><span><font face="Times New Roman">oracle</font></span><span>实例</span></p>
<p style="margin: 0cm 0cm 0pt"><span>（</span><span><font face="Times New Roman">2</font></span><span>）</span><span><font face="Times New Roman">startup<span>&nbsp;&nbsp;</span>--</font></span><span>开启</span><span><font face="Times New Roman">oracle</font></span><span>实例并打开数据库</span></p>
<p style="margin: 0cm 0cm 0pt"><span>（</span><span><font face="Times New Roman">3</font></span><span>）</span><span><font face="Times New Roman">alter database datafile &#8216;datafile_name&#8217; offline drop;</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>（</span><span><font face="Times New Roman">4</font></span><span>）</span><span><font face="Times New Roman">alter database open</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">------------------------------------------------------------------------------------------------------------------</font></span></p>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/181795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-02-24 17:28 <a href="http://www.blogjava.net/WshmAndLily/articles/181795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle10g正规表达式</title><link>http://www.blogjava.net/WshmAndLily/articles/181793.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Sun, 24 Feb 2008 09:24:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/181793.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/181793.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/181793.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/181793.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/181793.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">-------------------------------------------</font></span><span>正规表达式：</span><span><font face="Times New Roman">-----------------------------------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>正规表达式是符号和元素的集合，这些集合可以使用户匹配特定的文本模式。正规表达式采用元符号的组合来定义各种匹配和搜索标准。在正规表达式中，匹配是大小写敏感的。</span></p>
<p style="margin: 0cm 0cm 0pt"><span>元符号</span><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span>描述</span><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span>示例</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">*<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span>匹配</span><span><font face="Times New Roman">0</font></span><span>个或多个任意的字符</span><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>bd* </font></span><span>匹配</span><span><font face="Times New Roman">bdq</font></span><span>，</span><span><font face="Times New Roman">bdabc</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>？</span><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span>匹配一个任意的字符</span><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>B?d</font></span><span>匹配</span><span><font face="Times New Roman"> BDd,Bld</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">^<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span>表示字符串的开始</span><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>^abc</font></span><span>与</span><span><font face="Times New Roman">abced</font></span><span>，</span><span><font face="Times New Roman">abcfr</font></span><span>可</span><span><font face="Times New Roman">acdv</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">$<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span>表示字符串的末尾</span><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>bas$ </font></span><span>以</span><span><font face="Times New Roman">bas</font></span><span>为结尾的所有字符串</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">x|y<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span>匹配</span><span><font face="Times New Roman">x</font></span><span>或</span><span><font face="Times New Roman">y<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>windo|door</font></span><span>表示</span><span><font face="Times New Roman">windo</font></span><span>或者</span><span><font face="Times New Roman">dr</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">[]<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span>匹配</span><span><font face="Times New Roman">[]</font></span><span>中的任意一个字符</span><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>ba[a-b]</font></span><span>匹配</span><span><font face="Times New Roman">baa </font></span><span>或</span><span><font face="Times New Roman">bab</font></span></p>
<p style="margin: 0cm 0cm 0pt"><font color="#000000"><span style="color: blue"><font face="Times New Roman">{m}<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span style="color: blue">可以匹配</span><span style="color: blue"><font face="Times New Roman">m</font></span><span style="color: blue">次</span><span style="color: blue"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>m[0-9]{3}</font></span><span style="color: blue">匹配</span><span style="color: blue"><font face="Times New Roman">m7</font></span><span style="color: blue">，</span><span style="color: blue"><font face="Times New Roman">m12</font></span><span style="color: blue">，</span><span style="color: blue"><font face="Times New Roman">m123<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span></font></p>
<p style="margin: 0cm 0cm 0pt"><font color="#000000"><span style="color: blue"><font face="Times New Roman">{m,n}<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span style="color: blue">至少</span><span style="color: blue"><font face="Times New Roman">m</font></span><span style="color: blue">次最多</span></font><span style="color: blue"><font face="Times New Roman">n</font></span><span style="color: blue">次</span><span style="color: blue"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">\n<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span>表示前一个表达式可以重复</span><span><font face="Times New Roman">N </font></span><span>次</span><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>[aeiou]\2 </font></span><span>匹配</span><span><font face="Times New Roman">aatldf </font></span><span>但</span><span><font face="Times New Roman">abldf</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">[</font></span><span>：：</span><span><font face="Times New Roman">]<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;</span></font></span><span>指定一个字符类，匹配该类中的任意一个字符</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman"></font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>使用正规表达式：</span></p>
<p style="margin: 0cm 0cm 0pt"><span>函数</span><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span>描述</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Regexp_like()<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span>类似于</span><span><font face="Times New Roman">like</font></span><span>运算符，可以使用正规表达式执行模式匹配操作</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Regexp_instr()<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>instr</font></span><span>运算的扩张，可以用来搜索匹配正规表达式模式的输入字符串</span></p>
<p style="margin: 0cm 0cm 0pt 89.25pt; text-indent: -89.25pt; mso-char-indent-count: -8.5"><span><font face="Times New Roman">Regexp_replace()<span>&nbsp;&nbsp;&nbsp;</span>replace</font></span><span>的扩展，用户搜索符合正规表达式模式的输入字符串，并用指定的字符代替这些字符串</span></p>
<p style="margin: 0cm 0cm 0pt 94.5pt; text-indent: -94.5pt; mso-char-indent-count: -9.0"><span><font face="Times New Roman">Regexp_substr()<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>substr</font></span><span>函数的扩展，用户搜索符合正规表达式模式的输入字符串，输出是这些搜索到的字符串</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman"></font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman"></font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>说明：</span></p>
<p style="margin: 0cm 0cm 0pt"><span>一：</span><span><font face="Times New Roman">Regexp_like(search_string,pattern [,match_option]);</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(1):search_string</font></span><span>是搜索值</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(2):parrern </font></span><span>是使用得正规表达式且其长度限制在</span><span><font face="Times New Roman">512</font></span><span>字节内</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(3)match_option:</font></span><span>是一个文本串，可以使用户设置该函数的匹配行为</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Match_option</font></span><span>参数表：</span></p>
<p style="margin: 0cm 0cm 0pt"><span>值</span><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span>描述</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">C<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span>匹配时，大小写敏感，是默认设置</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">I<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span>匹配时，大小写不敏感</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">N<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span>允许使用圆点（。）匹配任何新增的字符</span><span><font face="Times New Roman"> </font></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: blue"><font face="Times New Roman"><font color="#333300">M</font><span><font color="#333300">&nbsp;&nbsp;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Eg</font></span><span>：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Select author_id,last_name from author where regexp_liek(last_name,&#8217;e$&#8217;);--</font></span><span>搜索以</span><span><font face="Times New Roman">e</font></span><span>结尾的作者姓名</span></p>
<p style="margin: 0cm 0cm 0pt"><span>二：</span><span><font face="Times New Roman">regexp_instr(search_string,pattern,[,position [,occurrence [,return_option [,match_option ]]]]);</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(1) :search_string</font></span><span>是搜索值</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(2):parrern </font></span><span>是使用得正规表达式且其长度限制在</span><span><font face="Times New Roman">512</font></span><span>字节内</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(3)position </font></span><span>是一个表示搜索开始位置的正整数，默认为一。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(4)occurrence</font></span><span>定义了搜索模式的发生次数，默认为一，</span></p>
<p style="margin: 0cm 0cm 0pt 10.5pt; text-indent: -10.5pt; mso-char-indent-count: -1.0"><span><font face="Times New Roman">(5)return_optionshi </font></span><span>是一个数字，表示该函数应该返回的值。该数字可以是</span><span><font face="Times New Roman">0</font></span><span>（表示开始匹配的位置）也可以是非</span><span><font face="Times New Roman">0</font></span><span>（表示匹配的结束位置）</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(6)match_option </font></span><span>是设置该函数匹配行为的参数</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Eg</font></span><span>：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Select regexp_instr(&#8216;orcale database 10g&#8217;,&#8217;a&#8217;,1,2) from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman"></font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>三：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">regexp_replace((search_string,pattern,[,position[,occurrence[,return_option [,match_option ]]]]);</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(1) :search_string</font></span><span>是搜索值</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(2):parrern </font></span><span>是使用得正规表达式且其长度限制在</span><span><font face="Times New Roman">512</font></span><span>字节内</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(3)position </font></span><span>是一个表示搜索开始位置的正整数，默认为一。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(4)occurrence</font></span><span>定义了搜索模式的发生次数，默认为一，</span></p>
<p style="margin: 0cm 0cm 0pt 10.5pt; text-indent: -10.5pt; mso-char-indent-count: -1.0"><span><font face="Times New Roman">(5)return_optionshi </font></span><span>是一个数字，表示该函数应该返回的值。该数字可以是</span><span><font face="Times New Roman">0</font></span><span>（表示开始匹配的位置）也可以是非</span><span><font face="Times New Roman">0</font></span><span>（表示匹配的结束位置）</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(6)match_option </font></span><span>是设置该函数匹配行为的参数</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">)</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman"></font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Select last_name,regexp_replace(last_name,&#8217;e&#8217;,&#8217;E&#8217;) from duthors where author_id&lt;3</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman"></font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>四：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Regexp_substr(seach_string,pattern [,position ,[,occurrence [,match_option]]])</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(1) :search_string</font></span><span>是搜索值</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(2):parrern </font></span><span>是使用得正规表达式且其长度限制在</span><span><font face="Times New Roman">512</font></span><span>字节内</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(3)position </font></span><span>是一个表示搜索开始位置的正整数，默认为一。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(4)occurrence</font></span><span>定义了搜索模式的发生次数，默认为一，</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(5)match_option </font></span><span>是设置该函数匹配行为的参数</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Eg:</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Select last_name,regexp_substr(last_name,&#8217;[rst][a-z]{4}&#8217;) from authors where length(regexp_sustr(last_name,[rst][a_z]{4}));</font></span></p>
 <img src ="http://www.blogjava.net/WshmAndLily/aggbug/181793.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-02-24 17:24 <a href="http://www.blogjava.net/WshmAndLily/articles/181793.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle10g中的事务</title><link>http://www.blogjava.net/WshmAndLily/articles/181792.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Sun, 24 Feb 2008 09:20:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/181792.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/181792.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/181792.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/181792.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/181792.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">----------------------------------------------</font></span><span>事务特性</span><span><font face="Times New Roman">------------------------------------------------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">1</font></span><span>．原子性</span><span><font face="Times New Roman">(atomicity)<span>&nbsp;&nbsp;</span>--</font></span><span>事务处理要么全部进行，要么不进行。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">2</font></span><span>．一致性</span><span><font face="Times New Roman">(consistency) </font></span><span>&#8211;事务处理要将数据库从一种状态转变为另</span><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span>一种状态。</span></p>
<p style="margin: 0cm 0cm 0pt 15.75pt; text-indent: -15.75pt; mso-char-indent-count: -1.5"><span><font face="Times New Roman">3</font></span><span>．隔离性</span><span><font face="Times New Roman">(isolation) </font></span><span>&#8211;在事务处理提交之前，事务处理的效果不能由系统中的其他事务看到。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">4</font></span><span>．持久性</span><span><font face="Times New Roman">(durability) </font></span><span>&#8211;一旦提交了事务，他就永远生效。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">5</font></span><span>．</span><span><font face="Times New Roman">set autocommit on--</font></span><span>设置数据库系统环境为自动提交事务：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">SQL&gt; set autocommit on;</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">SQL&gt; insert into t values(1,'2','2');</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>已创建</span><span><font face="Times New Roman"> 1 </font></span><span>行。</span></p>
<p style="margin: 0cm 0cm 0pt"><span>提交完成。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">SQL&gt; set autocommit off;</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">SQL&gt; insert into t values(1,'2','2');</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>已创建</span><span><font face="Times New Roman"> 1 </font></span><span>行。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">SQL&gt; commit;</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>提交完成。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">6</font></span><span>．锁：（防止进程之间因为抢占资源，产生死锁而设定一种预防死锁产生的机制）</span></p>
<p style="margin: 0cm 0cm 0pt"><span>允许或者拒绝资源访问的一种机制</span><span><font face="Times New Roman"> </font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>为了防止用户在同一时间内并发的访问和修改数据库资源，</span><span><font face="Times New Roman">orcale</font></span><span>中使用不同类型的锁控制对数据的并发访问，以防止用户之间出现破坏性的操作。</span></p>
<p style="margin: 0cm 0cm 0pt"><span>锁定的类型：</span></p>
<p style="margin: 0cm 0cm 0pt"><span>（</span><span><font face="Times New Roman">1</font></span><span>）行级锁：行被排他锁定</span></p>
<p style="margin: 0cm 0cm 0pt"><span>（</span><span><font face="Times New Roman">2</font></span><span>）表级锁：共享锁，共享更新锁，排他锁</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">---------------------------------------------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>行级锁：</span></p>
<p style="margin: 0cm 0cm 0pt"><span>行被排他锁定，在某行的锁被释放之前，其他用户不能修改此行，使用</span><span><font face="Times New Roman"> commit </font></span><span>或</span><span><font face="Times New Roman"> rollback </font></span><span>命令释放锁</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Oracle </font></span><span>通过使用</span><span><font face="Times New Roman"> INSERT</font></span><span>、</span><span><font face="Times New Roman">UPDATE </font></span><span>和</span><span><font face="Times New Roman"> SELECT</font></span><span>&#8230;</span><span><font face="Times New Roman">FOR UPDATE </font></span><span>语句自动获取行级锁</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">SELECT</font></span><span>&#8230;</span><span><font face="Times New Roman">FOR UPDATE </font></span><span>子句</span></p>
<p style="margin: 0cm 0cm 0pt"><span>在表的一行或多行上放置排他锁，用于防止其他用户更新该行，可以执行除更新之外的其他操作，只有该用户提交事务，其他用户才能够更新</span><span><font face="Times New Roman">gname</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">select * from goods where gid=1001</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">for update of gname;</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">server1</font></span><span>：</span><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>server2</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">create table goods (gid int );<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">insert into goods values(1)<span>&nbsp;&nbsp;</span></font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">insert into goods values(2)<span>&nbsp;&nbsp;</span></font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>别的进程访问该表时</span><span><font face="Times New Roman">,</font></span><span>可以执行除更新之外的其他操作</span><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">select * from goods where gid=1 for update of gid<span>&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span>访问</span><span><font face="Times New Roman">server1</font></span><span>时，可以对</span><span><font face="Times New Roman">goods</font></span><span>表进行添加，删除，查询，但不能修改</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">FOR UPDATE WAIT </font></span><span>子句是</span><span><font face="Times New Roman">Oracle9i </font></span><span>中的新增功能：</span></p>
<p style="margin: 0cm 0cm 0pt"><span>为了防止无限期地等待锁定的行，等待间隔必须指定为数值文字，等待间隔不能是表达式、赋值变量或</span><span><font face="Times New Roman"> PL/SQL</font></span><span>。</span><span><br />
</span><span>变量</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">select * from goods where gid=1001 for update of gname wait<span>&nbsp;&nbsp;</span>3</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>等待用户释放更新锁的时间为</span><span><font face="Times New Roman">3</font></span><span>秒，否则超时。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">-------------------------------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>表级锁：</span></p>
<p style="margin: 0cm 0cm 0pt"><span>保护表的数据</span></p>
<p style="margin: 0cm 0cm 0pt"><span>在多个用户同时访问数据时确保数据的完整性</span></p>
<p style="margin: 0cm 0cm 0pt"><span>可以设置为三种模式：共享、共享更新和排他</span></p>
<p style="margin: 0cm 0cm 0pt"><span>语法：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Lock table &lt; table_name&gt; in<span>&nbsp;&nbsp;</span>&lt;mode&gt;;</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">--------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>共享锁：仅允许其他用户执行查询操作，不能插入、更新和删除，多个用户可以同时在同一表中放置此锁</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Lock<span>&nbsp;&nbsp;</span>table<span>&nbsp;&nbsp;</span>table_name</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">in share<span>&nbsp;&nbsp;</span>mode<span>&nbsp;&nbsp;&nbsp;</span>[nowait]; </font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">rollback<span>&nbsp;&nbsp;&nbsp;</span></font></span><span>和</span><span><font face="Times New Roman">commit</font></span><span>命令释放锁</span><span><font face="Times New Roman"> </font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Nowait<span>&nbsp;&nbsp;</span></font></span><span>关键字告诉其他用户不用等待</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">lock table&lt;tabale_name&gt;[,&lt;table_name&gt;,....]</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">in share mode[nowait]</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">---------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>共享更新锁：</span></p>
<p style="margin: 0cm 0cm 0pt"><span>锁定要被更新的行</span></p>
<p style="margin: 0cm 0cm 0pt"><span>允许其他用户同时查询、插入、更新未被锁定的行</span></p>
<p style="margin: 0cm 0cm 0pt"><span>在</span><span><font face="Times New Roman"> SELECT </font></span><span>语句中使用&#8220;</span><span><font face="Times New Roman">FOR UPDATE</font></span><span>&#8221;子句，可以强制使用共享更新锁</span></p>
<p style="margin: 0cm 0cm 0pt"><span>允许多个用户同时锁定表的不同行</span></p>
<p style="margin: 0cm 0cm 0pt"><span>加锁的两种方法</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(1)lock table tab_name in share update mode; </font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(2)Select column1, column2 From<span>&nbsp;&nbsp;</span>goods Where gid=1001<span>&nbsp;&nbsp;</span>For update of column1, column2</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt; mso-char-indent-count: 1.0"><span><font face="Times New Roman">lock table&lt;tabale_name&gt;[,&lt;table_name&gt;,....] in share update mode [nowait]</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">-------------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span>排他锁：</span></p>
<p style="margin: 0cm 0cm 0pt"><span>与其他两种锁相比，排他锁是限制性最强的表锁，仅允许其他用户查询数据，不允许执行插入、删除和更新操作，在同一时间仅允许一位用户在表上放置排他锁</span></p>
<p style="margin: 0cm 0cm 0pt"><span>共享锁与此相反</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">lock table&lt;tabale_name&gt;[,&lt;table_name&gt;,....]</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">in exclusive mode [nowait]</font></span></p>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/181792.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-02-24 17:20 <a href="http://www.blogjava.net/WshmAndLily/articles/181792.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 10g表的基本操作</title><link>http://www.blogjava.net/WshmAndLily/articles/181786.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Sun, 24 Feb 2008 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/181786.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/181786.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/181786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/181786.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/181786.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">---------------------------------------------------</font></span><span>表操作</span><span><font face="Times New Roman">-------------------------------------------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">1</font></span><span>．表的创建：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">create table table_name(column_name datatype[,column_name datatype])</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">2</font></span><span>．表数据的插入：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">insert into table_name values(column_instance)</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">3</font></span><span>．更新数据：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">update table_name set column_instance=? where column_name=?</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">4</font></span><span>．查询数据：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">select * from table_name where condition1 group by column_name1... having.... order by column_name[desc,[asc]]</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">5</font></span><span>．删除数据：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">delete from table_name where column_name1=?</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">6</font></span><span>．在表空间上建立表：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">create table tablename(column_name,datatype)tablespace tablespace_name</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">7</font></span><span>．</span><span><font face="Times New Roman">oracle</font></span><span>中提供</span><span><font face="Times New Roman">5</font></span><span>种约束：</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Check</font></span><span>，</span><span><font face="Times New Roman">not null</font></span><span>，</span><span><font face="Times New Roman">unique</font></span><span>，</span><span><font face="Times New Roman">primary key</font></span><span>，</span><span><font face="Times New Roman">foreign key</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(a)check</font></span><span>约束</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Create table policies(policy_id number ,holder_name varchar2(40),gender varchar2 (1) constraint chk_gender check (gender in ('M','F'),marital_status varchar2 (1),<br />
date_of_birth date ,constraint chk_marital check (marital_status in('S','M','D','W')));</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(b)not null</font></span><span>约束</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">Create table policies(policy_id number ,holder_name varchar2 (40) not null,gender varchar2(1),marital_status varchar2(1),date_of_birth date not null);</font></span><span>　　</span></p>
<p style="margin: 0cm 0cm 0pt"><span>对于</span><span><font face="Times New Roman">not null</font></span><span>的</span><span><font face="Times New Roman">alter table</font></span><span>语句与其他约束稍微有点不同。</span><span><font face="Times New Roman">Alter table policies modify holder_name not null</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(c)unique</font></span><span>约束</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">create table<span>&nbsp;&nbsp;</span>emp(eid<span>&nbsp;&nbsp;</span>int ,ename<span>&nbsp;&nbsp;</span>varchar2(10),constraint uq unique(eid,ename))</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">create<span>&nbsp;&nbsp;</span>table<span>&nbsp;&nbsp;</span>emp (eid<span>&nbsp;&nbsp;</span>int ,ename<span>&nbsp;&nbsp;</span>varchar(10))</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter table emp<span>&nbsp;&nbsp;</span>add<span>&nbsp;&nbsp;</span>constraint pk<span>&nbsp;&nbsp;</span>primary key(eid,ename);</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">8</font></span><span>。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(a)</font></span><span>添加新列</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter table table_name add column_name datatype [constraint][constraint_name] </font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">(b) </font></span><span>添加新列并指定默认值</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter table table_name add column_name datatype default expression </font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter table table_name drop column column_name--</font></span><span>删除列</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter table table_name modify column_name datatype--</font></span><span>修改类属性</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter table table_name disable constraint constraint_name--</font></span><span>禁用约束</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter table table_name enable constraint constraint_name--</font></span><span>启用约束</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter table table_name add constraint constraint_name constraint_type(column_name)--</font></span><span>添加约束</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">alter table table_name drop constraint constraint_name [cascade]--</font></span><span>删除约束</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">--</font></span><span>组合主健（可以用多个列组合成一个主健）</span></p>
<span style="font-size: 10.5pt">alter table table_name add constraint constraint_name primary key (column_name, column_name...)</span>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/181786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-02-24 16:55 <a href="http://www.blogjava.net/WshmAndLily/articles/181786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle10g pl/sql简介</title><link>http://www.blogjava.net/WshmAndLily/articles/181739.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Sun, 24 Feb 2008 03:41:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/181739.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/181739.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/181739.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/181739.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/181739.html</trackback:ping><description><![CDATA[<p>Pl/sql基础知识：<br />
（1）pl/sql的块结构<br />
（2）变量的声明<br />
（3）字符值，字符和保留字<br />
（4）pl/sql语言使用的数据类型<br />
（5）隐藏代码的Wrpper实用程序<br />
了解：<br />
DDL：data definition language的缩写 包括：alter，create，drop，truncate，grant，revoke<br />
DML：data manipulation language的缩写 包括：insert update delete<br />
目前：oracle10g存储的数据量可以达到EB级，1EB=1024PB，1PB=1024TB，1TB=1024G，1G=1024M，1M=1024KB，1KB=1024B 1B=8b<br />
pl/sql的数据类型：<br />
标量类型：字符/字符串类型，数字类型，布尔类型，日期/时间类型<br />
引用类型：ref cursor（游标变量），ref（可以理解为一个指针，只是该指针指向的内容是对象表，或对象视图里的一个对象实例）<br />
复合类型：记录，嵌套表，index-by表，varrays<br />
LOB大对象类型：oracle 10前可以存储小于4G的二进制或字符数据，oracle 10可以存储最大长度是：8T-128T<br />
代码块的基本结构：<br />
begin <br />
null；--如果没有null会出现异常<br />
end<br />
－－－－－－－－－－－－－－－－－－－－－－</p>
<p>--匿名块的实例：<br />
CREATE TABLE authors (<br />
&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER PRIMARY KEY,<br />
&nbsp;&nbsp; first_name VARCHAR2(50),<br />
&nbsp;&nbsp; last_name&nbsp;&nbsp; VARCHAR2(50)<br />
);</p>
<p>CREATE TABLE books (<br />
&nbsp;&nbsp; isbn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHAR(10) PRIMARY KEY,<br />
&nbsp;&nbsp; category&nbsp;&nbsp; VARCHAR2(20),<br />
&nbsp;&nbsp; title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(100),<br />
&nbsp;&nbsp; num_pages NUMBER,<br />
&nbsp;&nbsp; price&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER,<br />
&nbsp;&nbsp; copyright NUMBER(4),<br />
&nbsp;&nbsp; author1&nbsp;&nbsp;&nbsp; NUMBER CONSTRAINT books_author1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REFERENCES authors(id),<br />
&nbsp;&nbsp; author2&nbsp;&nbsp;&nbsp; NUMBER CONSTRAINT books_author2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REFERENCES authors(id),<br />
&nbsp;&nbsp; author3&nbsp;&nbsp;&nbsp; NUMBER CONSTRAINT books_author3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REFERENCES authors(id)<br />
);</p>
<p>CREATE TABLE inventory (<br />
&nbsp;&nbsp; isbn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHAR(10) CONSTRAINT fk_isbn REFERENCES books (isbn),<br />
&nbsp;&nbsp; status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(25) CHECK (status IN ('IN STOCK', 'BACKORDERED', 'FUTURE')),<br />
&nbsp;&nbsp; status_date&nbsp;&nbsp; DATE,<br />
&nbsp;&nbsp; amount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER<br />
);<br />
INSERT INTO authors (id, first_name, last_name)<br />
&nbsp;&nbsp; VALUES (1, 'Marlene', 'Theriault');</p>
<p>INSERT INTO authors (id, first_name, last_name)<br />
&nbsp;&nbsp; VALUES (2, 'Rachel', 'Carmichael');</p>
<p>INSERT INTO authors (id, first_name, last_name)<br />
&nbsp;&nbsp; VALUES (3, 'James', 'Viscusi');</p>
<p>INSERT INTO books (isbn, category, title, num_pages, price, copyright, author1, author2, author3)<br />
&nbsp;&nbsp; VALUES ('72121203', 'Oracle Basics', 'Oracle DBA 101', 563, 39.99, 1999, 1, 2, 3);</p>
<p>INSERT INTO inventory (isbn, status, status_date, amount)<br />
&nbsp;&nbsp; VALUES ('72121203', 'BACKORDERED', TO_DATE('06-JUN-2004', 'DD-MON-YYYY'), 1000);</p>
<p>SET SERVEROUTPUT ON ESCAPE OFF--当退出该匿名块时就关闭SERVEROUTPUT<br />
DECLARE<br />
&nbsp;&nbsp;&nbsp; v_first_name authors.first_name%TYPE;&nbsp;&nbsp; --声明和定义变量<br />
&nbsp;&nbsp;&nbsp; v_last_name authors.last_name%TYPE;<br />
&nbsp;&nbsp;&nbsp; v_row_count PLS_INTEGER := 0;<br />
&nbsp;&nbsp;&nbsp; CURSOR auth_cur IS&nbsp;&nbsp;&nbsp; --声明游标<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT a.first_name, a.last_name, count(b.title)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM authors a, books b<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE a.id = b.author1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OR a.id = b.author2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OR a.id = b.author3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GROUP BY a.first_name, a.last_name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HAVING count(b.title) &gt; 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ORDER BY a.last_name;<br />
BEGIN<br />
&nbsp;&nbsp;&nbsp; DBMS_OUTPUT.ENABLE(1000000);<br />
&nbsp;&nbsp;&nbsp; OPEN auth_cur;&nbsp;&nbsp; --打开游标<br />
&nbsp;&nbsp;&nbsp; LOOP<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FETCH auth_cur INTO v_first_name, v_last_name, v_row_count;--推进游标<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXIT WHEN auth_cur%NOTFOUND;&nbsp;&nbsp; --当没有发现数据时，推出<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBMS_OUTPUT.PUT_LINE(v_last_name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ||', '<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ||v_first_name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ||' wrote '<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ||v_row_count<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ||' book(s).');<br />
&nbsp;&nbsp;&nbsp; END LOOP;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; CLOSE auth_cur;&nbsp;&nbsp; --关闭游标<br />
EXCEPTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --异常处理部分<br />
&nbsp;&nbsp;&nbsp; WHEN OTHERS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --others表示其它别的异常<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBMS_OUTPUT.PUT_LINE(SQLERRM);<br />
END;</p>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/181739.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-02-24 11:41 <a href="http://www.blogjava.net/WshmAndLily/articles/181739.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle基础知识小结</title><link>http://www.blogjava.net/WshmAndLily/articles/181593.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Sat, 23 Feb 2008 06:42:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/181593.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/181593.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/181593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/181593.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/181593.html</trackback:ping><description><![CDATA[<p><font face="Verdana" size="2"><strong>(1)SEQNAME.NEXTVAL里面的值如何读出来</strong></font></p>
<p><font face="Verdana" size="2">可以直接在insert into test values(SEQNAME.NEXTVAL) 是可以用这样：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font face="Verdana" size="2">SELECT tmpdata_seq.NEXTVAL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTO id_temp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM DUAL;&nbsp; 然后可以用id_temp</font></p>
<p><font face="Verdana"><font size="2">(2)<strong>PLS-00103: 出现符号 "&gt;"在需要下列之一时：</strong></font></font><font face="Verdana"><br />
<font size="2">代码如下：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font></p>
<p><font face="Verdana" size="2">&nbsp;IF (sum&gt;0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; THEN<br />
&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INSERT INTO emesp.tp_sn_production_log<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUES (r_serial_number, , id_temp);</font></p>
<p><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXIT;<br />
&nbsp;&nbsp;&nbsp; end;&nbsp;</font></p>
<p><font face="Verdana" size="2">一直报sum&gt;0 这是个很郁闷的问题 因为变量用了sum&nbsp; 所以不行，后改为i_sum&gt;0</font></p>
<p><font face="Verdana"><font size="2">(3)<strong>oracle 语法</strong></font></font></p>
<p><font size="2">1. Oracle应用编辑方法概览<br />
答：1) Pro*C/C++/... : C语言和数据库打交道的方法，比OCI更常用;<br />
&nbsp;&nbsp;&nbsp; 2) ODBC<br />
&nbsp;&nbsp;&nbsp; 3) OCI: C语言和数据库打交道的方法，和ProC很相似，更底层，很少用;<br />
&nbsp;&nbsp;&nbsp; 4) SQLJ: 很新的一种用Java访问Oracle数据库的方法，会的人不多;<br />
&nbsp;&nbsp;&nbsp; 5) JDBC<br />
&nbsp;&nbsp;&nbsp; 6) PL/SQL: 存储在数据内运行, 其他方法为在数据库外对数据库访问;</font></p>
<p><font size="2">2. PL/SQL<br />
答：1) PL/SQL(Procedual language/SQL)是在标准SQL的基础上增加了过程化处理的语言;<br />
&nbsp;&nbsp;&nbsp; 2) Oracle客户端工具访问Oracle服务器的操作语言;<br />
&nbsp;&nbsp;&nbsp; 3) Oracle对SQL的扩充;</font></p>
<p><font size="2">4. PL/SQL的优缺点<br />
答：优点：<br />
&nbsp;&nbsp;&nbsp; 1) 结构化模块化编程，不是面向对象;<br />
&nbsp;&nbsp;&nbsp; 2) 良好的可移植性(不管Oracle运行在何种操作系统);<br />
&nbsp;&nbsp;&nbsp; 3) 良好的可维护性(编译通过后存储在数据库里);<br />
&nbsp;&nbsp;&nbsp; 4) 提升系统性能;</font></p>
<p><br />
<font size="2">&nbsp;&nbsp;&nbsp;&nbsp;第二章</font></p>
<p><font size="2">PL/SQL程序结构</font></p>
<p><font size="2">1. PL/SQL块<br />
答：1) 申明部分, DECLARE(不可少);<br />
&nbsp;&nbsp;&nbsp; 2) 执行部分, BEGIN...END;<br />
&nbsp;&nbsp;&nbsp; 3) 异常处理，EXCEPTION(可以没有);</font></p>
<p><font size="2">2. PL/SQL开发环境<br />
答：可以运用任何纯文本的编辑器编辑，例如：VI&nbsp;&nbsp;&nbsp; ；toad很好用</font></p>
<p><font size="2">3. PL/SQL字符集<br />
答：PL/SQL对大小写不敏感</font></p>
<p><font size="2">4. 标识符命名规则<br />
答：1) 字母开头;<br />
&nbsp;&nbsp;&nbsp; 2) 后跟任意的非空格字符、数字、货币符号、下划线、或# ;<br />
&nbsp;&nbsp;&nbsp; 3) 最大长度为30个字符(八个字符左右最合适);</font></p>
<p><font size="2">5. 变量声明<br />
答：语法<br />
&nbsp;&nbsp;&nbsp; Var_name type [CONSTANT][NOT NULL][:=value];<br />
&nbsp;&nbsp;&nbsp; 注：1) 申明时可以有默认值也可以没有;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2) 如有[CONSTANT][NOT NULL], 变量一定要有一个初始值;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3) 赋值语句为&#8220;:=&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4) 变量可以认为是数据库里一个字段;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5) 规定没有初始化的变量为NULL;</font></p>
<p><font size="2">第三章</font></p>
<p><font size="2">1. 数据类型<br />
答：1) 标量型：数字型、字符型、布尔型、日期型;<br />
&nbsp;&nbsp;&nbsp; 2) 组合型：RECORD(常用)、TABLE(常用)、VARRAY(较少用)<br />
&nbsp;&nbsp;&nbsp; 3) 参考型：REF CURSOR(游标)、REF object_type<br />
&nbsp;&nbsp;&nbsp; 4) LOB(Large Object)</font></p>
<p><font size="2">2. %TYPE<br />
答：变量具有与数据库的表中某一字段相同的类型<br />
&nbsp;&nbsp;&nbsp; 例：v_FirstName studengts.first_name%TYPE;</font></p>
<p><font size="2">3. RECORD类型<br />
答：TYPE record_name IS RECORD(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*其中TYPE，IS，RECORD为关键字，record_name为变量名称*/<br />
&nbsp;field1 type [NOT NULL][:=expr1],&nbsp;&nbsp; /*每个等价的成员间用逗号分隔*/<br />
&nbsp;field2 type [NOT NULL][:=expr2],&nbsp;&nbsp; /*如果一个字段限定NOT NULL，那么它必须拥有一个初始值*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*所有没有初始化的字段都会初始为NULL<br />
&nbsp;fieldn type [NOT NULL][:=exprn]);</font></p>
<p><font size="2">4. %ROWTYPE<br />
答：返回一个基于数据库定义的类型<br />
&nbsp;&nbsp;&nbsp; DECLARE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v_StuRec Student%ROWTYPE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*Student为表的名字*/</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; 注：与3中定一个record相比，一步就完成，而3中定义分二步：a. 所有的成员变量都要申明; b. 实例化变量;</font></p>
<p><font size="2">5. TABLE类型<br />
答：TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER;<br />
&nbsp;&nbsp;&nbsp; 例：DECLARE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE t_StuTable IS TABLE OF Student%ROWTYPE INDEX BY BINARY_INTERGER;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v_Student t_StuTable;<br />
&nbsp;BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT * INTO v_Student(100) FROM Student WHERE id = 1001;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END;<br />
&nbsp;&nbsp;&nbsp; 注：1) 行的数目的限制由BINARY_INTEGER的范围决定;</font></p>
<p><font size="2">6. 变量的作用域和可见性<br />
答：1) 执行块里可以嵌入执行块;<br />
&nbsp;&nbsp;&nbsp; 2) 里层执行块的变量对外层不可见;<br />
&nbsp;&nbsp;&nbsp; 3) 里层执行块对外层执行块变量的修改会影响外层块变量的值;</font></p>
<p><font size="2">第四章</font></p>
<p><font size="2">1. 条件语句<br />
答：IF boolean_expression1 THEN<br />
&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; ELSIF boolean_expression2 THEN&nbsp;&nbsp; /*注意是ELSIF，而不是ELSEIF*/<br />
&nbsp;&nbsp;&nbsp; ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*ELSE语句不是必须的，但END IF;是必须的*/<br />
&nbsp;&nbsp;&nbsp; ELSE<br />
&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; END IF;</font></p>
<p><font size="2">2. 循环语句<br />
答：1) Loop<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF boolean_expr THEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXIT;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* EXIT WHEN boolean_expr */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END IF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END LOOP;<br />
&nbsp;&nbsp;&nbsp; 2) WHILE boolean_expr LOOP<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END LOOP;<br />
&nbsp;&nbsp;&nbsp; 3) FOR loop_counter IN [REVERSE] low_blound..high_bound LOOP<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END LOOP;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注：a. 加上REVERSE 表示递减，从结束边界到起始边界，递减步长为一;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. low_blound&nbsp; 起始边界; high_bound&nbsp; 结束边界;</font></p>
<p><font size="2">3. GOTO语句<br />
答：GOTO label_name;<br />
&nbsp;&nbsp;&nbsp; 1) 只能由内部块跳往外部块;<br />
&nbsp;&nbsp;&nbsp; 2) 设置标签：&lt;&lt;label_name&gt;&gt;<br />
&nbsp;&nbsp;&nbsp; 3) 示例：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOOP<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF D%ROWCOUNT = 50 THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GOTO l_close;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END IF;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END LOOP;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt;l_close&gt;&gt;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...</font></p>
<p><font size="2">4. NULL语句<br />
答：在语句块中加空语句，用于补充语句的完整性。示例：<br />
&nbsp;&nbsp;&nbsp; IF boolean_expr THEN<br />
&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; ELSE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL;<br />
&nbsp;&nbsp;&nbsp; END IF;</font></p>
<p><font size="2">5. SQL in PL/SQL<br />
答：1) 只有DML SQL可以直接在PL/SQL中使用;</font></p>
<p><font size="2">第五章</font></p>
<p><font size="2">1. 游标(CURSOR)<br />
答：1) 作用：用于提取多行数据集;<br />
&nbsp;&nbsp;&nbsp; 2) 声明：a. 普通申明：DELCARE CURSOR CURSOR_NAME IS select_statement&nbsp; /* CURSOR的内容必须是一条查询语句*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. 带参数申明：DELCARE CURSOR c_stu(p_id student.ID%TYPE) SELECT * FROM student WHERE ID = p_id;<br />
&nbsp;&nbsp;&nbsp; 3) 打开游标：OPEN Cursor_name;&nbsp;&nbsp; /*相当于执行select语句，且把执行结果存入CURSOR;<br />
&nbsp;&nbsp;&nbsp; 4) 从游标中取数：a. FETCH cursor_name INTO var1, var2, ...; /*变量的数量、类型、顺序要和Table中字段一致;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. FETCH cursor_name INTO record_var;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注：将值从CURSOR取出放入变量中，每FETCH一次取一条记录;<br />
&nbsp;&nbsp;&nbsp; 5) 关闭游标: CLOSE Cursor_name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注：a. 游标使用后应该关闭;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. 关闭后的游标不能FETCH和再次CLOSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c. 关闭游标相当于将内存中CURSOR的内容清空;</font></p>
<p><font size="2">2. 游标的属性<br />
答：1) %FOUND:&nbsp;&nbsp;&nbsp; 是否有值;<br />
&nbsp;&nbsp;&nbsp; 2) %NOTFOUND: 是否没有值;<br />
&nbsp;&nbsp;&nbsp; 3) %ISOPEN:&nbsp;&nbsp; 是否是打开状态;<br />
&nbsp;&nbsp;&nbsp; 4) %ROWCOUNT: CURSOR当前的记录号;</font></p>
<p><font size="2">3. 游标的FETCH循环<br />
答：1) LOOP<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FETCH cursor INTO ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXIT WHEN cursor%NOTFOUND;&nbsp;&nbsp; /*当cursor中没记录后退出*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END LOOP;<br />
&nbsp;&nbsp;&nbsp; 2) WHILE cursor%FOUND LOOP<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FETCH cursor INTO ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END LOOP;<br />
&nbsp;&nbsp;&nbsp; 3) FOR var IN cursor LOOP<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FETCH cursor INTO...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END LOOP;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
第六章</font></p>
<p><font size="2">1. 异常<br />
答：DECLARE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e_TooManyStudents EXCEPTION;&nbsp; /* 申明异常 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RAISE e_TooManyStudents;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 触发异常 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; EXCEPTION<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHEN e_TooManyStudents THEN&nbsp;&nbsp; /* 触发异常 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHEN OTHERS THEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 处理所有其他异常 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; END;</font></p>
<p><font size="2">2004-9-8&nbsp;&nbsp;&nbsp;&nbsp; 星期三&nbsp;&nbsp;&nbsp; 阴</font></p>
<p><font size="2">PL/SQL数据库编程(下)</font></p>
<p><font size="2">1. 存储过程(PROCEDURE)<br />
答：创建过程：<br />
&nbsp;&nbsp;&nbsp; CREATE [OR REPLACE] PROCEDURE proc_name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(arg_name[{IN|OUT|IN OUT}]TYPE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arg_name[{IN|OUT|IN OUT}]TYPE)]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {IS|AS}<br />
&nbsp;&nbsp;&nbsp; procedure_body<br />
&nbsp;&nbsp;&nbsp; 1) IN: 表示该参数不能被赋值(只能位于等号右边);<br />
&nbsp;&nbsp;&nbsp; 2) OUT:表示该参数只能被赋值(只能位于等号左边);<br />
&nbsp;&nbsp;&nbsp; 3) IN OUT: 表示该类型既能被赋值也能传值;</font></p>
<p><font size="2">2. 存储过程例子<br />
答：CREATE OR REPLACE PROCEDURE ModeTest(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_InParm IN NUMBER,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_OutParm OUT NUMBER,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_InOutParm IN OUT NUMBER)<br />
&nbsp;&nbsp;&nbsp; IS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v_LocalVar NUMBER;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 声明部分 */<br />
&nbsp;&nbsp;&nbsp; BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v_LocalVar:=p_InParm;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 执行部分 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_OutParm:=7;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p_InOutParm:=7;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; EXCEPTION<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 异常处理部分 */<br />
&nbsp;&nbsp;&nbsp; END ModeTest;<br />
&nbsp;&nbsp;&nbsp; <br />
3. 调用PROCEDURE的例子<br />
答：1) 匿名块可以调;<br />
&nbsp;&nbsp;&nbsp; 2) 其他PROCDEURE可以调用;<br />
&nbsp;&nbsp;&nbsp; 例：<br />
&nbsp;&nbsp;&nbsp; DECLARE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v_var1 NUMBER;<br />
&nbsp;&nbsp;&nbsp; BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ModeTest(12, v_var1, 10);<br />
&nbsp;&nbsp;&nbsp; END;<br />
&nbsp;&nbsp;&nbsp; 注：此时v_var1等于7</font></p>
<p><font size="2">4. 指定实参的模式<br />
答：1) 位置标示法：调用时添入所有参数，实参与形参按顺序一一对应;<br />
&nbsp;&nbsp;&nbsp; 2) 名字标示法：调用时给出形参名字，并给出实参<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ModeTest(p_InParm=&gt;12, p_OutParm=&gt;v_var1, p_Inout=&gt;10);<br />
&nbsp;&nbsp;&nbsp; 注：a. 两种方法可以混用;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. 混用时第一个参数必须通过位置来指定。</font></p>
<p><font size="2">5. 函数(Function)与过程(Procedure)的区别<br />
答：1) 过程调用本身是一个PL/SQL语句(可以在命令行中通过exec语句直接调用); <br />
&nbsp;&nbsp;&nbsp; 2) 函数调用是表达式的一部分;</font></p>
<p><font size="2">6. 函数的声明<br />
答：CREATE [OR REPLACE] PROCEDURE proc_name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(arg_name[{IN|OUT|IN OUT}]TYPE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arg_name[{IN|OUT|IN OUT}]TYPE)]<br />
&nbsp;&nbsp;&nbsp; RETURN TYPE<br />
&nbsp;&nbsp;&nbsp; {IS|AS}<br />
&nbsp;&nbsp;&nbsp; procedure_body<br />
&nbsp;&nbsp;&nbsp; 注：1) 没有返回语句的函数将是一个错误;</font></p>
<p><font size="2">7. 删除过程与函数<br />
答：DROP PROCEDURE proc_name;<br />
&nbsp;&nbsp;&nbsp; DROP FUNCTION func_name;</font></p>
<p><font size="2">第八章</font></p>
<p><font size="2">1. 包<br />
答：1) 包是可以将相关对象存储在一起的PL/SQL的结构;<br />
&nbsp;&nbsp;&nbsp; 2) 包只能存储在数据库中，不能是本地的;<br />
&nbsp;&nbsp;&nbsp; 3) 包是一个带有名字的声明;<br />
&nbsp;&nbsp;&nbsp; 4) 相当于一个PL/SQL块的声明部分;<br />
&nbsp;&nbsp;&nbsp; 5) 在块的声明部分出现的任何东西都能出现在包中;<br />
&nbsp;&nbsp;&nbsp; 6) 包中可以包含过程、函数、游标与变量;<br />
&nbsp;&nbsp;&nbsp; 7) 可以从其他PL/SQL块中引用包，包提供了可用于PL/SQL的全局变量。<br />
&nbsp;&nbsp;&nbsp; 8) 包有包头和包主体，如包头中没有任何函数与过程，则包主体可以不需要。</font></p>
<p><font size="2">2. 包头<br />
答：1) 包头包含了有关包的内容的信息，包头不含任何过程的代码。<br />
&nbsp;&nbsp;&nbsp; 2) 语法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CREATE [OR REPLACE] PACKAGE pack_name {IS|AS}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procedure_specification|function_specification|</font></p>
<p><font size="2">variable_declaration|type_definition|exception_declaration|</font></p>
<p><font size="2">cursor_declaration<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END pack_name;<br />
&nbsp;&nbsp;&nbsp; 3) 示例：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CREATE OR REPLACE PACKAGE pak_test AS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROCEDURE RemoveStudent(p_StuID IN students.id%TYPE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE t_StuIDTable IS TABLE OF students.id%TYPE INDEX BY BINARY_INTEGER;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END pak_test;</font></p>
<p><font size="2">3. 包主体<br />
答：1) 包主体是可选的，如包头中没有任何函数与过程，则包主体可以不需要。<br />
&nbsp;&nbsp;&nbsp; 2) 包主体与包头存放在不同的数据字典中。<br />
&nbsp;&nbsp;&nbsp; 3) 如包头编译不成功，包主体无法正确编译。<br />
&nbsp;&nbsp;&nbsp; 4) 包主体包含了所有在包头中声明的所有过程与函数的代码。<br />
&nbsp;&nbsp;&nbsp; 5) 示例：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CREATE OR REPLACE PACKAGE BODY pak_test AS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROCEDURE RemoveStudent(p_StuID IN students.id%TYPE) IS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END RemoveStudent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE t_StuIDTable IS TABLE OF students.id%TYPE INDEX BY BINARY_INTEGER;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END pak_test;</font></p>
<p><font size="2">4. 包的作用域<br />
答：1) 在包外调用包中过程(需加包名)：pak_test.AddStudent(100010, 'CS', 101);<br />
&nbsp;&nbsp;&nbsp; 2) 在包主体中可以直接使用包头中声明的对象和过程(不需加包名);</font></p>
<p><font size="2">5. 包中子程序的重载<br />
答：1) 同一个包中的过程与函数都可以重载;<br />
&nbsp;&nbsp;&nbsp; 2) 相同的过程或函数名字，但参数不同;</font></p>
<p><font size="2">6. 包的初始化<br />
答：1) 包存放在数据库中;<br />
&nbsp;&nbsp;&nbsp; 2) 在第一次被调用的时候，包从数据库中调入内存并被初始化;<br />
&nbsp;&nbsp;&nbsp; 3) 包中定义的所有变量都被分配内存;<br />
&nbsp;&nbsp;&nbsp; 4) 每个会话都将拥有自己的包内变量的副本。</font></p>
<p><font size="2">第九章</font></p>
<p><font size="2">1. 触发器<br />
答：1) 触发器与过程/函数的相同点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a. 都是带有名字的执行块;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. 都有声明、执行体和异常部分;<br />
&nbsp;&nbsp;&nbsp; 2) 触发器与过程/函数的不同点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a. 触发器必须存储在数据库中;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. 触发器自动执行;</font></p>
<p><font size="2">2. 创建触发器<br />
答：1) 语法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CREATE [OR REPLACE] TRIGGER trigger_name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {BEFORE|AFTER} triggering_event ON table_reference<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [FOR EACH ROW [WHEN trigger_condition]]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trigger_body;<br />
&nbsp;&nbsp;&nbsp; 2) 范例：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CREATE OR REPLACE TRIGGER UpdateMajorStats AFTER INSERT OR DELETE OR UPDATE ON students<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECLARE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CURSOR c_Statistics IS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT * FROM students GROUP BY major;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END Up;</font></p>
<p><font size="2">3. 触发器<br />
答：1) 三个语句(INSERT/UPDATE/DELETE);<br />
&nbsp;&nbsp;&nbsp; 2) 二种类型(之前/之后);<br />
&nbsp;&nbsp;&nbsp; 3) 二种级别(row-level/statement-level);<br />
&nbsp;&nbsp;&nbsp; 所以一共有 3 X 2 X 2 = 12</font></p>
<p><font size="2">4. 触发器的限制<br />
答：1) 不应该使用事务控制语句;<br />
&nbsp;&nbsp;&nbsp; 2) 不能声明任何LONG或LONG RAW变量;<br />
&nbsp;&nbsp;&nbsp; 3) 可以访问的表有限。</font></p>
<p><font size="2">5. 触发器的主体可以访问的表<br />
答：1) 不可以读取或修改任何变化表(被DML语句正在修改的表);<br />
&nbsp;&nbsp;&nbsp; 2) 不可以读取或修改限制表(带有约束的表)的主键、唯一值、外键列。</font></p>
<p><strong><font size="2">(4)Java开发中使用Oracle的ORA-01000</font></strong></p>
<p><font size="2">很多朋友在Java开发中，使用Oracle数据库的时候，经常会碰到有ORA-01000: maximum open cursors exceeded.的错误。<br />
实际上，这个错误的原因，主要还是代码问题引起的。 <br />
ora-01000: maximum open cursors exceeded. <br />
表示已经达到一个进程打开的最大游标数。 <br />
这样的错误很容易出现在Java代码中的主要原因是：Java代码在执行conn.createStatement()和conn.prepareStatement()的时候，实际上都是相当与在数据库中打开了一个cursor。尤其是，如果你的createStatement和prepareStatement是在一个循环里面的话，就会非常容易出现这个问题。因为游标一直在不停的打开，而且没有关闭。<br />
一般来说，我们在写Java代码的时候，createStatement和prepareStatement都应该要放在循环外面，而且使用了这些Statment后，及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后，如果不需要使用结果集（ResultSet）的数据，就马上将Statment关闭。<br />
对于出现ORA-01000错误这种情况，单纯的加大open_cursors并不是好办法，那只是治标不治本。实际上，代码中的隐患并没有解除。 <br />
而且，绝大部分情况下，open_cursors只需要设置一个比较小的值，就足够使用了，除非有非常特别的要求。</font></p>
<p><font size="2">&nbsp;</font></p>
<p><font size="2"><strong>(5)在store procedure中执行 DDL语句</strong><br />
一是：execute immediate 'update '||table_chan||' set '||column_changed||' = '''||v_trans_name||''' where empid = '''||v_empid||'''' ;</font></p>
<p><font size="2">二是：</font><font face="Georgia" size="2">The DBMS_SQL package can be used to execute DDL statements directly from PL/SQL.&nbsp;&nbsp; <br />
<br />
这是一个创建一个表的过程的例子。该过程有两个参数：表名和字段及其类型的列表。<br />
<br />
</font><font face="Courier New" size="2">CREATE OR REPLACE PROCEDURE ddlproc (tablename varchar2, cols varchar2) AS <br />
&nbsp; cursor1 INTEGER; <br />
BEGIN <br />
&nbsp; cursor1 := dbms_sql.open_cursor; <br />
&nbsp; dbms_sql.parse(cursor1, 'CREATE TABLE ' || tablename ||&nbsp;&nbsp;&nbsp;&nbsp; ' ( ' || cols || ' )', dbms_sql.v7); <br />
&nbsp; dbms_sql.close_cursor(cursor1); <br />
end; <br />
/ </font></p>
<p><font size="2"><strong>2 如何找数据库表的主键字段的名称?</strong><br />
SQL&gt;SELECT * FROM user_constraints<br />
WHERE CONSTRAINT_TYPE='P' and table_name='TABLE_NAME';<br />
<strong>3 如何查询数据库有多少表?</strong><br />
SQL&gt;select * from all_tables;</font></p>
<p><strong><font size="2">4 使用sql统配符</font></strong></p>
<p><font size="2">通配符 描述 示例 % 包含零个或更多字符的任意字符串。 WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名。 _（下划线） 任何单个字符。 WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字（Dean、Sean 等）。 [ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。 WHERE au_lname LIKE '[C-P]arsen' 将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的作者姓氏，例如，Carsen、Larsen、Karsen 等。 [^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。 WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。</font></p>
<p><strong><font size="2">5使普通用户有查看v$Session的权限</font></strong></p>
<p><font size="2">GRANT SELECT <br />
&nbsp;&nbsp;&nbsp; ON&nbsp; "SYS"."V_$OPEN_CURSOR" TO "SFISM4";&nbsp; <br />
GRANT SELECT <br />
&nbsp;&nbsp;&nbsp; ON&nbsp; "SYS"."V_$SESSION" TO "SFISM4";</font></p>
<p><strong><font size="2">常用函数</font></strong></p>
<p><font size="2">&nbsp;distinct<br />
去掉重复的<br />
minus 相减<br />
在第一个表但不在第二个表<br />
SELECT * FROM FOOTBALL MINUS SELECT * FROM SOFTBALL;<br />
intersect 相交<br />
INTERSECT 返回两个表中共有的行。<br />
SELECT * FROM FOOTBAL；<br />
UNION ALL 与UNION 一样对表进行了合并但是它不去掉重复的记录。<br />
汇总函数<br />
count<br />
select count(*) from test;<br />
SUM<br />
SUM 就如同它的本意一样它返回某一列的所有数值的和。<br />
SELECT SUM(SINGLES) TOTAL_SINGLES FROM TEST;<br />
SUM 只能处理数字如果它的处理目标不是数字你将会收到如下信息<br />
输入/输出<br />
SQL&gt;SELECT SUM(NAME) FROM TEAMSTATS;<br />
ERROR<br />
ORA-01722 invalid number<br />
no rows selected<br />
该错误信息当然的合理的因为NAME 字段是无法进行汇总的。<br />
AVG<br />
AVG 可以返回某一列的平均值。<br />
SELECT AVG(SO) AVE_STRIKE_OUTS FROM TEAMSTATS；<br />
MAX<br />
如果你想知道某一列中的最大值请使用MAX。<br />
SELECT MAX(HITS) FROM TEAMSTATS;<br />
MIN<br />
MIN 与MAX 类似它返回一列中的最小数值。<br />
VARIANCE<br />
VARIANCE 方差不是标准中所定义的但它却是统计领域中的一个至关重要的数值。<br />
SELECT VARIANCE(HITS)&nbsp; FROM TEAMSTATS;<br />
STDDEV<br />
这是最后一个统计函数STDDEV 返回某一列数值的标准差。<br />
SELECT STDDEV HITS FROM TEAMSTATS；<br />
日期时间函数<br />
ADD_MONTHS&nbsp; <br />
&nbsp;ADD_MONTHS也可以工作在select 之外<br />
该函数的功能是将给定的日期增加一个月举例来说由于一些特殊的原因上述的计划需要推迟两个月那么就用到了。<br />
LAST_DAY<br />
LAST_DAY 可以返回指定月份的最后一天.<br />
MONTHS_BETWEEN<br />
如果你想知道在给定的两个日期中有多少个月可以使用MONTHS_BETWEEN。<br />
select task, startdate, enddate ,months between(Startdate,enddate) duration from project;<br />
返回结果有可能是负值.<br />
可以利用负值来判断某一日期是否在另一个日期之前下例将会显示所有在1995 年5 月19 日以前开始的比赛.<br />
SELECT * FROM PROJECT<br />
WHERE MONTHS_BETWEEN ('19-MAY-95', STARTDATE)&gt;0;<br />
NEW_TIME<br />
如果你想把时间调整到你所在的时区你可以使用NEW_TIME.<br />
SQL&gt;SELECT ENDDATE EDT, NEW_TIME('ENDDATE',' EDT',' PDT') FROM PROJECT;<br />
NEXT_DAY<br />
NEXT_DAY 将返回与指定日期在同一个星期或之后一个星期内的你所要求的星期天<br />
数的确切日期如果你想知道你所指定的日期的星期五是几号可以这样做.<br />
SQL&gt;SELECT STARTDATE, NEXT_DAY(STARTDATE,' FRIDAY') FROM PROJECT;<br />
SYSDATE<br />
SYSDATE 将返回系统的日期和时间。<br />
SELECT DISTINCT SYSDATE FROM PROJECT；<br />
数学函数<br />
ABS<br />
ABS 函数返回给定数字的绝对值<br />
CEIL 和FLOOR<br />
CEIL 返回与给定参数相等或比给定参数在的最小整数.FLOOR 则正好相反它返回<br />
与给定参数相等或比给定参数小的最大整数.<br />
COS COSH SIN SINH TAN TANH<br />
COS SIN TAN 函数可以返回给定参数的三角函数值默认的参数认定为弧度制.<br />
EXP<br />
EXP 将会返回以给定的参数为指数以e 为底数的幂.<br />
LN and LOG<br />
这是两个对数函数其中LN 返回给定参数的自然对数.<br />
MOD<br />
知道在ANSI 标准中规定取模运算的符号为%在一些解释器中被函数MOD 所取代.<br />
POWER<br />
该函数可以返回某一个数对另一个数的幂在使用幂函数时第一个参数为底数第二个为指数。<br />
SIGN<br />
如果参数的值为负数那么SIGN 返回-1 如果参数的值为正数那么SIGN 返回1,如果参数为零那么SIGN 也返回零.<br />
SQRT<br />
该函数返回参数的平方根,由于负数是不能开平方的所以我们不能将该函数应用于负数.<br />
字符函数<br />
CHR<br />
该函数返回与所给数值参数等当的字符返回的字符取决于数据库所依赖的字符集.<br />
CONCAT<br />
和||一个作用，把两个字符串连接起来.<br />
INITCAP<br />
该函数将参数的第一个字母变为大写此外其它的字母则转换成小写.<br />
LOWER 和UPPER<br />
如你所料LOWER 将参数转换为全部小写字母而UPPER 则把参数全部转换成大写字母.<br />
LPAD 与RPAD<br />
这两个函数最少需要两个参数最多需要三个参数每一个参数是需要处理的字符串<br />
第二个参数是需要将字符串扩充的宽度第三个参数表示加宽部分用什么字符来做填补<br />
第三个参数的默认值为空格但也可以是单个的字符或字符串.<br />
LTRIM 与RTRIM<br />
LTRIM 和RTRIM至少需要一个参数最多允许两个参数第一个参数与LPAD 和RPAD<br />
类似是一个字符串第二个参数也是一个字符或字符串默认则是空格如果第二个<br />
数不是空格的话那么该函数将会像剪除空格那样剪除所指定的字符.<br />
REPLACE<br />
它的工作就如果它的名字所说的那样该函数需要三个参数第一个参数是需要搜索<br />
的字符串(列名），第二个参数是搜索的内容第三个参数则是需要替换成的字符串如果第三个<br />
参数省略或者是NULL 那么将只执行搜索操作而不会替换任何内容.<br />
SUBSTR<br />
这个函数有三个参数允许你将目标字符串的一部份输出，第一个参数为目标字符串，<br />
第二个字符串是将要输出的子串的起点，第三个参数是将要输出的子串的长度。<br />
如果第二个参数为负数那么将会从源串的尾部开始向前定位至负数的绝对值的位置。<br />
TRANSLATE<br />
这一函数有三个参数，目标字符串、源字符串和目的字符串，在目标字符串与源字符<br />
串中均出现的字符将会被替换成对应的目的字符串的字符。<br />
INSTR<br />
如果需要知道在一个字符串中满足特定的内容的位置可以使用INSTR ，它的第一个参<br />
数是目标字符串，第二个参数是匹配的内容，第三和第四个参数是数字用以指定开始搜<br />
索的起点以及指出第几个满足条件的将会被返回。<br />
LENGTH<br />
LENGTH将返回指定字符串的长度。<br />
转换函数<br />
转换函数有三个可以使你方便地将数据从一种类型变换为另一种类型。<br />
TO_CHAR<br />
该函数的最初功能是将一个数字转换为字符型，不同的解释器可能会使用它来转换其它的<br />
数据类型例如日期型转换为字符型或者是拥有更多的参数。<br />
TO_NUMBER<br />
该函数与TO_CHAR 函数相对应显而易见它是将一个字符串型数字转换为数值型。<br />
其他函数<br />
GREATEST 与LEAST<br />
这两个函数将返回几个表达式中最大的和最小的。<br />
SELECT GREATEST（&#8216;ALPHA&#8217;，&#8216; BRAVO&#8217;，&#8216; FOXTROT&#8217;，&#8216; DELTA&#8217;） FROM CONVERT；<br />
看来有必要使用FROM 子句可是如果FROM 子句没有的话你将会收到一个错误信息每<br />
一个SELECT 语句都需要FROM 子句。<br />
USER<br />
该函数返回当前使用数据库的用户的名字 </font></p>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/181593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-02-23 14:42 <a href="http://www.blogjava.net/WshmAndLily/articles/181593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE DATE和TIMESTAMP数据类型的比较</title><link>http://www.blogjava.net/WshmAndLily/articles/180563.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Mon, 18 Feb 2008 14:47:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/180563.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/180563.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/180563.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/180563.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/180563.html</trackback:ping><description><![CDATA[ <img src ="http://www.blogjava.net/WshmAndLily/aggbug/180563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-02-18 22:47 <a href="http://www.blogjava.net/WshmAndLily/articles/180563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE的数据类型</title><link>http://www.blogjava.net/WshmAndLily/articles/180517.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Mon, 18 Feb 2008 11:24:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/180517.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/180517.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/180517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/180517.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/180517.html</trackback:ping><description><![CDATA[<div class="tit">ORACLE的数据类型</div>
<div class="date">2007-11-28 10:04</div>
<table style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt">
            <p>字段类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 中文说明&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 限制条件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其它说明 <br />
            ----------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---------------------------------- ------------------------------ --------------<br />
            CHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 固定长度字符串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大长度2000 bytes&nbsp;&nbsp;&nbsp; <br />
            VARCHAR2&nbsp;&nbsp;&nbsp; 可变长度的字符串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大长度4000 bytes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可做索引的最大长度749 <br />
            NCHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 根据字符集而定的固定长度字符串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大长度2000 bytes&nbsp;&nbsp;&nbsp; <br />
            NVARCHAR2 根据字符集而定的可变长度字符串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大长度4000 bytes&nbsp;&nbsp;&nbsp; <br />
            DATE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 日期(日-月-年) DD-MM-YY(HH-MI-SS)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 经过严格测试，无千虫问题 <br />
            LONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 超长字符串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大长度2G(231-1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 足够存储大部头著作 <br />
            RAW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 固定长度的二进制数据&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大长度2000 bytes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可存放多媒体图象声音等 <br />
            LONG RAW&nbsp;&nbsp;&nbsp; 可变长度的二进制数据&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大长度2G&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同上 <br />
            BLOB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二进制数据&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大长度4G&nbsp;&nbsp; <br />
            CLOB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符数据&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大长度4G&nbsp;&nbsp; <br />
            NCLOB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 根据字符集而定的字符数据&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大长度4G&nbsp;&nbsp; <br />
            BFILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存放在数据库外的二进制数据&nbsp;&nbsp;&nbsp; 最大长度4G&nbsp;&nbsp; <br />
            ROWID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据表中记录的唯一行号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10 bytes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ********.****.****格式，*为0或1 <br />
            NROWID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二进制数据表中记录的唯一行号&nbsp;&nbsp;&nbsp;&nbsp; 最大长度4000 bytes <br />
            NUMBER(P,S)&nbsp;&nbsp;&nbsp; 数字类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P为整数位，S为小数位 <br />
            DECIMAL(P,S)&nbsp;&nbsp;&nbsp; 数字类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P为整数位，S为小数位 <br />
            INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 整数类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 小的整数 <br />
            FLOAT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 浮点数类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER(38)，双精度 <br />
            REAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实数类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER(63)，精度更高</p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/180517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-02-18 19:24 <a href="http://www.blogjava.net/WshmAndLily/articles/180517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>杂记(创建用户和简单基本权限给予)Oracle</title><link>http://www.blogjava.net/WshmAndLily/articles/170040.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Mon, 24 Dec 2007 05:57:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/170040.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/170040.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/170040.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/170040.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/170040.html</trackback:ping><description><![CDATA[<p>创建用户:<br />
<br />
create user <span style="color: red">userName</span> identified by <span style="color: red">password</span>;</p>
<br />
<br />
简单基本权限给予:<br />
<br />
grant connect,resource to <span style="color: red">userName;<br />
<br />
<br />
<span style="color: #000000">CONNECT角色：&nbsp;&nbsp;&nbsp; --是授予最终用户的典型权利，最基本的&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; ALTER&nbsp;&nbsp;&nbsp; SESSION&nbsp;&nbsp;&nbsp; --修改会话&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; CREATE&nbsp;&nbsp;&nbsp; CLUSTER&nbsp;&nbsp;&nbsp; --建立聚簇&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; CREATE&nbsp;&nbsp;&nbsp; DATABASE&nbsp;&nbsp;&nbsp; LINK&nbsp;&nbsp;&nbsp; --建立数据库链接&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; CREATE&nbsp;&nbsp;&nbsp; SEQUENCE&nbsp;&nbsp;&nbsp; --建立序列&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; CREATE&nbsp;&nbsp;&nbsp; SESSION&nbsp;&nbsp;&nbsp; --建立会话&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; CREATE&nbsp;&nbsp;&nbsp; SYNONYM&nbsp;&nbsp;&nbsp; --建立同义词&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; CREATE&nbsp;&nbsp;&nbsp; VIEW&nbsp;&nbsp;&nbsp; --建立视图&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; RESOURCE角色：&nbsp;&nbsp;&nbsp; --是授予开发人员的&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; CREATE&nbsp;&nbsp;&nbsp; CLUSTER&nbsp;&nbsp;&nbsp; --建立聚簇&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; CREATE&nbsp;&nbsp;&nbsp; PROCEDURE&nbsp;&nbsp;&nbsp; --建立过程&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; CREATE&nbsp;&nbsp;&nbsp; SEQUENCE&nbsp;&nbsp;&nbsp; --建立序列&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; CREATE&nbsp;&nbsp;&nbsp; TABLE&nbsp;&nbsp;&nbsp; --建表&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; CREATE&nbsp;&nbsp;&nbsp; TRIGGER&nbsp;&nbsp;&nbsp; --建立触发器&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; CREATE&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp; --建立类型<br />
</span></span>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/170040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-12-24 13:57 <a href="http://www.blogjava.net/WshmAndLily/articles/170040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle SQL</title><link>http://www.blogjava.net/WshmAndLily/articles/153095.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Mon, 15 Oct 2007 13:26:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/153095.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/153095.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/153095.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/153095.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/153095.html</trackback:ping><description><![CDATA[1.增加主键<br />
　　 alter table TABLE_NAME add constraint KEY_NAME primary key (TABLE_COLUMN);<br />
　　 指定表空间<br />
　　 alter table TABLE_NAME add constraint KEY_NAME primary key (TABLE_COLUMN) using index tablespace TABLE_SPACE_NAME;<br />
　　2.增加外键<br />
　　 alter table TABLE_NAME add constraint FK_NAME foreign key (TABLE_COLUMN) references KEY_TABLE_NAME;<br />
　　3.使主键或外键失效、生效<br />
　　 alter table TABLE_NAME disable(enable) constraint KEY_NAME;<br />
　　4、查看各种约束<br />
　　 select constraint_name,table_name,constraint_type,status from user_constraints;<br />
select constraint_name, constraint_type,search_condition, r_constraint_name from user_constraints where table_name = upper('&amp;table_name')<br />
　　 select c.constraint_name,c.constraint_type,cc.column_name <br />
　　 from user_constraints c,user_cons_columns cc<br />
　　 where c.owner = upper('&amp;table_owner') and c.table_name = upper('&amp;table_name')<br />
　　 and c.owner = cc.owner and c.constraint_name = cc.constraint_name<br />
　　 order by cc.position; <br />
　　5、删除主键或外键<br />
　　 alter table TABLE_NAME drop constraint KEY_NAME;<br />
　　6、建外键<br />
　　 单字段时：create table 表名 (col1 char(8),<br />
　　 cno char(4) REFERENCE course);<br />
　　 多个字段时,在最后加上 Foreign Key (字段名) REFERENCE 表名(字段)<br />
　　 连带删除选项 (on delete cascade<br />
　　 当指定时，如果父表中的记录被删除，则依赖于父表的记录也被删除<br />
　　 REFERENCE 表名（） on delete cascade;<br />
　　7、删除带约束的表<br />
　　 Drop table 表名 cascade constraints;<br />
　　8：索引管理<br />
　　&lt;1&gt;.creating function-based indexes <br />
　　sql&gt; create index summit.item_quantity on summit.item(quantity-quantity_shipped); <br />
　　&lt;2&gt;.create a B-tree index <br />
　　sql&gt; create [unique] index index_name on table_name(column,.. asc/desc) tablespace <br />
　　sql&gt; tablespace_name [pctfree integer] [initrans integer] [maxtrans integer] <br />
　　sql&gt; [logging | nologging] [nosort] storage(initial 200k next 200k pctincrease 0 <br />
　　sql&gt; maxextents 50); <br />
　　&lt;3&gt;.pctfree(index)=(maximum number of rows-initial number of rows)*100/maximum number of rows <br />
　　&lt;4&gt;.creating reverse key indexes <br />
　　sql&gt; create unique index xay_id on xay(a) reverse pctfree 30 storage(initial 200k <br />
　　sql&gt; next 200k pctincrease 0 maxextents 50) tablespace indx; <br />
　　&lt;5&gt;.create bitmap index <br />
　　sql&gt; create bitmap index xay_id on xay(a) pctfree 30 storage( initial 200k next 200k <br />
　　sql&gt; pctincrease 0 maxextents 50) tablespace indx; <br />
　　&lt;6&gt;.change storage parameter of index <br />
　　sql&gt; alter index xay_id storage (next 400k maxextents 100); <br />
　　7.allocating index space <br />
　　sql&gt; alter index xay_id allocate extent(size 200k datafile 'c:/oracle/index.dbf'); <br />
　　&lt;8&gt;.alter index xay_id deallocate unused; <br />
　　&lt;9&gt;、查看索引<br />
　　 SQL&gt;select index_name,index_type,table_name from user_indexes order by table_name;<br />
　　&lt;10&gt;、查看索引被索引的字段<br />
　　 SQL&gt;select * from user_ind_columns where index_name=upper('&amp;index_name');<br />
　　11、创建序列<br />
　　 select * from user_sequences;<br />
　　 create sequence SEQ_NAME start with 1000 <br />
　　 maxvalue 1000 increment by 1;<br />
　　 alter sequence SEQ_NAME minvalue 50 maxvalue 100;<br />
　　12、删除重复行<br />
　　 update a set aa=null where aa is not null;<br />
　　 <br />
　　 delete from a where rowid!=<br />
　　 (select max(rowid) from a b where a.aa=b.aa);<br />
　　13、删除同其他表相同的行<br />
　　 delete from a where exits<br />
　　 (select 'X' from b where b.no=a.no);<br />
　　 或<br />
　　 delete from a where no in (select no from b);<br />
　　14、查询从多少行到多少行的记录(可以用在web开发中的分页显示)<br />
　　 select * from ( select rownum row_id,b.* from (select a.* from sys_oper a) b )<br />
　　 where row_id between 15 and 20<br />
　　15、对公共授予访问权<br />
　　 grant select on 表名 to public;<br />
　　 create public synonym 同义词名 for 表名;<br />
　　16、填加注释<br />
　　 comment on table 表名 is '注释';<br />
　　 comment on column 表名.列名 is '注释';<br />
　　17、分布式数据库,创建数据库链路<br />
　　 create [public] database link LINKNAME <br />
　　 [connect to USERNAME identified by PASSWORD]<br />
　　 [using 'CONNECT_STRING']<br />
　　 可以在服务器端，也可以在客户端建立，但必须注意，两台服务器之间<br />
　　 数据库必须可以互访，必须各有各自的别名数据库<br />
　　18、查看数据库链路<br />
　　 select * from all_db_links;<br />
　　 select * from user_db_links;<br />
　　 查询 select * from <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#84;&#65;&#66;&#76;&#69;&#78;&#65;&#77;&#69;&#64;&#68;&#66;&#76;&#78;&#75;&#78;&#65;&#77;&#69;">TABLENAME@DBLNKNAME</a>;<br />
　　 创建远程数据库同义词<br />
　　 create synonym for <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#84;&#65;&#66;&#76;&#69;&#78;&#65;&#77;&#69;&#64;&#68;&#66;&#76;&#78;&#75;&#78;&#65;&#77;&#69;">TABLENAME@DBLNKNAME</a>;<br />
　　 操纵远程数据库记录<br />
　　 insert into <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#84;&#65;&#66;&#76;&#69;&#78;&#65;&#77;&#69;&#64;&#68;&#66;&#76;&#78;&#75;&#78;&#65;&#77;&#69;">TABLENAME@DBLNKNAME</a> (a,b) values (va,vb);<br />
　　 update <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#84;&#65;&#66;&#76;&#69;&#78;&#65;&#77;&#69;&#64;&#68;&#66;&#76;&#78;&#75;&#78;&#65;&#77;&#69;">TABLENAME@DBLNKNAME</a> set a='this';<br />
　　 delete from <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#84;&#65;&#66;&#76;&#69;&#78;&#65;&#77;&#69;&#64;&#68;&#66;&#76;&#78;&#75;&#78;&#65;&#77;&#69;">TABLENAME@DBLNKNAME</a>;<br />
　　 怎样执行远程的内嵌过程<br />
　　 begin<br />
　　 <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#111;&#116;&#104;&#101;&#114;&#100;&#98;&#112;&#114;&#111;&#64;&#116;&#111;&#95;&#104;&#116;&#109;&#108;">otherdbpro@to_html</a>(参数);<br />
　　 end;<br />
　　19、数据库链路用户密码有特殊字符的时候，可以用双引号把密码引起来<br />
　　create public database link dblink1 connect to db1 identified by "123*456" using 'db11'<br />
　　20.oracle8中扩充了group by rollup和cube的操作。有时候省了你好多功夫的。<br />
　　 &lt;1&gt;下面的语句可以进行总计<br />
　　 select region_code,count(*) from aicbs.acc_woff_notify<br />
　　 group by rollup(region_code);<br />
　　 &lt;2&gt; 对第1个字段小计，最后合计<br />
　　 select region_code,write_status,count(*) from aicbs.acc_woff_notify<br />
　　 group by rollup(region_code,write_status);<br />
　　 ----------------------<br />
　　 570 0 3<br />
　　 570 1 2<br />
　　 570 5 --此处小计了570的记录<br />
　　 571 0 10<br />
　　 571 1 2<br />
　　 571 12 --此处小计了571的记录<br />
　　 .....<br />
　　 100 --此处有总计<br />
　　 &lt;3&gt; 复合rollup表达式,只做总计<br />
　　 select region_code,write_status,count(*) from aicbs.acc_woff_notify<br />
　　 group by rollup(region_code,write_status);<br />
　　 <br />
　　 &lt;4&gt; 对第1个字段小计，再对第2个字段小计，最后合计<br />
　　 select region_code,write_status,count(*) from aicbs.acc_woff_notify<br />
　　 group by cube(region_code,write_status);<br />
　　 ----------------------<br />
　　 100 --此处有总计<br />
　　 0 60 --对write_status＝0的小计<br />
　　 1 39 --对write_status＝1的小计<br />
　　 3 1 --对write_status＝3的小计<br />
　　 570 5 --此处小计了570的记录<br />
　　 570 0 3<br />
　　 570 1 2<br />
　　 571 12 --此处小计了571的记录<br />
　　 571 0 10<br />
　　 571 1 2<br />
　　 ....<br />
　　 &lt;3&gt; 复合cube表达式,只做总计<br />
　　 select region_code,write_status,count(*) from aicbs.acc_woff_notify<br />
　　 group by cube(region_code,write_status);<br />
　　 <br />
　　 <br />
　　 &lt;4&gt;下面的语句可以按照rollup不同的字段进行小计<br />
　　 select region_code,write_status,count(*) from aicbs.acc_woff_notify<br />
　　 group by region_code,rollup(write_status);<br />
　　21.查询view的创建语句<br />
　　 sql&gt;set long 1000<br />
　　 sql&gt;select * from user_views where view_name='MY_VIEW_NAME';<br />
　　 or<br />
　　 sql&gt;select * from all_views where view_name='MY_VIEW_NAME';<br />
　　22、去除数据库中特殊字符<br />
　　 &lt;1&gt;.字符串字段中含有"'",如果用来组合sql语句，会造成语句不准确。<br />
　　 比如：replace(f1,'''','')<br />
　　 &lt;2&gt;.字符串字段中含有"\t \n",如果用来在c或者c＋＋程序中输出到文件，格式无法保证。<br />
　　 比如：replace(f2,'\t','')<br />
　　 &lt;3&gt;.清除换行和回车<br />
　　 比如: replace(f2,chr(13)||chr(10),'')<br />
　　23、如何在字符串里加回车或者tab键 <br />
　　 在sqlplus中执行<br />
　　 sql&gt;select 'UserId=1233111'||chr(10)||'AccId=13431'||chr(9)||'AccId2=11111' from dual;<br />
　　24、树形查询<br />
　　create table zj(<br />
　　bm number(8),<br />
　　bmmc varchar2(20),<br />
　　sjbm number(8)<br />
　　)<br />
　　insert into zj values(1,'aaa',0)<br />
　　insert into zj values(11,'aaa1',1)<br />
　　insert into zj values(12,'aaa2',1)<br />
　　insert into zj values(111,'aaa11',11)<br />
　　insert into zj values(112,'aaa12',11)<br />
　　insert into zj values(113,'aaa13',11)<br />
　　insert into zj values(121,'aaa21',12)<br />
　　insert into zj values(122,'aaa22',12)<br />
　　insert into zj values(123,'aaa23',12)<br />
　　--<br />
　　select bm,bmmc,sjbm,level<br />
　　from zj<br />
　　start with sjbm=0<br />
　　connect by prior bm = sjbm<br />
　　或者<br />
　　select bm,bmmc,sjbm,level<br />
　　from zj<br />
　　start with sjbm=0<br />
　　connect by sjbm = prior bm <br />
　　25、快照<br />
　　 create snapshot SNAPSHOT_NAME <br />
　　 [storage (storage parameter)]<br />
　　 　　 [refresh [fast\complete\force]<br />
　　 [start with START_DATE next NEXT_DATE]<br />
　　 as QUERY;<br />
　　 <br />
　　 create snapshot snapshot_to_study as select * from <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#84;&#65;&#66;&#76;&#69;&#95;&#78;&#65;&#77;&#69;&#64;&#116;&#111;&#95;&#115;&#116;&#117;&#100;&#121;">TABLE_NAME@to_study</a>;<br />
　　 创建角色<br />
　　 create role aa identified by aaa;<br />
　　 授权 grant create snapshot,alter snapshot to aaa;<br />
　　 grant aaa to emp;<br />
　　 create snapshot SNAPSHOT_TO_HTML refresh complete start with sysdate next <br />
　　 sysdate+5/(24*60*60) as select * from <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#97;&#64;&#116;&#111;&#95;&#104;&#116;&#109;&#108;">a@to_html</a>;<br />
　　 删除 drop snapshot snap_to_html<br />
　　 手工刷新快照,(调用DBMS_SNAPSHOT包中的refresh过程)DBMS_SNAPSHOT.refresh(snapshot_name,refresh_type);<br />
　　 begin<br />
　　 DBMS_SNAPSHOT.REFRESH('snap_to_html','c');<br />
　　 end;<br />
　　 对所有快照进行刷新<br />
　　 begin<br />
　　 DBMS_SNAPSHOT.REFRESH_ALL;<br />
　　 end;<br />
　　 怎样执行远程的内嵌过程<br />
　　 begin<br />
　　 <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#111;&#116;&#104;&#101;&#114;&#100;&#98;&#112;&#114;&#111;&#64;&#116;&#111;&#95;&#104;&#116;&#109;&#108;">otherdbpro@to_html</a>(参数);<br />
　　 end;<br />
　　26、用户管理<br />
　　 create a user: database authentication <br />
　　 sql&gt; create user juncky identified by oracle default tablespace users <br />
　　 sql&gt; temporary tablespace temp quota 10m on data password expire <br />
　　 sql&gt; [account lock|unlock] [profile profilename|default]; <br />
　　 &lt;1&gt;.查看当前用户的缺省表空间<br />
　　 SQL&gt;select username,default_tablespace from user_users;<br />
　　 &lt;2&gt;生成用户时指定缺省表空间<br />
　　 create user 用户名 identified by 口令 default tablespace 表空间名;<br />
　　 <br />
　　 &lt;3&gt;重新指定用户的缺省表空间<br />
　　 alter user 用户名 default tablespace 表空间名<br />
　　 &lt;4&gt;查看当前用户的角色<br />
　　 SQL&gt;select * from user_role_privs;<br />
　　 &lt;5&gt;查看当前用户的系统权限和表级权限<br />
　　 SQL&gt;select * from user_sys_privs;<br />
　　 SQL&gt;select * from user_tab_privs;<br />
　　 &lt;6&gt;查看用户下所有的表<br />
　　 SQL&gt;select * from user_tables;<br />
　　 &lt;7&gt; alter user语句的quota子句限制用户的磁盘空间<br />
　　 如:alter user jf quota 10M on system;<br />
　　27、查看放在ORACLE的内存区里的表 <br />
　　 SQL&gt;select table_name,cache from user_tables where instr(cache,'Y')&gt;0;<br />
　　28、约束条件<br />
　　 create table employee<br />
　　 (empno number(10) primary key,<br />
　　 name varchar2(40) not null,<br />
　　 deptno number(2) default 10,<br />
　　 salary number(7,2) check salary&lt;10000,<br />
　　 birth_date date,<br />
　　 soc_see_num char(9) unique,<br />
　　 foreign key(deptno) references dept.deptno)<br />
　　 tablespace users;<br />
　　 <br />
　　 关键字(primary key)必须是非空,表中记录的唯一性<br />
　　 not null 非空约束<br />
　　 default 缺省值约束<br />
　　 check 检查约束,使列的值符合一定的标准范围<br />
　　 unqiue 唯一性约束<br />
　　 foreign key 外部键约束<br />
　　29、查看创建视图的select语句<br />
　　 SQL&gt;set view_name,text_length from user_views;<br />
　　 SQL&gt;set long 2000; 说明：可以根据视图的text_length值设定set long 的大小<br />
　　 SQL&gt;select text from user_views where view_name=upper('&amp;view_name');<br />
　　30、查看同义词的名称<br />
　　 SQL&gt;select * from user_synonyms;<br />
　　31、用Sql语句实现查找一列中第N大值 <br />
　　select * from <br />
　　(select t.*,dense_rank() over (order by sal) rank from employee) <br />
　　where rank = N;<br />
　　32 虚拟自段<br />
　　 &lt;1&gt;. CURRVAL 和 nextval<br />
　　 为表创建序列<br />
　　 CREATE SEQUENCE EMPSEQ ... ;<br />
　　 SELECT empseq.currval FROM DUAL ;<br />
　　 自动插入序列的数值<br />
　　 INSERT INTO emp <br />
　　 VALUES (empseq.nextval, 'LEWIS', 'CLERK', <br />
　　 7902, SYSDATE, 1200, NULL, 20) ;<br />
　　 &lt;2&gt;. ROWNUM<br />
　　 按设定排序的行的序号<br />
　　 SELECT * FROM emp WHERE ROWNUM &lt; 10 ;<br />
　　 &lt;3&gt;. ROWID<br />
　　 返回行的物理地址<br />
　　 SELECT ROWID, ename FROM emp WHERE deptno = 20 ;<br />
　　33、对CLOB字段进行全文检索<br />
　　SELECT * FROM A WHERE dbms_lob.instr(a.a,'K',1,1)&gt;0;<br />
　　34. 特殊字符的插入，比如"&amp;" <br />
　　insert into a values (translate ('at{&amp;}t','at{}','at')); <br />
　　35.表管理<br />
　　 &lt;1&gt;.create a table <br />
　　 sql&gt; create table table_name (column datatype,column datatype]....) <br />
　　 sql&gt; tablespace tablespace_name [pctfree integer] [pctused integer] <br />
　　 sql&gt; [initrans integer] [maxtrans integer] <br />
　　 sql&gt; storage(initial 200k next 200k pctincrease 0 maxextents 50) <br />
　　 sql&gt; [logging|nologging] [cache|nocache] <br />
　　 &lt;2&gt;.copy an existing table <br />
　　 sql&gt; create table table_name [logging|nologging] as subquery <br />
　　 <br />
　　 &lt;3&gt; create table ... as 方式建表的时候，指定表参数<br />
　　 create table a<br />
　　 storage(<br />
　　 initial 1M /*第一次创建时分配空间*/<br />
　　 next 1M /*第一次分配的存储空间用完时在分配*/<br />
　　 )<br />
　　 as select * from b;<br />
　　 &lt;4&gt;.创建临时表<br />
　　 sql&gt; create global temporary table xay_temp as select * from xay; <br />
　　 on commit preserve rows/on commit delete rows <br />
　　 在Oracle中，可以创建以下两种临时表:<br />
　　 a 会话特有的临时表:<br />
　　 create global temporary table () on commit preserve rows;<br />
　　 会话指定，当中断会话时ORACLE将截断表<br />
　　 b 事务特有的临时表:<br />
　　 create global temporary table () on commit delete rows;<br />
　　 事务指定,每次提交后ORACLE将截断表（删除全部行） <br />
　　 c 说明<br />
　　 临时表只在当前连接内有效 <br />
　　临时表不建立索引,所以如果数据量比较大或进行多次查询时,不推荐使用 <br />
　　数据处理比较复杂的时候时表快,反之视图快点 <br />
　　在仅仅查询数据的时候建议用游标: open cursor for 'sql clause';<br />
　　 &lt;5&gt;<br />
　　 pctfree = (average row size - initial row size) *100 /average row size <br />
　　 pctused = 100-pctfree- (average row size*100/available data space) <br />
　　 &lt;6&gt;.change storage and block utilization parameter <br />
　　 sql&gt; alter table table_name pctfree=30 pctused=50 storage(next 500k <br />
　　 sql&gt; minextents 2 maxextents 100); <br />
　　 &lt;7&gt;.manually allocating extents <br />
　　 sql&gt; alter table table_name allocate extent(size 500k datafile 'c:/oracle/data.dbf'); <br />
　　 &lt;8&gt;.move tablespace <br />
　　 sql&gt; alter table employee move tablespace users; <br />
　　 &lt;9&gt;.deallocate of unused space <br />
　　 sql&gt; alter table table_name deallocate unused [keep integer] <br />
　　 &lt;10&gt;.drop a column <br />
　　 sql&gt; alter table table_name drop column comments cascade constraints checkpoint 1000; <br />
　　 alter table table_name drop columns continue; <br />
　　 &lt;11&gt;.mark a column as unused <br />
　　 sql&gt; alter table table_name set unused column comments cascade constraints; <br />
　　 alter table table_name drop unused columns checkpoint 1000; <br />
　　 alter table orders drop columns continue checkpoint 1000 <br />
　　 data_dictionary : dba_unused_col_tabs<br />
　　37. 中文是如何排序的？ <br />
　　Oracle9i之前，中文是按照二进制编码进行排序的。 <br />
　　在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值 <br />
　　SCHINESE_RADICAL_M 按照部首（第一顺序）、笔划（第二顺序）排序 <br />
　　SCHINESE_STROKE_M 按照笔划（第一顺序）、部首（第二顺序）排序 <br />
　　SCHINESE_PINYIN_M 按照拼音排序 <br />
　　38. 数据表中的字段最大数:<br />
　　表或视图中的最大列数为 1000<br />
　　39. oracle中的裸设备:<br />
　　 裸设备就是绕过文件系统直接访问的储存空间<br />
　　40. 在Oracle服务器上通过SQLPLUS查看本机IP地址 ? <br />
　　select sys_context('userenv','ip_address') from dual; <br />
　　如果是登陆本机数据库，只能返回127.0.0.1<br />
　　41. 在ORACLE中取毫秒? <br />
　　 9i之前不支持,9i开始有timestamp. <br />
　　 9i可以用select systimestamp from dual;<br />
　　42. 将N秒转换为时分秒格式？ <br />
　　 set serverout on <br />
　　 declare <br />
　　 N number := 1000000; <br />
　　 ret varchar2(100); <br />
　　 begin <br />
　　 ret := trunc(n/3600) || '小时' || to_char(to_date(mod(n,3600),'sssss'),'fmmi"分 "ss"秒"') ; <br />
　　 dbms_output.put_line(ret); <br />
　　 end; <br />
　　43、在某个用户下找所有的索引<br />
　　 select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name <br />
　　 from user_ind_columns, user_indexes <br />
　　 where user_ind_columns.index_name = user_indexes.index_name <br />
　　 and user_ind_columns.table_name = user_indexes.table_name <br />
　　 order by user_indexes.table_type, user_indexes.table_name, <br />
　　 user_indexes.index_name, column_position;<br />
　　44. not in的替代。<br />
　　 一般not in的效率比较低。特别是数据量大的时候，几乎不能执行。<br />
　　 用下面几种方式可以替换写法<br />
　　 比如要查询在fee_rev_info表中已经销户的用户（不在cm_user中的）(不过下面的例子不是很好，因为bill_id是cm_user的唯一索引）<br />
　　 select * from fee_rev_info where bill_id not in (select bill_id from cm_user) <br />
　　 &lt;1&gt; 用not exists<br />
　　 select * from fee_rev_info a where not exists (select 'p' from cm_user b where b.bill_id = a.bill_id)<br />
　　 &lt;2&gt; 用外连接(+)<br />
　　 select a.* from fee_rev_info a,cm_user b<br />
　　 where a.bill_id = b.bill_id (+)<br />
　　 and b.bill_id is null<br />
　　 &lt;3&gt; 用hash_aj<br />
　　 select /*+HASH_AJ*/* from fee_rev_info where bill_id not in (select bill_id from cm_user) <br />
　　45.怎么样查询特殊字符，如通配符%与_<br />
　　假如数据库中有表 STATIONTYPE,STATION_571 STATION_572 ... <br />
　　select * from tab where tname like 'STATION_%'<br />
　　会显示 STATIONTYPE,STATION_571 ... 可以用下面的语句<br />
　　select * from tab where tname like 'STATION\_%' escape'\'<br />
　　46.如果存在就更新，不存在就插入可以用一个语句实现吗<br />
　　9i已经支持了，是Merge，但是只支持select子查询，<br />
　　如果是单条数据记录，可以写作select .... from dual的子查询。<br />
　　语法为：<br />
　　MERGE INTO table<br />
　　USING data_source<br />
　　ON (condition)<br />
　　WHEN MATCHED THEN update_clause<br />
　　WHEN NOT MATCHED THEN insert_clause;<br />
　　如<br />
　　MERGE INTO cm_user_credit <br />
　　USING (select * from dual) ON (user_id =1302514690 )<br />
　　when MATCHED then update set credit_value = 1000<br />
when NOT MATCHED then insert (user_id,acc_id,bill_id,plan_id,region_code,credit_value) values(1302514690,1305032158,'13857141218',10070247,'571',1000);<br />
　　47.怎么实现一条记录根据条件多表插入<br />
　　9i以上可以通过Insert all语句完成，仅仅是一个语句，如：<br />
　　INSERT ALL<br />
　　WHEN (id=1) THEN<br />
　　INTO table_1 (id, name)<br />
　　values(id,name)<br />
　　WHEN (id=2) THEN<br />
　　INTO table_2 (id, name)<br />
　　values(id,name)<br />
　　ELSE<br />
　　INTO table_other (id, name)<br />
　　values(id, name)<br />
　　SELECT id,name<br />
　　FROM a;<br />
　　如果没有条件的话，则完成每个表的插入，如<br />
　　INSERT ALL<br />
　　INTO table_1 (id, name)<br />
　　values(id,name)<br />
　　INTO table_2 (id, name)<br />
　　values(id,name)<br />
　　INTO table_other (id, name)<br />
　　values(id, name)<br />
　　SELECT id,name<br />
　　FROM a;<br />
　　48.如何实现行列转换<br />
　　&lt;1&gt;、固定列数的行列转换<br />
　　如<br />
　　student subject grade<br />
　　---------------------------<br />
　　student1 语文 80<br />
　　student1 数学 70<br />
　　student1 英语 60<br />
　　student2 语文 90<br />
　　student2 数学 80<br />
　　student2 英语 100<br />
　　...<br />
　　转换为 <br />
　　语文 数学 英语<br />
　　student1 80 70 60<br />
　　student2 90 80 100<br />
　　...<br />
　　语句如下：<br />
　　select student,sum(decode(subject,'语文', grade,null)) "语文",<br />
　　sum(decode(subject,'数学', grade,null)) "数学",<br />
　　sum(decode(subject,'英语', grade,null)) "英语"<br />
　　from table<br />
　　group by student<br />
　　&lt;2&gt;、不定列行列转换<br />
　　如<br />
　　c1 c2<br />
　　--------------<br />
　　1 我<br />
　　1 是<br />
　　1 谁<br />
　　2 知<br />
　　2 道<br />
　　3 不<br />
　　...<br />
　　转换为<br />
　　1 我是谁<br />
　　2 知道<br />
　　3 不<br />
　　这一类型的转换必须借助于PL/SQL来完成，这里给一个例子<br />
　　CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER) <br />
　　RETURN VARCHAR2 <br />
　　IS <br />
　　Col_c2 VARCHAR2(4000); <br />
　　BEGIN<br />
　　FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP <br />
　　Col_c2 := Col_c2||cur.c2; <br />
　　END LOOP; <br />
　　Col_c2 := rtrim(Col_c2,1);<br />
　　RETURN Col_c2; <br />
　　END;<br />
　　/<br />
　　SQL&gt; select distinct c1 ,get_c2(c1) cc2 from table;即可<br />
　　--例子：<br />
　　create table okcai_1<br />
　　(<br />
　　user_id varchar2(10),<br />
　　user_number varchar2(10),<br />
　　user_num number(8)<br />
　　)<br />
　　user_id user_number user_num<br />
　　---------------------<br />
　　1 123 2<br />
　　1 456 5<br />
　　1 789 6<br />
　　2 11 2<br />
　　2 22 3<br />
　　2 33 4<br />
　　2 44 5<br />
　　2 55 6<br />
　　2 66 7<br />
　　2 77 8<br />
　　3 1234 1<br />
　　3 5678 2<br />
　　方式一：<br />
　　create or replace function get_col(<br />
　　 p_userId number,<br />
　　 p_col number<br />
　　) return varchar<br />
　　as<br />
　　v_tmp varchar2(255);<br />
　　begin<br />
　　 select user_number||chr(9)||user_num into v_tmp<br />
　　 from <br />
　　 (select user_number,user_num,rownum row_id <br />
　　 from okcai_1<br />
　　 where user_id = p_userId) a<br />
　　 where row_id = p_col;<br />
　　 return ltrim(v_tmp);<br />
　　 --return v_tmp;<br />
　　end;<br />
　　然后<br />
　　select distinct user_id,get_col(user_id,1),get_col(user_id,2),get_col(user_id,3) .... from okcai_1<br />
　　方式二：<br />
　　create or replace function get_col(<br />
　　 p_userId number,<br />
　　 p_col number<br />
　　) return varchar<br />
　　as<br />
　　v_tmp varchar2(255);<br />
　　begin<br />
　　 select user_number||chr(9)||user_num into v_tmp<br />
　　 from <br />
　　 (select user_number,user_num,rownum row_id <br />
　　 from okcai_1<br />
　　 where user_id = p_userId) a<br />
　　 where row_id = p_col;<br />
　　 return ltrim(v_tmp);<br />
　　 --return v_tmp;<br />
　　end;<br />
　　select distinct user_id,get_col_new(user_id) from okcai_1;<br />
　　49.怎么设置存储过程的调用者权限<br />
　　普通存储过程都是所有者权限，如果想设置调用者权限，请参考如下语句<br />
　　create or replace<br />
　　procedure ...()<br />
　　AUTHID CURRENT_USER<br />
　　As<br />
　　begin<br />
　　...<br />
　　end;<br />
　　50.Oracle有哪些常见关键字<br />
　　详细信息可以查看v$reserved_words视图<br />
　　51.怎么查看数据库参数<br />
　　&lt;1&gt; show parameter 参数名<br />
　　如通过show parameter spfile可以查看9i是否使用spfile文件<br />
　　其中参数名是可以匹配的。<br />
　　比如show parameter cursor ,则会显示跟cursor相关的参数<br />
　　&lt;2&gt;<br />
　　select * from v$parameter<br />
　　&lt;3&gt;<br />
　　除了这部分参数，Oracle还有大量隐含参数，可以通过如下语句查看:<br />
　　SELECT NAME <br />
　　,VALUE <br />
　　,decode(isdefault, 'TRUE','Y','N') as "Default" <br />
　　,decode(ISEM,'TRUE','Y','N') as SesMod <br />
　　,decode(ISYM,'IMMEDIATE', 'I', <br />
　　'DEFERRED', 'D', <br />
　　'FALSE', 'N') as SysMod <br />
　　,decode(IMOD,'MODIFIED','U', <br />
　　'SYS_MODIFIED','S','N') as Modified <br />
　　,decode(IADJ,'TRUE','Y','N') as Adjusted <br />
　　,description <br />
　　FROM ( --GV$SYSTEM_PARAMETER <br />
　　SELECT x.inst_id as instance <br />
　　,x.indx+1 <br />
　　,ksppinm as NAME <br />
　　,ksppity <br />
　　,ksppstvl as VALUE <br />
　　,ksppstdf as isdefault <br />
　　,decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE') as ISEM <br />
　　,decode(bitand(ksppiflg/65536,3), <br />
　　1,'IMMEDIATE',2,'DEFERRED','FALSE') as ISYM <br />
　　,decode(bitand(ksppstvf,7),1,'MODIFIED','FALSE') as IMOD <br />
　　,decode(bitand(ksppstvf,2),2,'TRUE','FALSE') as IADJ <br />
　　,ksppdesc as DESCRIPTION <br />
　　FROM x$ksppi x <br />
　　,x$ksppsv y <br />
　　WHERE x.indx = y.indx <br />
　　AND substr(ksppinm,1,1) = '_' <br />
　　AND x.inst_id = USERENV('Instance') <br />
　　) <br />
　　ORDER BY NAME<br />
　　52.怎样建立基于函数索引<br />
　　8i以上版本，确保<br />
　　Query_rewrite_enabled=true<br />
　　Query_rewrite_integrity=trusted<br />
　　Compatible=8.1.0以上<br />
　　Create index indexname on table (function(field));<br />
　　53.怎么样移动表或表分区<br />
　　[A]移动表的语法<br />
　　Alter table tablename move<br />
　　[Tablespace new_name<br />
　　Storage(initial 50M next 50M <br />
　　pctincrease 0 pctfree 10 pctused 50 initrans 2) nologging]<br />
　　移动分区的语法<br />
　　alter table tablename move (partition partname)<br />
　　[update global indexes]<br />
　　之后之后必须重建索引<br />
　　Alter index indexname rebuild<br />
　　如果表有Lob段，那么正常的Alter不能移动Lob段到别的表空间，而仅仅是移动了表段，可以采用如下的方法移动Lob段<br />
　　alter table tablename move <br />
　　lob(lobsegname) store as (tablespace newts);<br />
　　54.怎么样修改表的列名<br />
　　[A]9i以上版本可以采用rname命令<br />
　　ALTER TABLE UserName.TabName <br />
　　RENAME COLUMN SourceColumn TO DestColumn<br />
　　9i以下版本可以采用create table &#8230;&#8230; as select * from SourceTable的方式。<br />
　　另外，8i以上可以支持删除列了<br />
　　ALTER TABLE UserName.TabName <br />
　　SET UNUSED (ColumnName) CASCADE CONSTRAINTS<br />
　　ALTER TABLE UserName.TabName <br />
　　DROP (ColumnName) CASCADE CONSTRAINTS<br />
　　55.case的用法<br />
　　在sql语句中<br />
　　CASE test_value<br />
　　WHEN expression1 THEN value1<br />
　　[[WHEN expression2 THEN value2] [...]]<br />
　　[ELSE default_value]<br />
　　END <br />
　　比如1<br />
　　SELECT last_name, job_id, salary<br />
　　 CASE job_id <br />
　　 WHEN 'IT_PROG' THEN 1.10*salary<br />
　　 WHEN 'ST_CLERK' THEN 1.15*salary<br />
　　 WHEN 'SA_REP' THEN 1.20*salary<br />
　　 ELSE salary END "REVISED_SALARY"<br />
　　FROM employees <br />
　　比如2<br />
　　select <br />
　　 case<br />
　　 when real_charge&gt;=20000 and real_charge&lt;30000 then 5000<br />
　　 when real_charge&gt;=30000 and real_charge&lt;40000 then 9000<br />
　　 when real_charge&gt;=40000 and real_charge&lt;50000 then 10000<br />
　　 when real_charge&gt;=50000 and real_charge&lt;60000 then 14000<br />
　　 when real_charge&gt;=60000 and real_charge&lt;70000 then 18000<br />
　　 when real_charge&gt;=70000 and real_charge&lt;80000 then 19000<br />
　　 when real_charge&gt;=80000 and real_charge&lt;90000 then 24000<br />
　　 when real_charge&gt;=90000 and real_charge&lt;100000 then 27000 <br />
　　 when real_charge&gt;=100000 and real_charge&lt;110000 then 27000<br />
　　 when real_charge&gt;=110000 and real_charge&lt;120000 then 29000 <br />
　　 when real_charge&gt;=120000 then 36000<br />
　　 else<br />
　　 0 <br />
　　 end ,acc_id,user_id,real_charge from okcai_jh_charge_200505<br />
　　在存储过程中<br />
　　 case v_strGroupClassCode<br />
　　 when '1' then<br />
　　 v_nAttrNum := v_nAttrNum + 300;<br />
　　 v_strAttrFlag := '1'||substr(v_strAttrFlag,2,7);<br />
　　 when '2' then<br />
　　 v_nAttrNum := v_nAttrNum + 200;<br />
　　 v_strAttrFlag := '2'||substr(v_strAttrFlag,2,7);<br />
　　 else<br />
　　 NULL;<br />
　　 end case;<br />
　　注意的是存储过程和sql语句有的细微差别是用end case，而不是end。语句后面跟";" 
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/153095.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-10-15 21:26 <a href="http://www.blogjava.net/WshmAndLily/articles/153095.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE的基本语法集锦</title><link>http://www.blogjava.net/WshmAndLily/articles/144115.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Mon, 10 Sep 2007 15:16:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/144115.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/144115.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/144115.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/144115.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/144115.html</trackback:ping><description><![CDATA[--&nbsp;表<br />
create&nbsp;table&nbsp;test&nbsp;(names&nbsp;varchar2(12),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dates&nbsp;date,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num&nbsp;&nbsp;&nbsp;int,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dou&nbsp;&nbsp;&nbsp;double);<br />
--&nbsp;视图<br />
create&nbsp;or&nbsp;replace&nbsp;view&nbsp;vi_test&nbsp;as<br />
select&nbsp;*&nbsp;from&nbsp;test;<br />
<br />
--&nbsp;同义词<br />
create&nbsp;or&nbsp;replace&nbsp;synonym&nbsp;aa<br />
for&nbsp;dbusrcard001.aa;<br />
<br />
--&nbsp;存储过程<br />
create&nbsp;or&nbsp;replace&nbsp;produce&nbsp;dd(v_id&nbsp;in&nbsp;employee.empoy_id%type)<br />
as<br />
begin<br />
&nbsp;&nbsp;&nbsp;<br />
end<br />
dd;<br />
<br />
--&nbsp;函数<br />
create&nbsp;or&nbsp;replace&nbsp;function&nbsp;ee(v_id&nbsp;in&nbsp;employee%rowtype)&nbsp;return&nbsp;varchar(15)<br />
is<br />
var_test&nbsp;varchar2(15);<br />
begin<br />
&nbsp;&nbsp;return&nbsp;var_test;<br />
exception&nbsp;when&nbsp;others&nbsp;then<br />
&nbsp;&nbsp;&nbsp;<br />
end<br />
<br />
--&nbsp;三种触发器的定义<br />
create&nbsp;or&nbsp;replace&nbsp;trigger&nbsp;ff<br />
alter&nbsp;delete<br />
on&nbsp;test<br />
for&nbsp;each&nbsp;row<br />
declare<br />
begin<br />
&nbsp;&nbsp;&nbsp;delete&nbsp;from&nbsp;test;<br />
&nbsp;&nbsp;&nbsp;if&nbsp;sql%rowcount&nbsp;&lt;&nbsp;0&nbsp;or&nbsp;sql%rowcount&nbsp;is&nbsp;null&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rais_replaction_err(-20004,"错误")<br />
&nbsp;&nbsp;&nbsp;end&nbsp;if<br />
end<br />
<br />
<br />
create&nbsp;or&nbsp;replace&nbsp;trigger&nbsp;gg<br />
alter&nbsp;insert<br />
on&nbsp;test<br />
for&nbsp;each&nbsp;row<br />
declare<br />
begin<br />
&nbsp;&nbsp;&nbsp;if&nbsp;:old.names&nbsp;=&nbsp;:new.names&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raise_replaction_err(-2003,"编码重复");<br />
&nbsp;&nbsp;&nbsp;end&nbsp;if<br />
end<br />
<br />
<br />
create&nbsp;or&nbsp;replace&nbsp;trigger&nbsp;hh<br />
for&nbsp;update<br />
on&nbsp;test<br />
for&nbsp;each&nbsp;row<br />
declare<br />
begin<br />
&nbsp;&nbsp;if&nbsp;updating&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;:old.names&nbsp;&lt;&gt;&nbsp;:new.names&nbsp;then<br />
&nbsp;reaise_replaction_err(-2002,"关键字不能修改")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if<br />
&nbsp;&nbsp;end&nbsp;if<br />
end&nbsp;<br />
<br />
--&nbsp;定义游标<br />
declare<br />
&nbsp;&nbsp;&nbsp;cursor&nbsp;aa&nbsp;is<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;names,num&nbsp;from&nbsp;test;<br />
begin<br />
&nbsp;&nbsp;&nbsp;for&nbsp;bb&nbsp;in&nbsp;aa<br />
&nbsp;&nbsp;&nbsp;loop<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;bb.names&nbsp;=&nbsp;"ORACLE"&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if<br />
&nbsp;&nbsp;&nbsp;end&nbsp;loop;<br />
&nbsp;&nbsp;&nbsp;<br />
end<br />
<br />
--&nbsp;速度优化，前一语句不后一语句的速度快几十倍<br />
select&nbsp;names,dates&nbsp;<br />
from&nbsp;test,b<br />
where&nbsp;test.names&nbsp;=&nbsp;b.names(+)&nbsp;and<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.names&nbsp;is&nbsp;null&nbsp;and<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.dates&nbsp;&gt;&nbsp;date('2003-01-01','yyyy-mm-dd')<br />
<br />
&nbsp;<br />
select&nbsp;names,dates<br />
from&nbsp;test&nbsp;<br />
where&nbsp;names&nbsp;not&nbsp;in&nbsp;(&nbsp;select&nbsp;names&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;b<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;dates&nbsp;&gt;&nbsp;to_date('2003-01-01','yyyy-mm-dd'))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
--&nbsp;查找重复记录<br />
select&nbsp;names,num&nbsp;<br />
from&nbsp;test&nbsp;<br />
where&nbsp;rowid&nbsp;!=&nbsp;(select&nbsp;max(rowid)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;test&nbsp;b&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;b.names&nbsp;=&nbsp;test.names&nbsp;and<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.num&nbsp;=&nbsp;test.num)<br />
<br />
<br />
--&nbsp;查找表TEST中时间最新的前10条记录<br />
select&nbsp;*&nbsp;from&nbsp;(select&nbsp;*&nbsp;from&nbsp;test&nbsp;order&nbsp;by&nbsp;dates&nbsp;desc)&nbsp;where&nbsp;rownum&nbsp;&lt;&nbsp;11<br />
<br />
--&nbsp;序列号的产生<br />
create&nbsp;sequence&nbsp;row_id<br />
minvalue&nbsp;1<br />
maxvalue&nbsp;9999999999999999999999<br />
start&nbsp;with&nbsp;1<br />
increment&nbsp;by&nbsp;1<br />
<br />
insert&nbsp;into&nbsp;test&nbsp;values(row_id.nextval,....)&nbsp;<br />
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/144115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-09-10 23:16 <a href="http://www.blogjava.net/WshmAndLily/articles/144115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用java调用oracle存储过程总结</title><link>http://www.blogjava.net/WshmAndLily/articles/143440.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Fri, 07 Sep 2007 07:48:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/143440.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/143440.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/143440.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/143440.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/143440.html</trackback:ping><description><![CDATA[<p><span>一：无返回值的存储过程</span> </p>
<p><span>存储过程为：</span> </p>
<p><span>CREATE OR REPLACE PROCEDURE TESTA(PARA<ST1:CHMETCNV unitname="in" sourcevalue="1" hasspace="True" negative="False" numbertype="1" tcsc="0">1 IN</ST1:CHMETCNV> VARCHAR2,PARA<ST1:CHMETCNV unitname="in" sourcevalue="2" hasspace="True" negative="False" numbertype="1" tcsc="0">2 IN</ST1:CHMETCNV> VARCHAR2)<span>&nbsp;&nbsp;</span>AS</span> </p>
<p><span>BEGIN </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;</span>INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);</span> </p>
<p><span>END TESTA;</span> </p>
<p><span>然后呢，在</span><span>java</span><span>里调用时就用下面的代码：</span> </p>
<p><span>package com.hyq.src;</span> </p>
<p></p>
<p><span>import java.sql.*;</span> </p>
<p><span>import java.sql.ResultSet;</span> </p>
<p></p>
<p><span>public class TestProcedureOne {</span> </p>
<p><span><span>&nbsp;&nbsp;</span>public TestProcedureOne() {</span> </p>
<p><span><span>&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;</span>public static void main(String[] args ){</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>String driver = "oracle.jdbc.driver.OracleDriver";</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: hyq ";</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>Statement stmt = null;</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>ResultSet rs = null;</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>Connection conn = null;</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>CallableStatement cstmt = null;</span> </p>
<p></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>try {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Class.forName(driver);</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>conn =<span>&nbsp;&nbsp;</span>DriverManager.getConnection(strUrl, " hyq ", " hyq ");</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>CallableStatement proc = null;</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>proc = conn.prepareCall("{ call HYQ.TESTA(?,?) }");</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>proc.setString(1, "100");</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>proc.setString(2, "TestOne");</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>proc.execute();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>catch (SQLException ex2) {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>ex2.printStackTrace();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>catch (Exception ex2) {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>ex2.printStackTrace();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>finally{</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>try {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>if(rs != null){</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>rs.close();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>if(stmt!=null){</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>stmt.close();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>if(conn!=null){</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>conn.close();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>catch (SQLException ex1) {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;</span>}</span> </p>
<p><span>}</span> </p>
<p><span>当然了，这就先要求要建张表</span><span>TESTTB,</span><span>里面两个字段（</span><span>I_ID</span><span>，</span><span>I_NAME</span><span>）。</span> </p>
<p><span>二：有返回值的存储过程（非列表）</span> </p>
<p><span>存储过程为：</span> </p>
<p><span>CREATE OR REPLACE PROCEDURE TESTB(PARA<ST1:CHMETCNV unitname="in" sourcevalue="1" hasspace="True" negative="False" numbertype="1" tcsc="0">1 IN</ST1:CHMETCNV> VARCHAR2,PARA2 OUT VARCHAR2)<span>&nbsp;&nbsp;</span>AS</span> </p>
<p><span>BEGIN </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;</span>SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1; </span></p>
<p><span>END TESTB;</span> </p>
<p><span>在</span><span>java</span><span>里调用时就用下面的代码：</span> </p>
<p><span>package com.hyq.src;</span> </p>
<p></p>
<p><span>public class TestProcedureTWO {</span> </p>
<p><span><span>&nbsp;&nbsp;</span>public TestProcedureTWO() {</span> </p>
<p><span><span>&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;</span>public static void main(String[] args ){</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>String driver = "oracle.jdbc.driver.OracleDriver";</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>Statement stmt = null;</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>ResultSet rs = null;</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>Connection conn = null;</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>try {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Class.forName(driver);</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>conn =<span>&nbsp;&nbsp;</span>DriverManager.getConnection(strUrl, " hyq ", " hyq ");</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>CallableStatement proc = null;</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>proc = conn.prepareCall("{ call HYQ.TESTB(?,?) }");</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>proc.setString(1, "100");</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>proc.registerOutParameter(2, Types.VARCHAR);</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>proc.execute();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>String testPrint = proc.getString(2);</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>System.out.println("=testPrint=is="+testPrint);</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>catch (SQLException ex2) {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>ex2.printStackTrace();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>catch (Exception ex2) {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>ex2.printStackTrace();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>finally{</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>try {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>if(rs != null){</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>rs.close();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>if(stmt!=null){</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>stmt.close();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>if(conn!=null){</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>conn.close();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>catch (SQLException ex1) {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;</span>}</span> </p>
<p><span>}</span> </p>
<p></p>
<p><span>}</span> </p>
<p><span>注意，这里的</span><span>proc.getString(2)</span><span>中的数值</span><span>2</span><span>并非任意的，而是和存储过程中的</span><span>out</span><span>列对应的，如果</span><span>out</span><span>是在第一个位置，那就是</span><span>proc.getString(1)</span><span>，如果是第三个位置，就是</span><span>proc.getString(3)</span><span>，当然也可以同时有多个返回值，那就是再多加几个</span><span>out</span><span>参数了。</span> </p>
<p><span>三：返回列表</span> </p>
<p><span>由于</span><span>oracle</span><span>存储过程没有返回值，它的所有返回值都是通过</span><span>out</span><span>参数来替代的，列表同样也不例外，但由于是集合，所以不能用一般的参数，必须要用</span><span>pagkage</span><span>了</span><span>.</span><span>所以要分两部分，</span> </p>
<p><span><span>1，<span>&nbsp;&nbsp;</span></span><span>建一个程序包。如下：</span> </span></p>
<p><span>CREATE OR REPLACE PACKAGE TESTPACKAGE AS</span> </p>
<p><span>TYPE Test_CURSOR IS REF CURSOR;</span> </p>
<p><span>end TESTPACKAGE;</span> </p>
<p><span>2</span><span>，建立</span><span>存储过程，存储过程为：</span> </p>
<p><span>CREATE OR REPLACE PROCEDURE TESTC</span><span>(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS </span></p>
<p><span>BEGIN</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB;</span> </p>
<p><span>END TESTC;</span> </p>
<p><span>可以看到，它是把游标（可以理解为一个指针），作为一个</span><span>out </span><span>参数来返回值的。</span> </p>
<p><span>在</span><span>java</span><span>里调用时就用下面的代码：</span> </p>
<p><span>package com.hyq.src;</span> </p>
<p><span>import java.sql.*;</span> </p>
<p><span>import java.io.OutputStream;</span> </p>
<p><span>import java.io.Writer;</span> </p>
<p><span>import java.sql.PreparedStatement;</span> </p>
<p><span>import java.sql.ResultSet;</span> </p>
<p><span>import oracle.jdbc.driver.*;</span> </p>
<p></p>
<p></p>
<p><span>public class TestProcedureTHREE {</span> </p>
<p><span><span>&nbsp;&nbsp;</span>public TestProcedureTHREE() {</span> </p>
<p><span><span>&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;</span>public static void main(String[] args ){</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>String driver = "oracle.jdbc.driver.OracleDriver";</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>Statement stmt = null;</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>ResultSet rs = null;</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>Connection conn = null;</span> </p>
<p></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>try {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Class.forName(driver);</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>conn =<span>&nbsp;&nbsp;</span>DriverManager.getConnection(strUrl, "hyq", "hyq");</span> </p>
<p></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>CallableStatement proc = null;</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>proc = conn.prepareCall("{ call hyq.testc(?) }");</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>proc.execute();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>rs = (ResultSet)proc.getObject(1);</span> </p>
<p></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>while(rs.next())</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>{</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>System.out.println("&lt;tr&gt;&lt;td&gt;" + rs.getString(1) + "&lt;/td&gt;&lt;td&gt;"+rs.getString(2)+"&lt;/td&gt;&lt;/tr&gt;");</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>catch (SQLException ex2) {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>ex2.printStackTrace();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>catch (Exception ex2) {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>ex2.printStackTrace();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>finally{</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>try {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>if(rs != null){</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>rs.close();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>if(stmt!=null){</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>stmt.close();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>if(conn!=null){</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>conn.close();</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>catch (SQLException ex1) {</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>}</span> </p>
<p><span><span>&nbsp;&nbsp;</span>}</span> </p>
<p><span>}</span> </p>
<p><span>在这里要注意，在执行前一定要先把</span><span>oracle</span><span>的驱动包放到</span><span>class</span><span>路径里，否则会报错的。</span> </p>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/143440.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-09-07 15:48 <a href="http://www.blogjava.net/WshmAndLily/articles/143440.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle9i的简化SQL语法</title><link>http://www.blogjava.net/WshmAndLily/articles/143429.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Fri, 07 Sep 2007 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/143429.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/143429.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/143429.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/143429.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/143429.html</trackback:ping><description><![CDATA[<p>Oracle9i的简化SQL语法<br />
<br />
</p>
<p>Oracle对Oracle9i SQL 做了一些很重要的改进，包括一些令人兴奋的新特点，支持1：5的数量级和ISO99中的SQL标准。作为Oracle的补充，它包括以下新的TABLE JOIN的句法结构：</p>
<p>CROSS　IN——它在两个表格中创建了一个卡迪尔列，就象是在Oracle8i中没写WHERE时那样。</p>
<p>NATURAL JOIN——这是一个很有用的Oracle9i的句法，它通过从WHERE子句中移动连接标准来改善SQL的稳定性 </p>
<p>USING子句——它可以通过名字来具体指定连接 </p>
<p>ON子句——这个句法允许在两个表格中为连接具体指定栏目的名头 <br />
LEFT OUTER JOIN——它返回表格中左边的行和右边的数值，如果没有搭配的行的话，则返回零 </p>
<p>RIGHT OUTER JOIN——它返回表格中右边的行和左边的数值，如果没有搭配的行的话，则返回零 </p>
<p>FULL OUTER JOIN——它返回的是两个表格中所有的行，用零填满每一个空格。这在Oracle8i中则没有相应的此种句法 </p>
<p>大多数改进都是为了让那些非Oracle的请求以快速的进入Oracle数据库而引进的，并且必须记住这些只是句法上的不同，ISO99标准并没有给Oracle9i SQL带来任何新的功能。<br />
<br />
The CROSS JOIN <br />
在Oracle中，CROSS JOIN产生了一个&#8220;卡迪尔的产物（Cartesian product）&#8221;，就象是在连接两个表格时忘记加入一个WHERE子句一样 <br />
select last_name,dept_id <br />
from emp,depts; </p>
<p>在Oracle9i中，我们使用CROSS JOIN 来达到相同的结果 <br />
select last_name.dept_id <br />
from emp <br />
CROSS JOIN dept; </p>
<p>NATURAL JOIN </p>
<p><br />
我喜欢NATURAL JOIN的原因在于它能够通过在两个表格中配对的栏目的名头来自动的检查join。它同时还简化了Oracle9i SQL,由于where子句仅仅只能过滤谓语，当然，NATURAL JOIN要求在每一个表格中的栏目的名字相同。很有意思的是，这种特性甚至在没有主要的或是外来的关键词作为参考是也能起作用 </p>
<p>&nbsp;</p>
<p>Oracle8i, <br />
Select book_title, sum(quantity) <br />
From book, sales <br />
Where book.book_id = sales.book_id <br />
group by book_title; </p>
<p>Oracle9i <br />
Select book_title, sum(quantity) <br />
from book <br />
natural join sales <br />
group by book_title; </p>
<p>USING子句 <br />
假如几个栏目有同样的名字，而你又不想用所有的这些栏目来连接的时候，你就可以用USING子句。在USING子句中所列的栏目的句子中不会有任何的修饰词，包括where子句也不会有 <br />
Oracle8i <br />
select dept_id, city <br />
from departments, locations <br />
where departments.location_id = location.location_id; </p>
<p>Oracle9i <br />
select department_name, city <br />
from departments <br />
JOIN locations <br />
USING (location_id);</p>
<p>ON子句 <br />
ON子句被用于当在两个表格中的栏目名字不搭配时来连接表格。而连接条件就是where子句中的过滤条件 <br />
Oracle8i <br />
select department_name, city <br />
from department, location <br />
where department.location_id = location.loc_id; </p>
<p>Oracle9i <br />
select department_name, city <br />
from department d <br />
JOIN location l <br />
ON (d.location_id = l.id); </p>
<p>易变的连接 <br />
易变的连接就是两个以上的表格被连接所用的。ISO SQL 1999标准通常假设表格从左至右连接，连接的条件是能够为现在的连接或以前的与左边的连接相关联的栏目提供参考。 <br />
Oracle8i <br />
select emp_id, city_name, dept_name <br />
from location l, department d, emp e <br />
where d.location_id = l.location_id <br />
and d.department_id = e.department_id; </p>
<p>Oracle9i <br />
select emp_id, city_name, dept_name <br />
from locations l <br />
JOIN departments d ON (d.location_id = l.location_id) <br />
JOIN employees e ON (d.department_id = e.department_id); </p>
<p><br />
新的OUTER JOIN句法 </p>
<p>&nbsp;</p>
<p>ISO99标准把复杂的加号从Oracle outer join中拿出去，并使得outer join SQL更容易理解。</p>
<p>LEFT OUTER JOIN <br />
在LEFT OUTER JOIN中，会返回所有左边表格中的行，甚至在被连接的表格中没有可配对的栏目的情况下也如此。在下边的例子中，返回了所有雇员的姓，甚至包括了那些没有分配到部门的雇员。 <br />
Oracle8i <br />
select last_name, dept_id <br />
from emp e, dept d <br />
where e.department_id = d.department_id(+); </p>
<p>Oracle9i <br />
select last_name, dept_id <br />
from emp <br />
LEFT OUTER JOIN Dept <br />
ON e.dept_id = d.dept_id; </p>
<p>RIGHT OUTER JOIN <br />
在RIGHT OUTER JOIN中返回的是表格中所有右边的行，甚至在被连接的表格中没有可配对的栏目的情况下也如此。在这个例子中，返回了所有部门的ID,包括那些没有一个雇员的的部门。 <br />
Oracle8i <br />
select last_name, d.dept_id <br />
from employees e, departments d <br />
where e.department_id(+) = d.department_id; </p>
<p>Oracle9i <br />
select last_name, d.dept_id <br />
from employees e <br />
RIGHT OUTER JOIN departments d <br />
ON (e.department_id = d.department_id); </p>
<p><br />
总结</p>
<p>ISO99标准是Oracle改进SQL工具的另一个例子。NATURAL JOIN LEFT OUTER JOIN 和 RIGHT OUTER JOIN是这些改进中最受欢迎的，它们分别简化了SQL句法以及消除了对于复杂句法（比如+）的需要。 </p>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/143429.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-09-07 15:31 <a href="http://www.blogjava.net/WshmAndLily/articles/143429.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle sql语句精讲</title><link>http://www.blogjava.net/WshmAndLily/articles/138741.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Thu, 23 Aug 2007 01:29:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/138741.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/138741.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/138741.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/138741.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/138741.html</trackback:ping><description><![CDATA[表 ：建立表主要指定义下列信息：<br>&nbsp; &nbsp; &nbsp;列定义<br>&nbsp; &nbsp; &nbsp;完整性约束<br>&nbsp; &nbsp; &nbsp;表所在表空间<br>&nbsp; &nbsp; &nbsp;存储特性<br>&nbsp; &nbsp; &nbsp;可选择的聚集<br>&nbsp; &nbsp; &nbsp;从一查询获得数据<br>语法如下：<br>CREATE TABLE tablename (column1 datatype [DEFAULT expression] [constraint], column1 datatype [DEFAULT expression] [constraint], &#8230;&#8230;)<br>&nbsp; &nbsp; &nbsp;例如：<br>&nbsp; &nbsp; &nbsp;SQL&gt; create table serv (serv_id number(10),serv_seq_nbr number(3))<br>2 &nbsp; &nbsp; &nbsp;tablespace data_bill;<br>视图<br>视图是一个逻辑表，它允许操作者从其它表或视图存取数据，视图本身不包含数据。视图所基于的表称为基表。<br>引入视图有下列作用：<br>&nbsp; &nbsp; &nbsp;提供附加的表安全级，限制存取基表的行或/和列集合。<br>&nbsp; &nbsp; &nbsp;隐藏数据复杂性。<br>&nbsp; &nbsp; &nbsp;为数据提供另一种观点。<br>&nbsp; &nbsp; &nbsp;促使ORACLE的某些操作在包含视图的数据库上执行，而不在另一个数据库上执行。<br>2.1分组视图<br>[例1]简单的分组视图<br>SQL&gt; create or replace view dept_tot as <br>2 select a.dname dept,sum(b.sal) total_sal from scott.dept a,scott.emp b <br>3 where a.deptno=b.deptno group by a.dname;<br><br>查看已建立。<br>SQL&gt; select * from dept_tot;<br><br>DEPT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TOTAL_SAL<br>-------------- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ---------<br>ACCOUNTING &nbsp; &nbsp; &nbsp; 8750<br>RESEARCH &nbsp; &nbsp; &nbsp; &nbsp; 10875<br>SALES &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 9400<br>[例2]合计视图<br>[例]合计函数视图实例<br>SQL&gt; create or replace view emp_no1 as <br>2 select deptno,sum(sal) 工资和,sum(comm) 总和<br>3 from scott.emp group by deptno;<br>SQL&gt; select * from emp_no1;<br>DEPTNO &nbsp; 工资和 &nbsp; &nbsp; 总和<br>--------- --------- ---------<br>&nbsp; &nbsp; 10 &nbsp; &nbsp; 8750<br>&nbsp; &nbsp; 20 &nbsp; 10875<br>30 &nbsp; &nbsp; 9400 &nbsp; &nbsp; 2200<br>索引<br>索引是种数据库对象。对于在表或聚集的索引列上的每一值将包含一项，为行提供直接的快速存取。在下列情况ORACLE可利用索引改进性能：<br>&nbsp; &nbsp; &nbsp;按指定的索引列的值查找行。<br>&nbsp; &nbsp; &nbsp;按索引列的顺序存取表。<br>语法：<br>create index &lt;index_name&gt; on &lt;table_name(column1,column2&#8230;)&gt;<br>[storage语句] [其它语句];<br>例如：<br>SQL&gt; create index idx_serv_01 on serv(srev_id,serv_seq_nbr)<br>2 &nbsp; tablespace data_bill_idx<br>3 &nbsp; storage (initial 5m next 5m);<br>存储函数<br>语法：<br>create [or replace] function 函数名(参数1，参数2&#8230;&#8230;) RETURN 类型 IS | AS<br>&nbsp; &nbsp; &nbsp;[局部变量说明]<br>&nbsp; &nbsp; &nbsp;BEGIN<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;执行语句；<br>&nbsp; &nbsp; &nbsp;END；<br>[例子]：<br>建立oracle 的函数<br>create or replace FUNCTION SumDeptSalary(dept_no in number)<br>return number is<br>&nbsp; &nbsp; total number(11,2);<br>begin<br>select sum(sal) into total from emp where deptno=dept_no;<br>return(total);<br>end;<br>存储过程<br>语法：<br>create [or replace] procedure 函数名(参数1，参数2&#8230;&#8230;) IS | AS<br>&nbsp; &nbsp; &nbsp;[局部变量说明]<br>&nbsp; &nbsp; &nbsp;BEGIN<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;执行语句；<br>&nbsp; &nbsp; &nbsp;END；<br>[例子]<br>过程的输入、输出参数的用例<br>create or replace procedure RaiseSalary(RaiseRate in number,empnum in number,<br>outname out varchar2,outsal out number) is <br>begin<br>update emp set sal=sal*(1+RaiseRate);<br>select ename into outname from emp where empno=empnum;<br>select sal into outsal from emp where empno=empnum;<br>end;<br>函数pl/sql 中的过程参数调用示例<br>set serveroutput on; //显示变量值的属性<br>declare name varchar2(10);sal number;<br>begin<br>RaiseSalary(0.05,7566,name,sal);<br>dbms_output.put_line(name);<br>dbms_output.put_line(sal);<br>end;：<br>查找系统时间<br><br>select sysdate from dual;<br>系统日期的格式转换<br>select to_char(sysdate,'MM/DD/YYYY HH:MM:SS AM') from dual;<br>分解日期<br>年 select to_char(sysdate,'year') from dual;<br>月 select to_char(sysdate,'mon') from dual;<br>月中第几日 select to_char(sysdate,'dd') from dual;<br>一年中的第几星期 select to_char(sysdate,'ww') from dual;<br>季度 select to_char(sysdate,'q') from dual;<br>一年中的第几天 select to_char(sysdate,'ddd') from dual;<br>查询时间<br>testdate1 date <br>select * from testdate where to_char(trunc(testdate1),'yyyy/mm/dd')='2001/04/09'<br>oracle 中使用trunc()函数把所有日期的时间值设置为12:00AM，消除sysdata中的时间<br>trunc()函数可进行时间加减<br>在select中日期相减得出天数<br>select trunc(sysdate)-trunc(hiredate) from emp where trunc(sysdate)-trunc(hiredate)&gt;5000;<br>case 语句使用decode()函数替代<br><br>例如：select decode(deptno,10,'十',20,'二十',30,'三十') as chinesecode from emp;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 列名 &nbsp; 值 表示值<br>decode列乘积的应用<br>decode(Yjtx.Lb,0,Yprckmx.Ypsl*Xmxx.Xmpzlbl,1,Yprckmx.Ypsl*Xmxx.Xmpzlbl,2,Yprckmx.Ypsl) as Ypsl<br>使用decode函数计算<br>select sum(decode(deptno,20,1))-sum(decode(deptno,30,1)) as d from emp;<br><br>伪列<br>伪列不是表中真正的列,只是特征与列相同<br>---currval和nextval伪列<br>currval和nextval伪列与序列联合使用。currval伪列返回被引用的序列的当前值；<br>nextval伪列增加序列的值，并返回序列的新值。只能用于select values 子句和set 子句<br>表中主键列增加流水值<br>insert into employee <br>values(emp_id_seq.nextval,'stanton bernard');<br>emp_id_seq为序列<br>---rownum伪列<br>rownum伪列指出从表中检索数据的次序。例如，值为1的rownum表明该记录是从表中检索的第一条记录。<br>rownum伪列最常见的用途是用于where子句。例如<br>select * from emp where rownum &lt;10;<br>建立bh流水序列值<br>create sequence seqczyqx<br>start with 1<br>increment by 1<br>nocycle;<br>生成表中没有的列的方法<br>select 'testchar' as dd,sysdate deptno from emp,dual;<br>&nbsp; &nbsp; 字符值 &nbsp; 列名<br>select 2342345234 as dd,sysdate deptno from emp,dual;<br>&nbsp; &nbsp; 数值 &nbsp; &nbsp; 列名<br>________________________________________________________________________<br>返回字符串的一部分<br>select substr(ename,1,2) from emp;<br>-----------------------------------------------------------------------------------集合操作<br>select * from emp where deptno in(10,20);<br>-----------------------------------------------------------------------------------<br>在表中插入常量<br>insert into testdate select 1,sysdate,sysdate from dual;<br>-----------------------------------------------------------------------------------<br>在select中对多个变量赋值<br>SELECT SFBL ,DWBL into XMBL,DWBL FROM HZBL WHERE CFLBBM=CFLBBM AND HZLBBM=HZLBBM and Degree=Hzsf;<br>-----------------------------------------------------------------------------------<br>比较操作中的空问题<br>is null;is not null<br>使用nvl()函数<br>select count(*),nvl(comm_amt,0) from comm;<br>nvl函数用'0'值置换comm_amt表列中值为空的所有数据行<br>------------------------------------------------------------------------------<br>&#183; &nbsp; &nbsp; &nbsp;从另一张表改进得到<br>Sql语句：<br>Create Table &lt;新表&gt; As <br>&nbsp; Select &lt;列的列表&gt; From &lt;旧表&gt;<br>&nbsp; Where &lt;约束条件&gt;[可选]<br>&#183; &nbsp; &nbsp; &nbsp;拷贝表结构<br>&nbsp; Create Table &lt;表名&gt; As <br>&nbsp; Select &lt;列的列表&gt;From &lt;旧表&gt; <br>&nbsp; Where 1=2
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/138741.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-08-23 09:29 <a href="http://www.blogjava.net/WshmAndLily/articles/138741.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle常用SQL语句.其实一般上SQL语句是通用的</title><link>http://www.blogjava.net/WshmAndLily/articles/138740.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Thu, 23 Aug 2007 01:21:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/138740.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/138740.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/138740.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/138740.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/138740.html</trackback:ping><description><![CDATA[<p>1、连接 </p>
<p>SQL*Plus system/manager </p>
<p>
<p>2、显示当前连接用户 </p>
<p>SQL&gt; show user </p>
<p>
<p>3、查看系统拥有哪些用户 </p>
<p>SQL&gt; select * from all_users; </p>
<p>
<p>4、新建用户并授权 </p>
<p>SQL&gt; create user a identified by a;（默认建在SYSTEM表空间下） </p>
<p>SQL&gt; grant connect,resource to a; </p>
<p>
<p>5、连接到新用户 </p>
<p>SQL&gt; conn a/a </p>
<p>
<p>6、查询当前用户下所有对象 </p>
<p>SQL&gt; select * from tab; </p>
<p>
<p>7、建立第一个表 </p>
<p>SQL&gt; create table a(a number); </p>
<p>
<p>8、查询表结构 </p>
<p>SQL&gt; desc a </p>
<p>
<p>9、插入新记录 </p>
<p>SQL&gt; insert into a values(1); </p>
<p>
<p>10、查询记录 </p>
<p>SQL&gt; select * from a; </p>
<p>
<p>11、更改记录 </p>
<p>SQL&gt; update a set a=2; </p>
<p>
<p>12、删除记录 </p>
<p>SQL&gt; delete from a; </p>
<p>
<p>13、回滚 </p>
<p>SQL&gt; roll; </p>
<p>SQL&gt; rollback; </p>
<p>
<p>14、提交 </p>
<p>SQL&gt; commit; </p>
<p>
<p>--------------------------------------------------------------- </p>
<p>
<p>http://www.oradb.net/newuser/cg_sys.htm </p>
<p>--------------------------------------------------------------- </p>
<p>
<p>网上资料很多： </p>
<p>http://www.oraclefan.net/ocp/sql/dba_monitor.txt </p>
<p>
<p>---------------------------------------------------------------- </p>
<p>用户授权: </p>
<p>GRANT ALTER ANY INDEX TO "user_id " </p>
<p>GRANT "dba " TO "user_id "; </p>
<p>ALTER USER "user_id " DEFAULT ROLE ALL </p>
<p>创建用户: </p>
<p>CREATE USER "user_id " PROFILE "DEFAULT " IDENTIFIED BY " DEFAULT TABLESPACE "USERS " TEMPORARY TABLESPACE "TEMP " ACCOUNT UNLOCK; </p>
<p>GRANT "CONNECT " TO "user_id "; </p>
<p>用户密码设定: </p>
<p>ALTER USER "CMSDB " IDENTIFIED BY "pass_word " </p>
<p>表空间创建: </p>
<p>CREATE TABLESPACE "table_space " LOGGING DATAFILE 'C:\ORACLE\ORADATA\dbs\table_space.ora' SIZE 5M </p>
<p>
<p>------------------------------------------------------------------------ </p>
<p>1、查看当前所有对象 </p>
<p>
<p>SQL &gt; select * from tab; </p>
<p>
<p>2、建一个和a表结构一样的空表 </p>
<p>
<p>SQL &gt; create table b as select * from a where 1=2; </p>
<p>
<p>SQL &gt; create table b(b1,b2,b3) as select a1,a2,a3 from a where 1=2; </p>
<p>
<p>3、察看数据库的大小，和空间使用情况 </p>
<p>
<p>SQL &gt; col tablespace format a20 </p>
<p>SQL &gt; select b.file_id　　文件ID, </p>
<p>　　b.tablespace_name　　表空间, </p>
<p>　　b.file_name　　　　　物理文件名, </p>
<p>　　b.bytes　　　　　　　总字节数, </p>
<p>　　(b.bytes-sum(nvl(a.bytes,0)))　　　已使用, </p>
<p>　　sum(nvl(a.bytes,0))　　　　　　　　剩余, </p>
<p>　　sum(nvl(a.bytes,0))/(b.bytes)*100　剩余百分比 </p>
<p>　　from dba_free_space a,dba_data_files b </p>
<p>　　where a.file_id=b.file_id </p>
<p>　　group by b.tablespace_name,b.file_name,b.file_id,b.bytes </p>
<p>　　order by b.tablespace_name </p>
<p>　　/ </p>
<p>　　dba_free_space --表空间剩余空间状况 </p>
<p>　　dba_data_files --数据文件空间占用情况 </p>
<p>
<p>
<p>4、查看现有回滚段及其状态 </p>
<p>
<p>SQL &gt; col segment format a30 </p>
<p>SQL &gt; SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS; </p>
<p>
<p>5、查看数据文件放置的路径 </p>
<p>
<p>SQL &gt; col file_name format a50 </p>
<p>SQL &gt; select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id; </p>
<p>
<p>6、显示当前连接用户 </p>
<p>
<p>SQL &gt; show user </p>
<p>
<p>7、把SQL*Plus当计算器 </p>
<p>
<p>SQL &gt; select 100*20 from dual; </p>
<p>
<p>8、连接字符串 </p>
<p>
<p>SQL &gt; select 列1 | |列2 from 表1; </p>
<p>SQL &gt; select concat(列1,列2) from 表1; </p>
<p>
<p>9、查询当前日期 </p>
<p>
<p>SQL &gt; select to_char(sysdate,'yyyy-mm-dd,hh24:mi:ss') from dual; </p>
<p>
<p>10、用户间复制数据 </p>
<p>
<p>SQL &gt; copy from user1 to user2 create table2 using select * from table1; </p>
<p>
<p>11、视图中不能使用order by，但可用group by代替来达到排序目的 </p>
<p>
<p>SQL &gt; create view a as select b1,b2 from b group by b1,b2; </p>
<p>
<p>12、通过授权的方式来创建用户 </p>
<p>
<p>SQL &gt; grant connect,resource to test identified by test; </p>
<p>
<p>SQL &gt; conn test/test </p>
<p>
<p>13、查出当前用户所有表名。 </p>
<p>
<p>select unique tname from col; </p>
<p>
<p>----------------------------------------------------------------------- </p>
<p>/* 向一个表格添加字段 */ </p>
<p>alter table alist_table add address varchar2(100); </p>
<p>
<p>/* 修改字段 属性 字段为空 */ </p>
<p>alter table alist_table modify address varchar2(80); </p>
<p>
<p>/* 修改字段名字 */ </p>
<p>create table alist_table_copy as select ID,NAME,PHONE,EMAIL, </p>
<p>QQ as QQ2, /*qq 改为qq2*/ </p>
<p>ADDRESS from alist_table; </p>
<p>
<p>drop table alist_table; </p>
<p>rename alist_table_copy to alist_table </p>
<p>/* 修改表名 */ </p>
<p>
<p>空值处理 </p>
<p>有时要求列值不能为空 </p>
<p>create table dept (deptno number(2) not null, dname char(14), loc char(13)); </p>
<p>
<p>在基表中增加一列 </p>
<p>alter table dept </p>
<p>add (headcnt number(3)); </p>
<p>
<p>修改已有列属性 </p>
<p>alter table dept </p>
<p>modify dname char(20); </p>
<p>注：只有当某列所有值都为空时，才能减小其列值宽度。 </p>
<p>只有当某列所有值都为空时，才能改变其列值类型。 </p>
<p>只有当某列所有值都为不空时，才能定义该列为not null。 </p>
<p>例： </p>
<p>alter table dept modify (loc char(12)); </p>
<p>alter table dept modify loc char(12); </p>
<p>alter table dept modify (dname char(13),loc char(12)); </p>
<p>
<p>查找未断连接 </p>
<p>select process,osuser,username,machine,logon_time ,sql_text </p>
<p>from v$session a,v$sqltext b where a.sql_address=b.address; </p>
<p>
<p>----------------------------------------------------------------- </p>
<p>1.以USER_开始的数据字典视图包含当前用户所拥有的信息, 查询当前用户所拥有的表信息: </p>
<p>select * from user_tables; </p>
<p>2.以ALL_开始的数据字典视图包含ORACLE用户所拥有的信息, </p>
<p>查询用户拥有或有权访问的所有表信息: </p>
<p>select * from all_tables; </p>
<p>
<p>3.以DBA_开始的视图一般只有ORACLE数据库管理员可以访问: </p>
<p>select * from dba_tables; </p>
<p>
<p>4.查询ORACLE用户： </p>
<p>conn sys/change_on_install </p>
<p>select * from dba_users; </p>
<p>conn system/manager; </p>
<p>select * from all_users; </p>
<p>
<p>5.创建数据库用户： </p>
<p>CREATE USER user_name IDENTIFIED BY password; </p>
<p>GRANT CONNECT TO user_name; </p>
<p>GRANT RESOURCE TO user_name; </p>
<p>授权的格式: grant (权限) on tablename to username; </p>
<p>删除用户(或表): </p>
<p>drop user(table) username(tablename) (cascade); </p>
<p>6.向建好的用户导入数据表 </p>
<p>IMP SYSTEM/MANAGER FROMUSER = FUSER_NAME TOUSER = USER_NAME FILE = C:\EXPDAT.DMP COMMIT = Y </p>
<p>7.索引 </p>
<p>create index [index_name] on [table_name]( "column_name ") </p>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/138740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-08-23 09:21 <a href="http://www.blogjava.net/WshmAndLily/articles/138740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL*PLUS命令的使用大全</title><link>http://www.blogjava.net/WshmAndLily/articles/138732.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Thu, 23 Aug 2007 01:03:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/138732.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/138732.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/138732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/138732.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/138732.html</trackback:ping><description><![CDATA[SQL*PLUS命令的使用大全&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Oracle的sql*plus是与oracle进行交互的客户端工具。在sql*plus中，可以运行sql*plus命令与sql*plus语句。&nbsp;<br>&nbsp;&nbsp;&nbsp;我们通常所说的DML、DDL、DCL语句都是sql*plus语句，它们执行完后，都可以保存在一个被称为sql&nbsp;buffer的内存区域中，并且只能保存一条最近执行的sql语句，我们可以对保存在sql&nbsp;buffer中的sql&nbsp;语句进行修改，然后再次执行，sql*plus一般都与数据库打交道。&nbsp;<br>&nbsp;&nbsp;&nbsp;除了sql*plus语句，在sql*plus中执行的其它语句我们称之为sql*plus命令。它们执行完后，不保存在sql&nbsp;buffer的内存区域中，它们一般用来对输出的结果进行格式化显示，以便于制作报表。&nbsp;<br>&nbsp;&nbsp;&nbsp;下面就介绍一下一些常用的sql*plus命令：&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>1.&nbsp;执行一个SQL脚本文件&nbsp;<br>SQL&gt;start&nbsp;file_name&nbsp;<br>SQL&gt;@&nbsp;file_name&nbsp;<br>我们可以将多条sql语句保存在一个文本文件中，这样当要执行这个文件中的所有的sql语句时，用上面的任一命令即可，这类似于dos中的批处理。&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>2.&nbsp;对当前的输入进行编辑&nbsp;<br>SQL&gt;edit&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>3.&nbsp;重新运行上一次运行的sql语句&nbsp;<br>SQL&gt;/&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>4.&nbsp;将显示的内容输出到指定文件&nbsp;<br>SQL&gt;&nbsp;SPOOL&nbsp;file_name&nbsp;<br>&nbsp;&nbsp;&nbsp;在屏幕上的所有内容都包含在该文件中，包括你输入的sql语句。&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>5.&nbsp;关闭spool输出&nbsp;<br>SQL&gt;&nbsp;SPOOL&nbsp;OFF&nbsp;<br>&nbsp;&nbsp;&nbsp;只有关闭spool输出，才会在输出文件中看到输出的内容。&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>6．显示一个表的结构&nbsp;<br>SQL&gt;&nbsp;desc&nbsp;table_name&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>7.&nbsp;COL命令：&nbsp;<br>主要格式化列的显示形式。&nbsp;<br>该命令有许多选项，具体如下：&nbsp;<br>COL[UMN]&nbsp;[{&nbsp;column|expr}&nbsp;[&nbsp;option&nbsp;...]]&nbsp;<br>Option选项可以是如下的子句:&nbsp;<br>ALI[AS]&nbsp;alias&nbsp;<br>CLE[AR]&nbsp;<br>FOLD_A[FTER]&nbsp;<br>FOLD_B[EFORE]&nbsp;<br>FOR[MAT]&nbsp;format&nbsp;<br>HEA[DING]&nbsp;text&nbsp;<br>JUS[TIFY]&nbsp;{L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}&nbsp;<br>LIKE&nbsp;{&nbsp;expr|alias}&nbsp;<br>NEWL[INE]&nbsp;<br>NEW_V[ALUE]&nbsp;variable&nbsp;<br>NOPRI[NT]|PRI[NT]&nbsp;<br>NUL[L]&nbsp;text&nbsp;<br>OLD_V[ALUE]&nbsp;variable&nbsp;<br>ON|OFF&nbsp;<br>WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>1).&nbsp;改变缺省的列标题&nbsp;<br>COLUMN&nbsp;column_name&nbsp;HEADING&nbsp;column_heading&nbsp;<br>For&nbsp;example:&nbsp;<br>Sql&gt;select&nbsp;*&nbsp;from&nbsp;dept;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEPTNO&nbsp;DNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOC&nbsp;<br>----------&nbsp;----------------------------&nbsp;---------&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;ACCOUNTING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NEW&nbsp;YORK&nbsp;<br>sql&gt;col&nbsp;&nbsp;LOC&nbsp;heading&nbsp;location&nbsp;<br>sql&gt;select&nbsp;*&nbsp;from&nbsp;dept;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;DEPTNO&nbsp;DNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;<br>---------&nbsp;----------------------------&nbsp;-----------&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;ACCOUNTING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NEW&nbsp;YORK&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>2).&nbsp;将列名ENAME改为新列名EMPLOYEE&nbsp;NAME并将新列名放在两行上：&nbsp;<br>Sql&gt;select&nbsp;*&nbsp;from&nbsp;emp&nbsp;<br>Department&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Salary&nbsp;<br>----------&nbsp;----------&nbsp;----------&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;aaa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>SQL&gt;&nbsp;COLUMN&nbsp;ENAME&nbsp;HEADING&nbsp;&#8217;Employee|Name&#8217;&nbsp;<br>Sql&gt;select&nbsp;*&nbsp;from&nbsp;emp&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Employee&nbsp;<br>Department&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Salary&nbsp;<br>----------&nbsp;----------&nbsp;----------&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;aaa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11&nbsp;<br>note:&nbsp;the&nbsp;col&nbsp;heading&nbsp;turn&nbsp;into&nbsp;two&nbsp;lines&nbsp;from&nbsp;one&nbsp;line.&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>3).&nbsp;改变列的显示长度：&nbsp;<br>FOR[MAT]&nbsp;format&nbsp;<br>Sql&gt;select&nbsp;empno,ename,job&nbsp;from&nbsp;emp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EMPNO&nbsp;ENAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JOB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>----------&nbsp;----------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---------&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7369&nbsp;SMITH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLERK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7499&nbsp;ALLEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SALESMAN&nbsp;&nbsp;&nbsp;<br>7521&nbsp;WARD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SALESMAN&nbsp;&nbsp;&nbsp;<br>Sql&gt;&nbsp;col&nbsp;ename&nbsp;format&nbsp;a40&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EMPNO&nbsp;ENAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JOB&nbsp;<br>----------&nbsp;&nbsp;&nbsp;----------------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---------&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7369&nbsp;SMITH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLERK&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7499&nbsp;ALLEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SALESMAN&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7521&nbsp;WARD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SALESMAN&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>4).&nbsp;设置列标题的对齐方式&nbsp;<br>JUS[TIFY]&nbsp;{L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}&nbsp;<br>SQL&gt;&nbsp;col&nbsp;ename&nbsp;justify&nbsp;center&nbsp;<br>SQL&gt;&nbsp;/&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EMPNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JOB&nbsp;<br>----------&nbsp;&nbsp;&nbsp;----------------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---------&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7369&nbsp;SMITH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLERK&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7499&nbsp;ALLEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SALESMAN&nbsp;<br>7521&nbsp;WARD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SALESMAN&nbsp;<br>对于NUMBER型的列，列标题缺省在右边，其它类型的列标题缺省在左边&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>5).&nbsp;不让一个列显示在屏幕上&nbsp;<br>NOPRI[NT]|PRI[NT]&nbsp;<br>SQL&gt;&nbsp;col&nbsp;job&nbsp;noprint&nbsp;<br>SQL&gt;&nbsp;/&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EMPNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENAME&nbsp;<br>----------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7369&nbsp;SMITH&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7499&nbsp;ALLEN&nbsp;<br>7521&nbsp;WARD&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>6).&nbsp;格式化NUMBER类型列的显示：&nbsp;<br>SQL&gt;&nbsp;COLUMN&nbsp;SAL&nbsp;FORMAT&nbsp;$99,990&nbsp;<br>SQL&gt;&nbsp;/&nbsp;<br>Employee&nbsp;<br>Department&nbsp;Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Salary&nbsp;&nbsp;&nbsp;&nbsp;Commission&nbsp;<br>----------&nbsp;----------&nbsp;---------&nbsp;----------&nbsp;<br>30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALLEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$1,600&nbsp;&nbsp;&nbsp;&nbsp;300&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>7).&nbsp;显示列值时，如果列值为NULL值，用text值代替NULL值&nbsp;<br>COMM&nbsp;NUL[L]&nbsp;text&nbsp;<br>SQL&gt;COL&nbsp;COMM&nbsp;NUL[L]&nbsp;text&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>8).&nbsp;设置一个列的回绕方式&nbsp;<br>WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COL1&nbsp;<br>--------------------&nbsp;<br>HOW&nbsp;ARE&nbsp;YOU?&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>SQL&gt;COL&nbsp;COL1&nbsp;FORMAT&nbsp;A5&nbsp;<br>SQL&gt;COL&nbsp;COL1&nbsp;WRAPPED&nbsp;<br>COL1&nbsp;<br>-----&nbsp;<br>HOW&nbsp;A&nbsp;<br>RE&nbsp;YO&nbsp;<br>U?&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>SQL&gt;&nbsp;COL&nbsp;COL1&nbsp;WORD_WRAPPED&nbsp;<br>COL1&nbsp;<br>-----&nbsp;<br>HOW&nbsp;<br>ARE&nbsp;<br>YOU?&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>SQL&gt;&nbsp;COL&nbsp;COL1&nbsp;WORD_WRAPPED&nbsp;<br>COL1&nbsp;<br>-----&nbsp;<br>HOW&nbsp;A&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>9).&nbsp;显示列的当前的显示属性值&nbsp;<br>SQL&gt;&nbsp;COLUMN&nbsp;column_name&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>10).&nbsp;将所有列的显示属性设为缺省值&nbsp;<br>SQL&gt;&nbsp;CLEAR&nbsp;COLUMNS&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>8.&nbsp;屏蔽掉一个列中显示的相同的值&nbsp;<br>BREAK&nbsp;ON&nbsp;break_column&nbsp;<br>SQL&gt;&nbsp;BREAK&nbsp;ON&nbsp;DEPTNO&nbsp;<br>SQL&gt;&nbsp;SELECT&nbsp;DEPTNO,&nbsp;ENAME,&nbsp;SAL&nbsp;<br>FROM&nbsp;EMP&nbsp;<br>&nbsp;&nbsp;WHERE&nbsp;SAL&nbsp;&lt;&nbsp;2500&nbsp;<br>&nbsp;&nbsp;ORDER&nbsp;BY&nbsp;DEPTNO;&nbsp;<br>DEPTNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAL&nbsp;<br>----------&nbsp;-----------&nbsp;---------&nbsp;<br>10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLARK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2450&nbsp;<br>MILLER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1300&nbsp;<br>20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SMITH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;800&nbsp;<br>ADAMS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1100&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>9.&nbsp;在上面屏蔽掉一个列中显示的相同的值的显示中，每当列值变化时在值变化之前插入n个空行。&nbsp;<br>BREAK&nbsp;ON&nbsp;break_column&nbsp;SKIP&nbsp;n&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>SQL&gt;&nbsp;BREAK&nbsp;ON&nbsp;DEPTNO&nbsp;SKIP&nbsp;1&nbsp;<br>SQL&gt;&nbsp;/&nbsp;<br>DEPTNO&nbsp;ENAME&nbsp;SAL&nbsp;<br>----------&nbsp;-----------&nbsp;---------&nbsp;<br>10&nbsp;CLARK&nbsp;2450&nbsp;<br>MILLER&nbsp;1300&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>20&nbsp;SMITH&nbsp;800&nbsp;<br>ADAMS&nbsp;1100&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>10.&nbsp;显示对BREAK的设置&nbsp;<br>SQL&gt;&nbsp;BREAK&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>11.&nbsp;删除6、7的设置&nbsp;<br>SQL&gt;&nbsp;CLEAR&nbsp;BREAKS&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>12.&nbsp;Set&nbsp;命令：&nbsp;<br>该命令包含许多子命令：&nbsp;<br>SET&nbsp;system_variable&nbsp;value&nbsp;<br>system_variable&nbsp;value&nbsp;可以是如下的子句之一：&nbsp;<br>APPI[NFO]{ON|OFF|text}&nbsp;<br>ARRAY[SIZE]&nbsp;{15|n}&nbsp;<br>AUTO[COMMIT]{ON|OFF|IMM[EDIATE]|n}&nbsp;<br>AUTOP[RINT]&nbsp;{ON|OFF}&nbsp;<br>AUTORECOVERY&nbsp;[ON|OFF]&nbsp;<br>AUTOT[RACE]&nbsp;{ON|OFF|TRACE[ONLY]}&nbsp;[EXP[LAIN]]&nbsp;[STAT[ISTICS]]&nbsp;<br>BLO[CKTERMINATOR]&nbsp;{.|c}&nbsp;<br>CMDS[EP]&nbsp;{;|c|ON|OFF}&nbsp;<br>COLSEP&nbsp;{_|text}&nbsp;<br>COM[PATIBILITY]{V7|V8|NATIVE}&nbsp;<br>CON[CAT]&nbsp;{.|c|ON|OFF}&nbsp;<br>COPYC[OMMIT]&nbsp;{0|n}&nbsp;<br>COPYTYPECHECK&nbsp;{ON|OFF}&nbsp;<br>DEF[INE]&nbsp;{&amp;|c|ON|OFF}&nbsp;<br>DESCRIBE&nbsp;[DEPTH&nbsp;{1|n|ALL}][LINENUM&nbsp;{ON|OFF}][INDENT&nbsp;{ON|OFF}]&nbsp;<br>ECHO&nbsp;{ON|OFF}&nbsp;<br>EDITF[ILE]&nbsp;file_name[.ext]&nbsp;<br>EMB[EDDED]&nbsp;{ON|OFF}&nbsp;<br>ESC[APE]&nbsp;{\|c|ON|OFF}&nbsp;<br>FEED[BACK]&nbsp;{6|n|ON|OFF}&nbsp;<br>FLAGGER&nbsp;{OFF|ENTRY&nbsp;|INTERMED[IATE]|FULL}&nbsp;<br>FLU[SH]&nbsp;{ON|OFF}&nbsp;<br>HEA[DING]&nbsp;{ON|OFF}&nbsp;<br>HEADS[EP]&nbsp;{||c|ON|OFF}&nbsp;<br>INSTANCE&nbsp;[instance_path|LOCAL]&nbsp;<br>LIN[ESIZE]&nbsp;{80|n}&nbsp;<br>LOBOF[FSET]&nbsp;{n|1}&nbsp;<br>LOGSOURCE&nbsp;[pathname]&nbsp;<br>LONG&nbsp;{80|n}&nbsp;<br>LONGC[HUNKSIZE]&nbsp;{80|n}&nbsp;<br>MARK[UP]&nbsp;HTML&nbsp;[ON|OFF]&nbsp;[HEAD&nbsp;text]&nbsp;[BODY&nbsp;text]&nbsp;[ENTMAP&nbsp;{ON|OFF}]&nbsp;[SPOOL&nbsp;<br>{ON|OFF}]&nbsp;[PRE[FORMAT]&nbsp;{ON|OFF}]&nbsp;<br>NEWP[AGE]&nbsp;{1|n|NONE}&nbsp;<br>NULL&nbsp;text&nbsp;<br>NUMF[ORMAT]&nbsp;format&nbsp;<br>NUM[WIDTH]&nbsp;{10|n}&nbsp;<br>PAGES[IZE]&nbsp;{24|n}&nbsp;<br>PAU[SE]&nbsp;{ON|OFF|text}&nbsp;<br>RECSEP&nbsp;{WR[APPED]|EA[CH]|OFF}&nbsp;<br>RECSEPCHAR&nbsp;{_|c}&nbsp;<br>SERVEROUT[PUT]&nbsp;{ON|OFF}&nbsp;[SIZE&nbsp;n]&nbsp;[FOR[MAT]&nbsp;{WRA[PPED]|WOR[D_&nbsp;<br>WRAPPED]|TRU[NCATED]}]&nbsp;<br>SHIFT[INOUT]&nbsp;{VIS[IBLE]|INV[ISIBLE]}&nbsp;<br>SHOW[MODE]&nbsp;{ON|OFF}&nbsp;<br>SQLBL[ANKLINES]&nbsp;{ON|OFF}&nbsp;<br>SQLC[ASE]&nbsp;{MIX[ED]|LO[WER]|UP[PER]}&nbsp;<br>SQLCO[NTINUE]&nbsp;{&gt;&nbsp;|text}&nbsp;<br>SQLN[UMBER]&nbsp;{ON|OFF}&nbsp;<br>SQLPRE[FIX]&nbsp;{#|c}&nbsp;<br>SQLP[ROMPT]&nbsp;{SQL&gt;|text}&nbsp;<br>SQLT[ERMINATOR]&nbsp;{;|c|ON|OFF}&nbsp;<br>SUF[FIX]&nbsp;{SQL|text}&nbsp;<br>TAB&nbsp;{ON|OFF}&nbsp;<br>TERM[OUT]&nbsp;{ON|OFF}&nbsp;<br>TI[ME]&nbsp;{ON|OFF}&nbsp;<br>TIMI[NG]&nbsp;{ON|OFF}&nbsp;<br>TRIM[OUT]&nbsp;{ON|OFF}&nbsp;<br>TRIMS[POOL]&nbsp;{ON|OFF}&nbsp;<br>UND[ERLINE]&nbsp;{-|c|ON|OFF}&nbsp;<br>VER[IFY]&nbsp;{ON|OFF}&nbsp;<br>WRA[P]&nbsp;{ON|OFF}&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>1).&nbsp;设置当前session是否对修改的数据进行自动提交&nbsp;<br>SQL&gt;SET&nbsp;AUTO[COMMIT]&nbsp;{ON|OFF|IMM[EDIATE]|&nbsp;n}&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>2)．在用start命令执行一个sql脚本时，是否显示脚本中正在执行的SQL语句&nbsp;<br>SQL&gt;&nbsp;SET&nbsp;ECHO&nbsp;{ON|OFF}&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>3).是否显示当前sql语句查询或修改的行数&nbsp;<br>SQL&gt;&nbsp;SET&nbsp;FEED[BACK]&nbsp;{6|n|ON|OFF}&nbsp;<br>&nbsp;&nbsp;&nbsp;默认只有结果大于6行时才显示结果的行数。如果set&nbsp;feedback&nbsp;1&nbsp;，则不管查询到多少行都返回。当为off&nbsp;时，一律不显示查询的行数&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>4).是否显示列标题&nbsp;<br>SQL&gt;&nbsp;SET&nbsp;HEA[DING]&nbsp;{ON|OFF}&nbsp;<br>当set&nbsp;heading&nbsp;off&nbsp;时，在每页的上面不显示列标题，而是以空白行代替&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>5).设置一行可以容纳的字符数&nbsp;<br>SQL&gt;&nbsp;SET&nbsp;LIN[ESIZE]&nbsp;{80|n}&nbsp;<br>&nbsp;&nbsp;&nbsp;如果一行的输出内容大于设置的一行可容纳的字符数，则折行显示。&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>6).设置页与页之间的分隔&nbsp;<br>SQL&gt;&nbsp;SET&nbsp;NEWP[AGE]&nbsp;{1|n|NONE}&nbsp;<br>当set&nbsp;newpage&nbsp;0&nbsp;时，会在每页的开头有一个小的黑方框。&nbsp;<br>当set&nbsp;newpage&nbsp;n&nbsp;时，会在页和页之间隔着n个空行。&nbsp;<br>当set&nbsp;newpage&nbsp;none&nbsp;时，会在页和页之间没有任何间隔。&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>7).显示时，用text值代替NULL值&nbsp;<br>SQL&gt;&nbsp;SET&nbsp;NULL&nbsp;text&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>8).设置一页有多少行数&nbsp;<br>SQL&gt;&nbsp;SET&nbsp;PAGES[IZE]&nbsp;{24|n}&nbsp;<br>如果设为0，则所有的输出内容为一页并且不显示列标题&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>9).是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息。&nbsp;<br>SQL&gt;&nbsp;SET&nbsp;SERVEROUT[PUT]&nbsp;{ON|OFF}&nbsp;&nbsp;&nbsp;<br>在编写存储过程时，我们有时会用dbms_output.put_line将必要的信息输出，以便对存储过程进行调试，只有将serveroutput变量设为on后，信息才能显示在屏幕上。&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>10).当SQL语句的长度大于LINESIZE时，是否在显示时截取SQL语句。&nbsp;<br>SQL&gt;&nbsp;SET&nbsp;WRA[P]&nbsp;{ON|OFF}&nbsp;<br>&nbsp;&nbsp;&nbsp;当输出的行的长度大于设置的行的长度时（用set&nbsp;linesize&nbsp;n命令设置），当set&nbsp;wrap&nbsp;on时，输出行的多于的字符会另起一行显示，否则，会将输出行的多于字符切除，不予显示。&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>11).是否在屏幕上显示输出的内容，主要用与SPOOL结合使用。&nbsp;<br>SQL&gt;&nbsp;SET&nbsp;TERM[OUT]&nbsp;{ON|OFF}&nbsp;<br>&nbsp;&nbsp;&nbsp;在用spool命令将一个大表中的内容输出到一个文件中时，将内容输出在屏幕上会耗费大量的时间，设置set&nbsp;termspool&nbsp;off后，则输出的内容只会保存在输出文件中，不会显示在屏幕上，极大的提高了spool的速度。&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>12).将SPOOL输出中每行后面多余的空格去掉&nbsp;<br>SQL&gt;&nbsp;SET&nbsp;TRIMS[OUT]&nbsp;{ON|OFF}&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>13)显示每个sql语句花费的执行时间&nbsp;<br>set&nbsp;TIMING&nbsp;&nbsp;{ON|OFF}&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>14．修改sql&nbsp;buffer中的当前行中，第一个出现的字符串&nbsp;<br>C[HANGE]&nbsp;/old_value/new_value&nbsp;<br>SQL&gt;&nbsp;l&nbsp;<br>&nbsp;&nbsp;&nbsp;1*&nbsp;select&nbsp;*&nbsp;from&nbsp;dept&nbsp;<br>SQL&gt;&nbsp;c/dept/emp&nbsp;<br>&nbsp;&nbsp;&nbsp;1*&nbsp;select&nbsp;*&nbsp;from&nbsp;emp&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>15．编辑sql&nbsp;buffer中的sql语句&nbsp;<br>EDI[T]&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>16．显示sql&nbsp;buffer中的sql语句，list&nbsp;n显示sql&nbsp;buffer中的第n行，并使第n行成为当前行&nbsp;<br>L[IST]&nbsp;[n]&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>17．在sql&nbsp;buffer的当前行下面加一行或多行&nbsp;<br>I[NPUT]&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>18．将指定的文本加到sql&nbsp;buffer的当前行后面&nbsp;<br>A[PPEND]&nbsp;<br>SQL&gt;&nbsp;select&nbsp;deptno,&nbsp;<br>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;dname&nbsp;<br>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;from&nbsp;dept;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEPTNO&nbsp;DNAME&nbsp;<br>----------&nbsp;--------------&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;ACCOUNTING&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;RESEARCH&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;SALES&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;40&nbsp;OPERATIONS&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>SQL&gt;&nbsp;L&nbsp;2&nbsp;<br>&nbsp;&nbsp;&nbsp;2*&nbsp;dname&nbsp;<br>SQL&gt;&nbsp;a&nbsp;,loc&nbsp;<br>&nbsp;&nbsp;&nbsp;2*&nbsp;dname,loc&nbsp;<br>SQL&gt;&nbsp;L&nbsp;<br>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;select&nbsp;deptno,&nbsp;<br>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;dname,loc&nbsp;<br>&nbsp;&nbsp;&nbsp;3*&nbsp;from&nbsp;dept&nbsp;<br>SQL&gt;&nbsp;/&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEPTNO&nbsp;DNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOC&nbsp;<br>----------&nbsp;--------------&nbsp;-------------&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;ACCOUNTING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NEW&nbsp;YORK&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;RESEARCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DALLAS&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;SALES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHICAGO&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;40&nbsp;OPERATIONS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOSTON&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>19．将sql&nbsp;buffer中的sql语句保存到一个文件中&nbsp;<br>SAVE&nbsp;file_name&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>20．将一个文件中的sql语句导入到sql&nbsp;buffer中&nbsp;<br>GET&nbsp;file_name&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>21．再次执行刚才已经执行的sql语句&nbsp;<br>RUN&nbsp;<br>or&nbsp;<br>/&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>22．执行一个存储过程&nbsp;<br>EXECUTE&nbsp;procedure_name&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>23．在sql*plus中连接到指定的数据库&nbsp;<br>CONNECT&nbsp;user_name/passwd@db_alias&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>24．设置每个报表的顶部标题&nbsp;<br>TTITLE&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>25．设置每个报表的尾部标题&nbsp;<br>BTITLE&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>26．写一个注释&nbsp;<br>REMARK&nbsp;[text]&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>27．将指定的信息或一个空行输出到屏幕上&nbsp;<br>PROMPT&nbsp;[text]&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>28．将执行的过程暂停，等待用户响应后继续执行&nbsp;<br>PAUSE&nbsp;[text]&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>Sql&gt;PAUSE&nbsp;Adjust&nbsp;paper&nbsp;and&nbsp;press&nbsp;RETURN&nbsp;to&nbsp;continue.&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>29．将一个数据库中的一些数据拷贝到另外一个数据库（如将一个表的数据拷贝到另一个数据库）&nbsp;<br>COPY&nbsp;{FROM&nbsp;database&nbsp;|&nbsp;TO&nbsp;database&nbsp;|&nbsp;FROM&nbsp;database&nbsp;TO&nbsp;database}&nbsp;<br>{APPEND|CREATE|INSERT|REPLACE}&nbsp;destination_table&nbsp;<br>[(column,&nbsp;column,&nbsp;column,&nbsp;...)]&nbsp;USING&nbsp;query&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>sql&gt;COPY&nbsp;FROM&nbsp;SCOTT/TIGER@HQ&nbsp;TO&nbsp;JOHN/CHROME@WEST&nbsp;&nbsp;&nbsp;<br>create&nbsp;emp_temp&nbsp;<br>USING&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;EMP&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>30．不退出sql*plus，在sql*plus中执行一个操作系统命令：&nbsp;<br>HOST&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>Sql&gt;&nbsp;host&nbsp;hostname&nbsp;<br>该命令在windows下可能被支持。&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>31．在sql*plus中，切换到操作系统命令提示符下，运行操作系统命令后，可以再次切换回sql*plus：&nbsp;<br>!&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>sql&gt;!&nbsp;<br>$hostname&nbsp;<br>$exit&nbsp;<br>sql&gt;&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>该命令在windows下不被支持。&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>32．显示sql*plus命令的帮助&nbsp;<br>HELP&nbsp;<br>如何安装帮助文件：&nbsp;<br>Sql&gt;@&nbsp;?\sqlplus\admin\help\hlpbld.sql&nbsp;?\sqlplus\admin\help\helpus.sql&nbsp;<br>Sql&gt;help&nbsp;index&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>33．显示sql*plus系统变量的值或sql*plus环境变量的值&nbsp;<br>Syntax&nbsp;<br>SHO[W]&nbsp;option&nbsp;<br>where&nbsp;option&nbsp;represents&nbsp;one&nbsp;of&nbsp;the&nbsp;following&nbsp;terms&nbsp;or&nbsp;clauses:&nbsp;<br>system_variable&nbsp;<br>ALL&nbsp;<br>BTI[TLE]&nbsp;<br>ERR[ORS]&nbsp;[{FUNCTION|PROCEDURE|PACKAGE|PACKAGE&nbsp;BODY|&nbsp;<br>TRIGGER|VIEW|TYPE|TYPE&nbsp;BODY}&nbsp;[schema.]name]&nbsp;<br>LNO&nbsp;<br>PARAMETERS&nbsp;[parameter_name]&nbsp;<br>PNO&nbsp;<br>REL[EASE]&nbsp;<br>REPF[OOTER]&nbsp;<br>REPH[EADER]&nbsp;<br>SGA&nbsp;<br>SPOO[L]&nbsp;<br>SQLCODE&nbsp;<br>TTI[TLE]&nbsp;<br>USER&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>1)&nbsp;.&nbsp;显示当前环境变量的值：&nbsp;<br>Show&nbsp;all&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>2)&nbsp;.&nbsp;显示当前在创建函数、存储过程、触发器、包等对象的错误信息&nbsp;<br>Show&nbsp;error&nbsp;<br>当创建一个函数、存储过程等出错时，变可以用该命令查看在那个地方出错及相应的出错信息，进行修改后再次进行编译。&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>3)&nbsp;.&nbsp;显示初始化参数的值：&nbsp;<br>show&nbsp;PARAMETERS&nbsp;[parameter_name]&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>4)&nbsp;.&nbsp;显示数据库的版本：&nbsp;<br>show&nbsp;REL[EASE]&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>5)&nbsp;.&nbsp;显示SGA的大小&nbsp;<br>show&nbsp;SGA&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>6).&nbsp;显示当前的用户名&nbsp;<br>show&nbsp;user
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/138732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-08-23 09:03 <a href="http://www.blogjava.net/WshmAndLily/articles/138732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java jdbc连接oracle9i</title><link>http://www.blogjava.net/WshmAndLily/articles/138540.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Wed, 22 Aug 2007 02:41:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/138540.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/138540.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/138540.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/138540.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/138540.html</trackback:ping><description><![CDATA[/*<br>&nbsp;java jdbc连接oracle9i<br>&nbsp;设置环境变量classpath=.;E:\oracle\ora90\jdbc\lib\classes12.zip;<br>*/<br>import java.sql.*;<br>public class Demo<br>{<br>&nbsp;public static void main(String[] args)<br>&nbsp;{<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;DriverManager.registerDriver(new oracle.jdbc.OracleDriver());//取其中一个即可<br>&nbsp;&nbsp;&nbsp;Class.forName("oracle.jdbc.driver.OracleDriver");<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;}catch(Exception e)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;System.out.println("No Driver!");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;String url = "jdbc:oracle:thin:@127.0.0.1:1521:demo";<br>&nbsp;&nbsp;&nbsp;String userName = "system";<br>&nbsp;&nbsp;&nbsp;String password = "manager";<br>&nbsp;&nbsp;&nbsp;Connection conn = DriverManager.getConnection(url,userName,password);<br>&nbsp;&nbsp;&nbsp;Statement stmt = conn.createStatement();<br>&nbsp;&nbsp;&nbsp;ResultSet rset = stmt.executeQuery("select * from test");<br>&nbsp;&nbsp;&nbsp;while(rset.next())<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("user_id: "+rset.getString("user_id"));<br>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("user_name: "+rset.getString("user_name"));<br>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("note: "+rset.getString("note"));<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}catch(SQLException e)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;System.out.println("can't access the database!");<br>&nbsp;&nbsp;}<br>&nbsp;}<br>}
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/138540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-08-22 10:41 <a href="http://www.blogjava.net/WshmAndLily/articles/138540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>