﻿<?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-喝咖啡的企鹅-随笔分类-SQL</title><link>http://www.blogjava.net/aczreg/category/42891.html</link><description>不管乐意不乐意，事情总得做……</description><language>zh-cn</language><lastBuildDate>Sun, 13 Dec 2009 16:53:55 GMT</lastBuildDate><pubDate>Sun, 13 Dec 2009 16:53:55 GMT</pubDate><ttl>60</ttl><item><title>Oracle小技巧</title><link>http://www.blogjava.net/aczreg/archive/2009/12/12/304026.html</link><dc:creator>咖啡企鹅</dc:creator><author>咖啡企鹅</author><pubDate>Sat, 12 Dec 2009 07:50:00 GMT</pubDate><guid>http://www.blogjava.net/aczreg/archive/2009/12/12/304026.html</guid><wfw:comment>http://www.blogjava.net/aczreg/comments/304026.html</wfw:comment><comments>http://www.blogjava.net/aczreg/archive/2009/12/12/304026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aczreg/comments/commentRss/304026.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aczreg/services/trackbacks/304026.html</trackback:ping><description><![CDATA[<p><strong>更改Oracle http端口(8080改为8081）<br />
</strong>SQL&gt; call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),<br />
&nbsp; 2&nbsp; '/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()',8081))<br />
&nbsp; 3&nbsp; /<br />
SQL&gt; commit;<br />
Commit complete.<br />
SQL&gt;&nbsp; exec dbms_xdb.cfg_refresh;<br />
<br />
SQL&gt;&nbsp; call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),<br />
&nbsp; 2&nbsp; '/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()',2111))<br />
&nbsp; 3&nbsp; /<br />
Call completed.<br />
SQL&gt; commit;<br />
Commit complete.<br />
SQL&gt;&nbsp; exec dbms_xdb.cfg_refresh;<br />
<br />
<br />
<span style="font-family: Lucida Console"><strong><br />
表自复制</strong><br style="font-family: " />
INSERT INTO 表名 （列,...） SELECT * FROM 表名；<br />
如：<br />
INSERT INTO&nbsp;students (sid,sname,sage,...) SELECT * FROM students；<br />
</p>
</span>
<p><span style="font-family: Lucida Console"><br />
<strong>SET命令(常用):</strong> SET 系统变量 值<br />
<table border="0" cellspacing="2" cellpadding="2">
    <tbody>
        <tr>
            <td style="width: 178px; height: 34px">ARRAY[SIZE] </td>
            <td style="font-size: 12pt">{20d|n}</td>
            <td>SQL*PLUS一次从数据库获取的行数,有效值为1至5000. </td>
        </tr>
        <tr>
            <td style="height: 22px">LIN[ESIZE]</td>
            <td>{80d|n}</td>
            <td>SQL*PLUS一行显示的字符总数,它还控制对准中心的文本和右对齐文本.</td>
        </tr>
        <tr>
            <td>PAGES[IZE]</td>
            <td style="width: 135px; height: 26px">{14d|n}</td>
            <td>从顶部标题至页结束之间的行数.</td>
        </tr>
        <tr>
            <td>SQLN[UMBER]</td>
            <td>{OFF|ONd}&nbsp;&nbsp; </td>
            <td>为SQL命令和PL/SQL块的第二行和后继行设置提示.</td>
        </tr>
        <tr>
            <td>TIMI[NG]</td>
            <td>{OFFd|ON}&nbsp;</td>
            <td>显示每一个运行的SQL命令或PL/SQL块的时间统计.</td>
        </tr>
    </tbody>
</table>
</span><br />
</p>
<span style="font-family: Lucida Console">
<p><strong>ORACLE保留关键字</strong><br />
ACCESS ADD ALL ALTER AND ANY AS ASC AUDIT BETWEEN BY CHAR CHECK CLUSTER COLUMN COMMENT<br />
COMPRESS CONNECT CREATE CURRENT DATE DECIMAL DEFAULT DELETE DESC DISTINCT DROP ELSE EXCLUSIVE<br />
EXISTS FILE FLOAT FOR FROM GRANT GROUP HAVING IDENTIFIED IMMEDIATE IN INCREMENT INDEX INITIAL<br />
INSERT INTEGER INTERSECT INTO IS LEVEL LIKE LOCK LONG MAXEXTENTS MINUS MLSLABEL MODE MODIFY<br />
NOAUDIT NOCOMPRESS NOT NOWAIT NULL NUMBER OF OFFLINE ON ONLINE OPTION OR ORDER PCTFREE PRIOR<br />
PRIVILEGES PUBLIC RAW RENAME RESOURCE REVOKE ROW ROWID ROWNUM ROWS SELECT SESSION SET<br />
SHARE SIZE SMALLINT START SUCCESSFUL SYNONYM SYSDATE TABLE THEN TO TRIGGER UID UNION UNIQUE<br />
UPDATE USER VALIDATE VALUES VARCHAR VARCHAR2 VIEW WHENEVER WHERE WITH</p>
<p><strong>TO_DATE与TO_CHAR</strong><br />
1.在使用Oracle的to_date函数来做日期转换时，很多Java程序员也许会和我一样，直觉的采用&#8220;yyyy-MM-dd HH:mm:ss&#8221;的格式作为格式进行转换，但是在Oracle中会引起错误：&#8220;ORA 01810 格式代码出现两次&#8221;。<br />
如：select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;<br />
原因是SQL中不区分大小写，MM和mm被认为是相同的格式代码，所以Oracle的SQL采用了mi代替分钟。<br />
select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;<br />
2.另要以24小时的形式显示出来要用HH24<br />
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分钟<br />
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm会显示月份</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
JDBC连接Oracle<br />
1.本机连接：控制面板-管理工具-数据源 (ODBC)添加相应的Oracle的DNS服务（DNSname）；<br />
&nbsp; 加载驱动：Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");<br />
&nbsp; 建立连接：DriverManager.getConnection("jdbc:odbc:DNSname","username","password");<br />
2.URL连接：<br />
&nbsp; 加载驱动：Class.forName("oracle.jdbc.driver.OracleDriver");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （此驱动一般在Oracle安装目录内相应server\jdbc\lib目录下能找到）；<br />
&nbsp; 建立连接：DriverManager.getConnection("jdbc:oracle:thin:@url:port:OSname","username","password");<br />
</p>
</span>
<img src ="http://www.blogjava.net/aczreg/aggbug/304026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aczreg/" target="_blank">咖啡企鹅</a> 2009-12-12 15:50 <a href="http://www.blogjava.net/aczreg/archive/2009/12/12/304026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PL/SQL基础</title><link>http://www.blogjava.net/aczreg/archive/2009/12/09/305051.html</link><dc:creator>咖啡企鹅</dc:creator><author>咖啡企鹅</author><pubDate>Wed, 09 Dec 2009 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/aczreg/archive/2009/12/09/305051.html</guid><wfw:comment>http://www.blogjava.net/aczreg/comments/305051.html</wfw:comment><comments>http://www.blogjava.net/aczreg/archive/2009/12/09/305051.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aczreg/comments/commentRss/305051.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aczreg/services/trackbacks/305051.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;--块（编程）：过程（存储过程）、函数、触发器、包--块结构：DECLEARR定义（可选）、BEGIN执行（必须）、EXCEPTIONN例外（可选）--建立测试表SQL&gt;&nbsp;CREATE&nbsp;TABLE&nbsp;TPT&nbsp;(&nbsp;&nbsp;2&nbsp;&nbsp;tid&nbsp;NUMBER(6)&nbsp;PR...&nbsp;&nbsp;<a href='http://www.blogjava.net/aczreg/archive/2009/12/09/305051.html'>阅读全文</a><img src ="http://www.blogjava.net/aczreg/aggbug/305051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aczreg/" target="_blank">咖啡企鹅</a> 2009-12-09 14:13 <a href="http://www.blogjava.net/aczreg/archive/2009/12/09/305051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）Oracle集合运算</title><link>http://www.blogjava.net/aczreg/archive/2009/11/30/304275.html</link><dc:creator>咖啡企鹅</dc:creator><author>咖啡企鹅</author><pubDate>Mon, 30 Nov 2009 08:29:00 GMT</pubDate><guid>http://www.blogjava.net/aczreg/archive/2009/11/30/304275.html</guid><wfw:comment>http://www.blogjava.net/aczreg/comments/304275.html</wfw:comment><comments>http://www.blogjava.net/aczreg/archive/2009/11/30/304275.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aczreg/comments/commentRss/304275.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aczreg/services/trackbacks/304275.html</trackback:ping><description><![CDATA[<p>DIY部落(<a href="http://www.diybl.com/course/7_databases/oracle/oraclexl/20090825/171870.html">http://www.diybl.com/course/7_databases/oracle/oraclexl/20090825/171870.html</a>)<br />
<br />
■■集合运算(UNION、UNION ALL、INTERSECT、MINUS)<br />
&nbsp;&nbsp; 集合运算组合两个或多个部分查询的结果到一个结果中。包含集合运算的查询称为复合查询。<br />
Operator&nbsp;&nbsp;Returns<br />
UNION(联合)&nbsp;&nbsp;由每个查询选择的所有不同的行(无重复值)<br />
UNION ALL&nbsp;&nbsp;由每个查询选择的所有的行，包括所有重复的行<br />
INTERSECT(交叉)&nbsp;&nbsp;由两个查询选择的所有不同的行<br />
MINUS&nbsp;&nbsp;&nbsp;由第一个查询选择的所有不同的行<br />
所有的集合运算与等号的优先级相同，如果SQL语句包含多个集合运算并且没有圆括号明确地指定另一个顺序，Oracle服务器将以从左到右的顺序计算。你应该使用圆括号来明确地指定带另外的集合运算INTERSECT (相交) 运算查询中的赋值顺序。<br />
&nbsp;&nbsp;&nbsp; INTERSECT (相交) 和MINUS (相减) 运算不是ANSI SQL-99兼容的，他们是Oracle特定的。</p>
<p><br />
■联合(UNION)<br />
UNION(联合)运算<br />
UNION运算返回所有由任一查询选择的行。用UNION运算从多表返回所有行，但除去任何重复的行。<br />
･原则<br />
:: 被选择的列数和列的数据类型必须是与所有用在查询中的SELECT语句一致。列的名字不必相同。<br />
:: 联合运算在所有被选择的列上进行。<br />
:: 在做重复检查的时候不忽略空(NULL)值。<br />
:: IN运算有比UNION运算高的优先级。<br />
:: 在默认情况下，输出以SELECT子句的第一列的升序排序。</p>
<p><br />
■全联合(UNION ALL) <br />
运算从两个查询返回包括所有重复值的结果<br />
原则<br />
:: 和联合不同，重复的行不被过滤，并且默认情况下输出不排序。<br />
:: 不能使用DISTINCT关键字。<br />
&nbsp;&nbsp; 注：除了上面的两点，UNION ALL的原则与UNION相同。</p>
<p><br />
■相交(INTERSECT) <br />
用相交运算返回多个查询中所有的公共行。<br />
原则<br />
:: 在查询中被 SELECT 语句选择的列数和数据类型必须与在查询中所使用的所有的 SELTCT 语句中的&nbsp;&nbsp; 一样，但列的名字不必一样。<br />
:: 颠倒相交的表的排序不改变结果。<br />
:: 相交不忽略空值。</p>
<p><br />
■相减(MINUS) <br />
用相减运算返回由第一个查询返回的行，那些行不出现在第二个查询中 (第一个SELECT语句减第二个SELECT语句)。<br />
原则<br />
:: 在查询中被SELECT语句选择的列数和数据类型必须与在查询中所使用的所有的SELTCT语句中的一样，但列的名字不必一样。<br />
:: 对于MINUS运算，在WHERE子句中所有的列都必须在SELECT子句中。<br />
■<br />
※集合运算的原则<br />
:: 在两个SELECT列表中的表达式必须在数目上和数据类型上相匹配<br />
:: 可以用圆括号改变执行的顺序<br />
:: ORDER BY子句：<br />
&nbsp;&#8211;只能出现在语句的最后<br />
&nbsp;&#8211;从第一个SELECT语句接收列名、别名，或者位置记号<br />
:: 集合运算可以用在子查询中。</p>
<p><br />
■Oracle 服务器和集合运算<br />
:: 除了UNION ALL，重复行自动被清除<br />
:: 在结果中的列名是第一个查询中出现的列名<br />
:: 除了UNION ALL(无排序)，默认情况下按升序顺序输出<br />
在一个复合查询的各查询组成部分的选择列表中相应的表达式必须在数目和类型上匹配。如果查询的组成部分选择字符数据，返回值的数据类型被如下决定：<br />
&nbsp;:: 如果查询选择的数据类型的值为CHAR，那么，返回值的数据类型也为CHAR。<br />
&nbsp;:: 如果查询选择的两者之一或两者的数据类型值为VARCHAR2，那么，返回值的数据类型也是VARCHAR2。</p>
<p><br />
&nbsp; 你可能需要提及，输出以第一个SELECT子句的第一列的升序被排序，然后是第二列，等等。</p>
<p><br />
■匹配SELECT语句&nbsp;//凑数<br />
eg:<br />
SELECT department_id, TO_NUMBER(null) location, hire_date<br />
FROM employees<br />
UNION<br />
SELECT department_id, location_id, TO_DATE(null)<br />
FROM departments;</p>
<p><br />
DEPARTMENT_ID&nbsp;&nbsp; LOCATION HIRE_DATE<br />
------------- ---------- ----------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 21-4月 -00<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 90&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1700<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 90&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17-6月 -87<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 90&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 21-9月 -89<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 90&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13-1月 -93<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1700<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16-8月 -94<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17-8月 -94<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 28-9月 -97<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30-9月 -97<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 07-3月 -98</p>
<p><br />
匹配SELECT语句<br />
&nbsp;&nbsp;&nbsp; 由于在两个查询的SELECT列表中的表达式必须在数量上匹配，你可以使用虚拟列和转换函数数据类型来满足该规则。在幻灯片中使用了虚拟列，在第一个查询中的TO_NUMBER函数被用以匹配第二个查询中返回的LOCATION_ID列的数字数据类型，同样地，第二个查询中的TO_DATE函数被用于匹配 第一个查询返回的日期数据类型。</p>
<p>DIY部落(<a href="http://www.diybl.com/course/7_databases/oracle/oraclexl/20090825/171870.html">http://www.diybl.com/course/7_databases/oracle/oraclexl/20090825/171870.html</a>)</p>
  <img src ="http://www.blogjava.net/aczreg/aggbug/304275.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aczreg/" target="_blank">咖啡企鹅</a> 2009-11-30 16:29 <a href="http://www.blogjava.net/aczreg/archive/2009/11/30/304275.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle用户管理 </title><link>http://www.blogjava.net/aczreg/archive/2009/11/30/303962.html</link><dc:creator>咖啡企鹅</dc:creator><author>咖啡企鹅</author><pubDate>Mon, 30 Nov 2009 07:28:00 GMT</pubDate><guid>http://www.blogjava.net/aczreg/archive/2009/11/30/303962.html</guid><wfw:comment>http://www.blogjava.net/aczreg/comments/303962.html</wfw:comment><comments>http://www.blogjava.net/aczreg/archive/2009/11/30/303962.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aczreg/comments/commentRss/303962.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aczreg/services/trackbacks/303962.html</trackback:ping><description><![CDATA[<div class="postbody">
<p>A.用户角色必须要有用户操作权限才可以常见用户（例如sys,system）;<br />
<br />
B.1.创建一个用户：CREATE USER username IDENTIFIED BY password；<br />
&nbsp;&nbsp; 2.删除一个用户：DROP USER username CASCADE；--级联删除此用户相关文件<br />
&nbsp;&nbsp; 3.更改密码：ALTER USER username IDENTIFIED BY password;<br />
&nbsp;&nbsp; 4.锁定用户：ALTER USER username ACCOUNT LOCK; <br />
&nbsp;&nbsp; 5.解锁用户：ALTER USER username ACCOUNT UNLOCK; &nbsp;&nbsp;</p>
<p>C.1.GRANT privilege... ON object... TO {public|group|user}<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 />
&nbsp;&nbsp; &nbsp;&nbsp; GRANT roll. TO user<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 赋予&nbsp;&nbsp;&nbsp; 角色给 用户&nbsp;&nbsp;&nbsp; --角色：connect|resource|dba...&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 2.REVOKE privilege... ON object... FROM {public|group|user}<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; 群|用户<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REVOKE roll. FROM user<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 撤销&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 角色&nbsp;&nbsp;&nbsp; 从&nbsp;&nbsp;&nbsp;&nbsp; 用户</p>
<p>D.1.登陆配置文件创建(错误三次锁定两天)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; CREATE　PROFILE　pname LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2; <br />
&nbsp;&nbsp;&nbsp; 2.给予用户此约束<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;ALTER USER user PROFILE pname; </p>
<br />
E 1.登陆、切换用户CONN[ECT]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用法: CONN[ECT] [logon] [AS {SYSDBA|SYSOPER}]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其中 &lt;logon&gt;&nbsp; ::= &lt;username&gt;[/&lt;password&gt;][@&lt;connect_identifier&gt;]&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如：CONN scott\tiger<br />
&nbsp;<br />
F 1.查询Oracle共有多少中角色：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT * FROM DBA_ROLES；<br />
&nbsp;&nbsp; 2.查询一个用户具有何种角色：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE='SCOTT';<br />
&nbsp;&nbsp; 3.a.查询一个角色具有何种系统权限：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.查询一个角色具有何种对象权限：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE='RESOURCE';<br />
<br />
&nbsp; </div>
<img src ="http://www.blogjava.net/aczreg/aggbug/303962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aczreg/" target="_blank">咖啡企鹅</a> 2009-11-30 15:28 <a href="http://www.blogjava.net/aczreg/archive/2009/11/30/303962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）Oracle函数大全</title><link>http://www.blogjava.net/aczreg/archive/2009/11/30/304255.html</link><dc:creator>咖啡企鹅</dc:creator><author>咖啡企鹅</author><pubDate>Mon, 30 Nov 2009 06:28:00 GMT</pubDate><guid>http://www.blogjava.net/aczreg/archive/2009/11/30/304255.html</guid><wfw:comment>http://www.blogjava.net/aczreg/comments/304255.html</wfw:comment><comments>http://www.blogjava.net/aczreg/archive/2009/11/30/304255.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aczreg/comments/commentRss/304255.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aczreg/services/trackbacks/304255.html</trackback:ping><description><![CDATA[函数 <br />
1.ASCII <br />
返回与指定的字符对应的十进制数; <br />
SQL&gt; select ascii(&#8217;A&#8217;) A,ascii(&#8217;a&#8217;) a,ascii(&#8217;0&#8217;) zero,ascii(&#8217; &#8217;) space from dual; <br />
A A ZERO SPACE <br />
--------- --------- --------- --------- <br />
65 97 48 32
<p>2.CHR <br />
给出整数,返回对应的字符; <br />
SQL&gt; select chr(54740) zhao,chr(65) chr65 from dual; <br />
ZH C <br />
-- - <br />
赵 A <br />
3.CONCAT <br />
连接两个字符串; <br />
SQL&gt; select concat(&#8217;010-&#8217;,&#8217;88888888&#8217;)||&#8217;转23&#8217; 高乾竞电话 from dual; <br />
高乾竞电话 <br />
---------------- <br />
010-88888888转23 <br />
4.INITCAP <br />
返回字符串并将字符串的第一个字母变为大写; <br />
SQL&gt; select initcap(&#8217;smith&#8217;) upp from dual; <br />
UPP <br />
----- <br />
Smith</p>
<p>5.INSTR(C1,C2,I,J) <br />
在一个字符串中搜索指定的字符,返回发现指定的字符的位置; <br />
C1 被搜索的字符串 <br />
C2 希望搜索的字符串 <br />
I 搜索的开始位置,默认为1 <br />
J 出现的位置,默认为1 <br />
SQL&gt; select instr(&#8217;oracle traning&#8217;,&#8217;ra&#8217;,1,2) instring from dual; <br />
INSTRING <br />
--------- <br />
9</p>
<p>6.LENGTH <br />
返回字符串的长度; <br />
SQL&gt; select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst; <br />
NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL)) <br />
------ ------------ ---------------- ------------ --------- -------------------- <br />
高乾竞 3 北京市海锭区 6 9999.99 7</p>
<p>7.LOWER <br />
返回字符串,并将所有的字符小写 <br />
SQL&gt; select lower(&#8217;AaBbCcDd&#8217;)AaBbCcDd from dual; <br />
AABBCCDD <br />
-------- <br />
aabbccdd</p>
<p>8.UPPER <br />
返回字符串,并将所有的字符大写 <br />
SQL&gt; select upper(&#8217;AaBbCcDd&#8217;) upper from dual; <br />
UPPER <br />
-------- <br />
AABBCCDD</p>
<p>9.RPAD和LPAD(粘贴字符) <br />
RPAD 在列的右边粘贴字符 <br />
LPAD 在列的左边粘贴字符 <br />
SQL&gt; select lpad(rpad(&#8217;gao&#8217;,10,&#8217;*&#8217;),17,&#8217;*&#8217;)from dual; <br />
LPAD(RPAD(&#8217;GAO&#8217;,1 <br />
----------------- <br />
*******gao******* <br />
不够字符则用*来填满</p>
<p>10.LTRIM和RTRIM <br />
LTRIM 删除左边出现的字符串 <br />
RTRIM 删除右边出现的字符串 <br />
SQL&gt; select ltrim(rtrim(&#8217; gao qian jing &#8217;,&#8217; &#8217;),&#8217; &#8217;) from dual; <br />
LTRIM(RTRIM(&#8217; <br />
------------- <br />
gao qian jing</p>
<p>11.SUBSTR(string,start,count) <br />
取子字符串,从start开始,取count个 <br />
SQL&gt; select substr(&#8217;13088888888&#8217;,3,8) from dual; <br />
SUBSTR(&#8217; <br />
-------- <br />
08888888</p>
<p>12.REPLACE(&#8217;string&#8217;,&#8217;s1&#8217;,&#8217;s2&#8217;) <br />
string 希望被替换的字符或变量 <br />
s1 被替换的字符串 <br />
s2 要替换的字符串 <br />
SQL&gt; select replace(&#8217;he love you&#8217;,&#8217;he&#8217;,&#8217;i&#8217;) from dual; <br />
REPLACE(&#8217;H <br />
---------- <br />
i love you</p>
<p>13.SOUNDEX <br />
返回一个与给定的字符串读音相同的字符串 <br />
SQL&gt; create table table1(xm varchar(8)); <br />
SQL&gt; insert into table1 values(&#8217;weather&#8217;); <br />
SQL&gt; insert into table1 values(&#8217;wether&#8217;); <br />
SQL&gt; insert into table1 values(&#8217;gao&#8217;); <br />
SQL&gt; select xm from table1 where soundex(xm)=soundex(&#8217;weather&#8217;); <br />
XM <br />
-------- <br />
weather <br />
wether</p>
<p>14.TRIM(&#8217;s&#8217; from &#8217;string&#8217;) <br />
LEADING 剪掉前面的字符 <br />
TRAILING 剪掉后面的字符 <br />
如果不指定,默认为空格符 <br />
15.ABS <br />
返回指定值的绝对值 <br />
SQL&gt; select abs(100),abs(-100) from dual; <br />
ABS(100) ABS(-100) <br />
--------- --------- <br />
100 100</p>
<p>16.ACOS <br />
给出反余弦的值 <br />
SQL&gt; select acos(-1) from dual; <br />
ACOS(-1) <br />
--------- <br />
3.1415927</p>
<p>17.ASIN <br />
给出反正弦的值 <br />
SQL&gt; select asin(0.5) from dual; <br />
ASIN(0.5) <br />
--------- <br />
.52359878</p>
<p>18.ATAN <br />
返回一个数字的反正切值 <br />
SQL&gt; select atan(1) from dual; <br />
ATAN(1) <br />
--------- <br />
.78539816</p>
<p>19.CEIL <br />
返回大于或等于给出数字的最小整数 <br />
SQL&gt; select ceil(3.1415927) from dual; <br />
CEIL(3.1415927) <br />
--------------- <br />
4</p>
<p>20.COS <br />
返回一个给定数字的余弦 <br />
SQL&gt; select cos(-3.1415927) from dual; <br />
COS(-3.1415927) <br />
--------------- <br />
-1<br />
21.COSH <br />
返回一个数字反余弦值 <br />
SQL&gt; select cosh(20) from dual; <br />
COSH(20) <br />
--------- <br />
242582598</p>
<p>22.EXP <br />
返回一个数字e的n次方根 <br />
SQL&gt; select exp(2),exp(1) from dual; <br />
EXP(2) EXP(1) <br />
--------- --------- <br />
7.3890561 2.7182818</p>
<p>23.FLOOR <br />
对给定的数字取整数 <br />
SQL&gt; select floor(2345.67) from dual; <br />
FLOOR(2345.67) <br />
-------------- <br />
2345</p>
<p>24.LN <br />
返回一个数字的对数值 <br />
SQL&gt; select ln(1),ln(2),ln(2.7182818) from dual; <br />
LN(1) LN(2) LN(2.7182818) <br />
--------- --------- ------------- <br />
0 .69314718 .99999999</p>
<p>25.LOG(n1,n2) <br />
返回一个以n1为底n2的对数 <br />
SQL&gt; select log(2,1),log(2,4) from dual; <br />
LOG(2,1) LOG(2,4) <br />
--------- --------- <br />
0 2</p>
<p>26.MOD(n1,n2) <br />
返回一个n1除以n2的余数 <br />
SQL&gt; select mod(10,3),mod(3,3),mod(2,3) from dual; <br />
MOD(10,3) MOD(3,3) MOD(2,3) <br />
--------- -------- --------- <br />
1 0 2</p>
<p>27.POWER <br />
返回n1的n2次方根 <br />
SQL&gt; select power(2,10),power(3,3) from dual; <br />
POWER(2,10) POWER(3,3) <br />
----------- ---------- <br />
1024 27</p>
<p>28.ROUND和TRUNC <br />
按照指定的精度进行舍入 <br />
SQL&gt; select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual; <br />
ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5) <br />
----------- ------------ ----------- ------------ <br />
56 -55 55 -55</p>
<p>29.SIGN <br />
取数字n的符号,大于0返回1,小于0返回-1,等于0返回0 <br />
SQL&gt; select sign(123),sign(-100),sign(0) from dual; <br />
SIGN(123) SIGN(-100) SIGN(0) <br />
--------- ---------- --------- <br />
1 -1 0</p>
<p>30.SIN <br />
返回一个数字的正弦值 <br />
SQL&gt; select sin(1.57079) from dual; <br />
SIN(1.57079) <br />
------------ <br />
1</p>
<p>31.SIGH <br />
返回双曲正弦的值 <br />
SQL&gt; select sin(20),sinh(20) from dual; <br />
SIN(20) SINH(20) <br />
--------- --------- <br />
.91294525 242582598</p>
<p>32.SQRT <br />
返回数字n的根 <br />
SQL&gt; select sqrt(64),sqrt(10) from dual; <br />
SQRT(64) SQRT(10) <br />
--------- --------- <br />
8 3.1622777</p>
<p>33.TAN <br />
返回数字的正切值 <br />
SQL&gt; select tan(20),tan(10) from dual; <br />
TAN(20) TAN(10) <br />
--------- --------- <br />
2.2371609 .64836083</p>
<p>34.TANH <br />
返回数字n的双曲正切值 <br />
SQL&gt; select tanh(20),tan(20) from dual; <br />
TANH(20) TAN(20) <br />
--------- --------- <br />
1 2.2371609</p>
<p>35.TRUNC <br />
按照指定的精度截取一个数 <br />
SQL&gt; select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual; <br />
TRUNC1 TRUNC(124.16666,2) <br />
--------- ------------------ <br />
100 124.16</p>
<p>36.ADD_MONTHS <br />
增加或减去月份 <br />
SQL&gt; select to_char(add_months(to_date(&#8217;199912&#8217;,&#8217;yyyymm&#8217;),2),&#8217;yyyymm&#8217;) from dual; <br />
TO_CHA <br />
------ <br />
200002 <br />
SQL&gt; select to_char(add_months(to_date(&#8217;199912&#8217;,&#8217;yyyymm&#8217;),-2),&#8217;yyyymm&#8217;) from dual; <br />
TO_CHA <br />
------ <br />
199910</p>
<p>37.LAST_DAY <br />
返回日期的最后一天 <br />
SQL&gt; select to_char(sysdate,&#8217;yyyy.mm.dd&#8217;),to_char((sysdate)+1,&#8217;yyyy.mm.dd&#8217;) from dual; <br />
TO_CHAR(SY TO_CHAR((S <br />
---------- ---------- <br />
2004.05.09 2004.05.10 <br />
SQL&gt; select last_day(sysdate) from dual; <br />
LAST_DAY(S <br />
---------- <br />
31-5月 -04</p>
<p>38.MONTHS_BETWEEN(date2,date1) <br />
给出date2-date1的月份 <br />
SQL&gt; select months_between(&#8217;19-12月-1999&#8217;,&#8217;19-3月-1999&#8217;) mon_between from dual; <br />
MON_BETWEEN <br />
----------- <br />
9 <br />
SQL&gt;selectmonths_between(to_date(&#8217;2000.05.20&#8217;,&#8217;yyyy.mm.dd&#8217;),to_date(&#8217;2005.05.20&#8217;,&#8217;yyyy.mm.dd&#8217;)) mon_betw from dual; <br />
MON_BETW <br />
--------- <br />
-60</p>
<p>39.NEW_TIME(date,&#8217;this&#8217;,&#8217;that&#8217;) <br />
给出在this时区=other时区的日期和时间 <br />
SQL&gt; select to_char(sysdate,&#8217;yyyy.mm.dd hh24:mi:ss&#8217;) bj_time,to_char(new_time <br />
2 (sysdate,&#8217;PDT&#8217;,&#8217;GMT&#8217;),&#8217;yyyy.mm.dd hh24:mi:ss&#8217;) los_angles from dual; <br />
BJ_TIME LOS_ANGLES <br />
------------------- ------------------- <br />
2004.05.09 11:05:32 2004.05.09 18:05:32</p>
<p>40.NEXT_DAY(date,&#8217;day&#8217;) <br />
给出日期date和星期x之后计算下一个星期的日期 <br />
SQL&gt; select next_day(&#8217;18-5月-2001&#8217;,&#8217;星期五&#8217;) next_day from dual; <br />
NEXT_DAY <br />
---------- <br />
25-5月 -01<br />
41.SYSDATE <br />
用来得到系统的当前日期 <br />
SQL&gt; select to_char(sysdate,&#8217;dd-mm-yyyy day&#8217;) from dual; <br />
TO_CHAR(SYSDATE,&#8217; <br />
----------------- <br />
09-05-2004 星期日 <br />
trunc(date,fmt)按照给出的要求将日期截断,如果fmt=&#8217;mi&#8217;表示保留分,截断秒 <br />
SQL&gt; select to_char(trunc(sysdate,&#8217;hh&#8217;),&#8217;yyyy.mm.dd hh24:mi:ss&#8217;) hh, <br />
2 to_char(trunc(sysdate,&#8217;mi&#8217;),&#8217;yyyy.mm.dd hh24:mi:ss&#8217;) hhmm from dual; <br />
HH HHMM <br />
------------------- ------------------- <br />
2004.05.09 11:00:00 2004.05.09 11:17:00</p>
<p>42.CHARTOROWID <br />
将字符数据类型转换为ROWID类型 <br />
SQL&gt; select rowid,rowidtochar(rowid),ename from scott.emp; <br />
ROWID ROWIDTOCHAR(ROWID) ENAME <br />
------------------ ------------------ ---------- <br />
AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH <br />
AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN <br />
AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD <br />
AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES</p>
<p>43.CONVERT(c,dset,sset) <br />
将源字符串 sset从一个语言字符集转换到另一个目的dset字符集 <br />
SQL&gt; select convert(&#8217;strutz&#8217;,&#8217;we8hp&#8217;,&#8217;f7dec&#8217;) "conversion" from dual; <br />
conver <br />
------ <br />
strutz</p>
<p>44.HEXTORAW <br />
将一个十六进制构成的字符串转换为二进制</p>
<p>45.RAWTOHEXT <br />
将一个二进制构成的字符串转换为十六进制</p>
<p>46.ROWIDTOCHAR <br />
将ROWID数据类型转换为字符类型</p>
<p>47.TO_CHAR(date,&#8217;format&#8217;) <br />
SQL&gt; select to_char(sysdate,&#8217;yyyy/mm/dd hh24:mi:ss&#8217;) from dual; <br />
TO_CHAR(SYSDATE,&#8217;YY <br />
------------------- <br />
2004/05/09 21:14:41</p>
<p>48.TO_DATE(string,&#8217;format&#8217;) <br />
将字符串转化为ORACLE中的一个日期</p>
<p>49.TO_MULTI_BYTE <br />
将字符串中的单字节字符转化为多字节字符 <br />
SQL&gt; select to_multi_byte(&#8217;高&#8217;) from dual; <br />
TO <br />
-- <br />
高</p>
<p>50.TO_NUMBER <br />
将给出的字符转换为数字 <br />
SQL&gt; select to_number(&#8217;1999&#8217;) year from dual; <br />
YEAR <br />
--------- <br />
1999</p>
<p>51.BFILENAME(dir,file) <br />
指定一个外部二进制文件 <br />
SQL&gt;insert into file_tb1 values(bfilename(&#8217;lob_dir1&#8217;,&#8217;image1.gif&#8217;));</p>
<p>52.CONVERT(&#8217;x&#8217;,&#8217;desc&#8217;,&#8217;source&#8217;) <br />
将x字段或变量的源source转换为desc <br />
SQL&gt; select sid,serial#,username,decode(command, <br />
2 0,&#8217;none&#8217;, <br />
3 2,&#8217;insert&#8217;, <br />
4 3, <br />
5 &#8217;select&#8217;, <br />
6 6,&#8217;update&#8217;, <br />
7 7,&#8217;delete&#8217;, <br />
8 8,&#8217;drop&#8217;, <br />
9 &#8217;other&#8217;) cmd from v$session where type!=&#8217;background&#8217;; <br />
SID SERIAL# USERNAME CMD <br />
--------- --------- ------------------------------ ------ <br />
1 1 none <br />
2 1 none <br />
3 1 none <br />
4 1 none <br />
5 1 none <br />
6 1 none <br />
7 1275 none <br />
8 1275 none <br />
9 20 GAO select <br />
10 40 GAO none</p>
<p>53.DUMP(s,fmt,start,length) <br />
DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值 <br />
SQL&gt; col global_name for a30 <br />
SQL&gt; col dump_string for a50 <br />
SQL&gt; set lin 200 <br />
SQL&gt; select global_name,dump(global_name,1017,8,5) dump_string from global_name; <br />
GLOBAL_NAME DUMP_STRING <br />
------------------------------ -------------------------------------------------- <br />
ORACLE.WORLD Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D</p>
<p>54.EMPTY_BLOB()和EMPTY_CLOB() <br />
这两个函数都是用来对大数据类型字段进行初始化操作的函数</p>
<p>55.GREATEST <br />
返回一组表达式中的最大值,即比较字符的编码大小. <br />
SQL&gt; select greatest(&#8217;AA&#8217;,&#8217;AB&#8217;,&#8217;AC&#8217;) from dual; <br />
GR <br />
-- <br />
AC <br />
SQL&gt; select greatest(&#8217;啊&#8217;,&#8217;安&#8217;,&#8217;天&#8217;) from dual; <br />
GR <br />
-- <br />
天</p>
<p>56.LEAST <br />
返回一组表达式中的最小值 <br />
SQL&gt; select least(&#8217;啊&#8217;,&#8217;安&#8217;,&#8217;天&#8217;) from dual; <br />
LE <br />
-- <br />
啊</p>
<p>57.UID <br />
返回标识当前用户的唯一整数 <br />
SQL&gt; show user <br />
USER 为"GAO" <br />
SQL&gt; select username,user_id from dba_users where user_id=uid; <br />
USERNAME USER_ID <br />
------------------------------ --------- <br />
GAO 25</p>
<p>58.USER <br />
返回当前用户的名字 <br />
SQL&gt; select user from dual; <br />
USER <br />
------------------------------ <br />
GAO</p>
<p>59.USEREVN <br />
返回当前用户环境的信息,opt可以是: <br />
ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE <br />
ISDBA 查看当前用户是否是DBA如果是则返回true <br />
SQL&gt; select userenv(&#8217;isdba&#8217;) from dual; <br />
USEREN <br />
------ <br />
FALSE <br />
SQL&gt; select userenv(&#8217;isdba&#8217;) from dual; <br />
USEREN <br />
------ <br />
TRUE <br />
SESSION <br />
返回会话标志 <br />
SQL&gt; select userenv(&#8217;sessionid&#8217;) from dual; <br />
USERENV(&#8217;SESSIONID&#8217;) <br />
-------------------- <br />
152 <br />
ENTRYID <br />
返回会话人口标志 <br />
SQL&gt; select userenv(&#8217;entryid&#8217;) from dual; <br />
USERENV(&#8217;ENTRYID&#8217;) <br />
------------------ <br />
0 <br />
INSTANCE <br />
返回当前INSTANCE的标志 <br />
SQL&gt; select userenv(&#8217;instance&#8217;) from dual; <br />
USERENV(&#8217;INSTANCE&#8217;) <br />
------------------- <br />
1 <br />
LANGUAGE <br />
返回当前环境变量 <br />
SQL&gt; select userenv(&#8217;language&#8217;) from dual; <br />
USERENV(&#8217;LANGUAGE&#8217;) <br />
---------------------------------------------------- <br />
SIMPLIFIED CHINESE_CHINA.ZHS16GBK <br />
LANG <br />
返回当前环境的语言的缩写 <br />
SQL&gt; select userenv(&#8217;lang&#8217;) from dual; <br />
USERENV(&#8217;LANG&#8217;) <br />
---------------------------------------------------- <br />
ZHS <br />
TERMINAL <br />
返回用户的终端或机器的标志 <br />
SQL&gt; select userenv(&#8217;terminal&#8217;) from dual; <br />
USERENV(&#8217;TERMINA <br />
---------------- <br />
GAO <br />
VSIZE(X) <br />
返回X的大小(字节)数 <br />
SQL&gt; select vsize(user),user from dual; <br />
VSIZE(USER) USER <br />
----------- ------------------------------ <br />
6 SYSTEM</p>
<p><br />
60.AVG(DISTINCT|ALL) <br />
all表示对所有的值求平均值,distinct只对不同的值求平均值 <br />
SQLWKS&gt; create table table3(xm varchar(8),sal number(7,2)); <br />
语句已处理。 <br />
SQLWKS&gt; insert into table3 values(&#8217;gao&#8217;,1111.11); <br />
SQLWKS&gt; insert into table3 values(&#8217;gao&#8217;,1111.11); <br />
SQLWKS&gt; insert into table3 values(&#8217;zhu&#8217;,5555.55); <br />
SQLWKS&gt; commit; <br />
SQL&gt; select avg(distinct sal) from gao.table3; <br />
AVG(DISTINCTSAL) <br />
---------------- <br />
3333.33 <br />
SQL&gt; select avg(all sal) from gao.table3; <br />
AVG(ALLSAL) <br />
----------- <br />
2592.59</p>
<p>61.MAX(DISTINCT|ALL) <br />
求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次 <br />
SQL&gt; select max(distinct sal) from scott.emp; <br />
MAX(DISTINCTSAL) <br />
---------------- <br />
5000</p>
<p>62.MIN(DISTINCT|ALL) <br />
求最小值,ALL表示对所有的值求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次 <br />
SQL&gt; select min(all sal) from gao.table3; <br />
MIN(ALLSAL) <br />
----------- <br />
1111.11</p>
<p>63.STDDEV(distinct|all) <br />
求标准差,ALL表示对所有的值求标准差,DISTINCT表示只对不同的值求标准差 <br />
SQL&gt; select stddev(sal) from scott.emp; <br />
STDDEV(SAL) <br />
----------- <br />
1182.5032 <br />
SQL&gt; select stddev(distinct sal) from scott.emp; <br />
STDDEV(DISTINCTSAL) <br />
------------------- <br />
1229.951</p>
<p>64.VARIANCE(DISTINCT|ALL) <br />
求协方差 <br />
SQL&gt; select variance(sal) from scott.emp; <br />
VARIANCE(SAL) <br />
------------- <br />
1398313.9</p>
<p>65.GROUP BY <br />
主要用来对一组数进行统计 <br />
SQL&gt; select deptno,count(*),sum(sal) from scott.emp group by deptno; <br />
DEPTNO COUNT(*) SUM(SAL) <br />
--------- --------- --------- <br />
10 3 8750 <br />
20 5 10875 <br />
30 6 9400</p>
<p>66.HAVING <br />
对分组统计再加限制条件 <br />
SQL&gt; select deptno,count(*),sum(sal) from scott.emp group by deptno having count(*)&gt;=5; <br />
DEPTNO COUNT(*) SUM(SAL) <br />
--------- --------- --------- <br />
20 5 10875 <br />
30 6 9400 <br />
SQL&gt; select deptno,count(*),sum(sal) from scott.emp having count(*)&gt;=5 group by deptno ; <br />
DEPTNO COUNT(*) SUM(SAL) <br />
--------- --------- --------- <br />
20 5 10875 <br />
30 6 9400</p>
<p>67.ORDER BY <br />
用于对查询到的结果进行排序输出 <br />
SQL&gt; select deptno,ename,sal from scott.emp order by deptno,sal desc; <br />
DEPTNO ENAME SAL <br />
--------- ---------- --------- <br />
10 KING 5000 <br />
10 CLARK 2450 <br />
10 MILLER 1300 <br />
20 SCOTT 3000 <br />
20 FORD 3000 <br />
20 JONES 2975 <br />
20 ADAMS 1100 <br />
20 SMITH 800 <br />
30 BLAKE 2850 <br />
30 ALLEN 1600 <br />
30 TURNER 1500 <br />
30 WARD 1250 <br />
30 MARTIN 1250 <br />
30 JAMES 950</p>
<img src ="http://www.blogjava.net/aczreg/aggbug/304255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aczreg/" target="_blank">咖啡企鹅</a> 2009-11-30 14:28 <a href="http://www.blogjava.net/aczreg/archive/2009/11/30/304255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle表查询(2)</title><link>http://www.blogjava.net/aczreg/archive/2009/11/30/304239.html</link><dc:creator>咖啡企鹅</dc:creator><author>咖啡企鹅</author><pubDate>Mon, 30 Nov 2009 04:16:00 GMT</pubDate><guid>http://www.blogjava.net/aczreg/archive/2009/11/30/304239.html</guid><wfw:comment>http://www.blogjava.net/aczreg/comments/304239.html</wfw:comment><comments>http://www.blogjava.net/aczreg/archive/2009/11/30/304239.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aczreg/comments/commentRss/304239.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aczreg/services/trackbacks/304239.html</trackback:ping><description><![CDATA[<p><strong>多表查询一般表达式：<br />
</strong>SELECT ...tx.cu,...FROM table1 t1，table2 t2,...tablen tn WHERE conditions;...--(conditions.count&gt;=n-1)<br />
首先确定要查询的字段以及要求条件字段会出现在那些表中，从而甄选出table1到tablen共n张表；<br />
为表起个别名（非必须），表名.字段 方式限定查询字段；<br />
分析归纳出限定条件（重点难点），不会少于n-1个；<br />
最后，有其他要求，如排序，酌情添加。<br />
<br />
<strong>自连接查询：</strong><br />
例表：SQL&gt; desc emp;<br />
Name&nbsp;&nbsp;&nbsp;&nbsp; Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Nullable Default Comments <br />
-------- ------------ -------- ------- -------- <br />
EMPNO&nbsp;&nbsp;&nbsp; NUMBER(4)&nbsp;&nbsp;&nbsp;&nbsp;--职员编号&nbsp;&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 />
ENAME&nbsp;&nbsp;&nbsp; VARCHAR2(10) Y&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 />
JOB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(9)&nbsp; Y&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 />
MGR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER(4)&nbsp;&nbsp;&nbsp; Y&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 />
HIREDATE DATE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Y&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 />
SAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER(7,2)&nbsp; Y&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 />
COMM&nbsp;&nbsp;&nbsp;&nbsp; NUMBER(7,2)&nbsp; Y&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 />
DEPTNO&nbsp;&nbsp; NUMBER(2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
问题：查询职员姓名，职员编号，职员上级姓名，职员上级编号；</p>
笨办法：利用SELECT造出另一张表<br />
SELECT emp.ename,emp.empno,empx.ename,empx.empno FROM emp,(SELECT empno,ename FROM emp) empx WHERE emp.mgr = empx.empno;<br />
好办法：利用别名造出另一张表<br />
SELECT cl.ename,cl.empno,ld.ename,ld.empno FROM emp cl,emp ld WHERE cl.mgr=ld.empno; <br />
<br />
<strong>分页查询</strong><br />
1.利用ROWID<br />
SELECT * FROM&nbsp;table WHERE ROWID IN <span style="background-color: #ccffff">(SELECT B.rid FROM <span style="background-color: #00ffff">(SELECT ROWNUM rn,A.rid FROM <span style="background-color: #33cccc"><span style="background-color: #008080">(SELECT ROWID rid FROM&nbsp;table ORDER BY tdid) </span></span>A WHERE ROWNUM&lt;=16380) </span>B WHERE B.rn&gt;=16351)</span> ORDER BY tdid;<br />
a-先按照tdid排序从table中选取ROWID表，另命名为A表；<br />
b-从A表补偿增加ROWNUM列，并A表ROWID列建立新表，并加分页行上限值限制选取最高行数，另命名为B表；<br />
c-从B表选择ROWID，并加分页行下限值选取最低行数，获得分页行的ROWID表；<br />
d-比较c步骤的ROWID表，从table选出相应行，排序，分页。<br />
2.利用ROWNUM<br />
SELECT * FROM (<span style="background-color: #ccffff">SELECT table.*,ROWNUM&nbsp;rn FROM table ORDER BY&nbsp;tdid DESC</span>) A WHERE A.rn BETWEEN 16351 AND 16380;<br />
a-选取table所有列，按照tdid排序，并在最后补偿ROWNUM列建立新表，另命名为A表；<br />
b-从A表选取rn在所取行数范围内的行，分页。<br />
<strong>一般</strong>：利用ROWID效率比利用ROWNUM高。<br />
<img src ="http://www.blogjava.net/aczreg/aggbug/304239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aczreg/" target="_blank">咖啡企鹅</a> 2009-11-30 12:16 <a href="http://www.blogjava.net/aczreg/archive/2009/11/30/304239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）Oracle函数列表速查</title><link>http://www.blogjava.net/aczreg/archive/2009/11/30/304217.html</link><dc:creator>咖啡企鹅</dc:creator><author>咖啡企鹅</author><pubDate>Mon, 30 Nov 2009 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/aczreg/archive/2009/11/30/304217.html</guid><wfw:comment>http://www.blogjava.net/aczreg/comments/304217.html</wfw:comment><comments>http://www.blogjava.net/aczreg/archive/2009/11/30/304217.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aczreg/comments/commentRss/304217.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aczreg/services/trackbacks/304217.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt">PL/SQL单行函数和组函数详解<br />
　函数是一种有零个或多个参数并且有一个返回值的程序。在SQL中Oracle内建了一系列函数，这些函数都可被称为SQL或PL/SQL语句，函数主要分为两大类： </span>
<p>&nbsp;</p>
<p><br />
<span style="font-size: 14pt">　　 单行函数</span></p>
<p><br />
<span style="font-size: 14pt">　　 组函数 </span></p>
<p><br />
<span style="font-size: 14pt">　　本文将讨论如何利用单行函数以及使用规则。</span></p>
<p><br />
<span style="font-size: 14pt">　　SQL中的单行函数</span></p>
<p><br />
<span style="font-size: 14pt">　　SQL和PL/SQL中自带很多类型的函数，有字符、数字、日期、转换、和混合型等多种函数用于处理单行数据，因此这些都可被统称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY等子句中，例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX等单行函数。<br />
SELECT ename,TO_CHAR(hiredate,''day,DD-Mon-YYYY'')FROM empWhere UPPER(ename) Like ''AL%''ORDER BY SOUNDEX(ename)</span></p>
<p><br />
<span style="font-size: 14pt">　　单行函数也可以在其他语句中使用，如update的SET子句，INSERT的VALUES子句，DELET的WHERE子句,认证考试特别注意在SELECT语句中使用这些函数，所以我们的注意力也集中在SELECT语句中。</span></p>
<p><br />
<span style="font-size: 14pt">　　NULL和单行函数</span></p>
<p><br />
<span style="font-size: 14pt">　　在如何理解NULL上开始是很困难的，就算是一个很有经验的人依然对此感到困惑。NULL值表示一个未知数据或者一个空值，算术操作符的任何一个操作数为NULL值，结果均为提个NULL值,这个规则也适合很多函数，只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL值。在这些中NVL函数时最重要的，因为他能直接处理NULL值，NVL有两个参数：NVL(x1,x2),x1和x2都式表达式，当x1为null时返回X2,否则返回x1。</span></p>
<p><br />
<span style="font-size: 14pt">　　下面我们看看emp数据表它包含了薪水、奖金两项，需要计算总的补偿<br />
column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2</span></p>
<p><br />
<span style="font-size: 14pt">　　不是简单的将薪水和奖金加起来就可以了，如果某一行是null值那么结果就将是null，比如下面的例子：<br />
update empset salary=(salary+bonus)*1.1</span></p>
<p><br />
<span style="font-size: 14pt">　　这个语句中，雇员的工资和奖金都将更新为一个新的值，但是如果没有奖金，即 salary + null,那么就会得出错误的结论，这个时候就要使用nvl函数来排除null值的影响。<br />
所以正确的语句是：<br />
update empset salary=(salary+nvl(bonus,0)*1.1<br />
单行字符串函数</span></p>
<p><br />
<span style="font-size: 14pt">　　单行字符串函数用于操作字符串数据，他们大多数有一个或多个参数，其中绝大多数返回字符串</span></p>
<p><br />
<span style="font-size: 14pt">　　ASCII()<br />
　　c1是一字符串，返回c1第一个字母的ASCII码，他的逆函数是CHR()<br />
SELECT ASCII(''A'') BIG_A,ASCII(''z'') BIG_z FROM empBIG_A BIG_z65 122</span></p>
<p><br />
<span style="font-size: 14pt">　　CHR(＜i＞)[NCHAR_CS]<br />
　　i是一个数字，函数返回十进制表示的字符<br />
select CHR(65),CHR(122),CHR(223) FROM empCHR65 CHR122 CHR223A z B</span></p>
<p><br />
<span style="font-size: 14pt">　　CONCAT(,)<br />
　　c1,c2均为字符串，函数将c2连接到c1的后面，如果c1为null,将返回c2.如果c2为null,则返回c1，如果c1、c2都为null，则返回null。他和操作符||返回的结果相同<br />
select concat(''slobo '',''Svoboda'') username from dualusernameslobo Syoboda</span></p>
<p><br />
<span style="font-size: 14pt">　　INITCAP()<br />
　　c1为一字符串。函数将每个单词的第一个字母大写其它字母小写返回。单词由空格，控制字符，标点符号限制。<br />
select INITCAP(''veni,vedi,vici'') Ceasar from dualCeasarVeni,Vedi,Vici</span></p>
<p><br />
<span style="font-size: 14pt">　　INSTR(,[,＜i＞[,]])<br />
　　c1,c2均为字符串，i,j为整数。函数返回c2在c1中第j次出现的位置，搜索从c1的第i个字符开始。当没有发现需要的字符时返回0,如果i为负数，那么搜索将从右到左进行，但是位置的计算还是从左到右，i和j的缺省值为1.<br />
select INSTR(''Mississippi'',''i'',3,3) from dualINSTR(''MISSISSIPPI'',''I'',3,3)11select INSTR(''Mississippi'',''i'',-2,3) from dualINSTR(''MISSISSIPPI'',''I'',3,3)2</span></p>
<p><br />
<span style="font-size: 14pt">　　INSTRB(,[,i[,j])<br />
　　与INSTR（）函数一样，只是他返回的是字节，对于单字节INSTRB()等于INSTR()</span></p>
<p><br />
<span style="font-size: 14pt">　　LENGTH()<br />
　　c1为字符串，返回c1的长度，如果c1为null，那么将返回null值。<br />
select LENGTH(''Ipso Facto'') ergo from dualergo10</span></p>
<p><br />
<span style="font-size: 14pt">　　LENGTHb()<br />
　　与LENGTH()一样，返回字节.</span></p>
<p><br />
<span style="font-size: 14pt">　　lower()<br />
　　返回c的小写字符，经常出现在where子串中<br />
select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE ''%white%''COLORNAMEWinterwhite</span></p>
<p><br />
<span style="font-size: 14pt">　　LPAD(,＜i＞[,])<br />
　　c1,c2均为字符串，i为整数。在c1的左侧用c2字符串补足致长度i,可多次重复，如果i小于c1的长度，那么只返回i那么长的c1字符，其他的将被截去。c2的缺省值为单空格，参见RPAD。<br />
select LPAD(answer,7,'''') padded,answer unpadded from question;PADDED UNPADDED Yes YesNO NOMaybe maybe</span></p>
<p><br />
<span style="font-size: 14pt">　　LTRIM(,)<br />
　　把c1中最左边的字符去掉，使其第一个字符不在c2中，如果没有c2，那么c1就不会改变。<br />
select LTRIM(''Mississippi'',''Mis'') from dualLTRppi</span></p>
<p><br />
<span style="font-size: 14pt">　　RPAD(,＜i＞[,]) <br />
　　在c1的右侧用c2字符串补足致长度i,可多次重复，如果i小于c1的长度，那么只返回i那么长的c1字符，其他的将被截去。c2的缺省值为单空格,其他与LPAD相似</span></p>
<p><br />
<span style="font-size: 14pt">　　RTRIM(,)<br />
　　把c1中最右边的字符去掉，使其第后一个字符不在c2中，如果没有c2，那么c1就不会改变。</span></p>
<p><br />
<span style="font-size: 14pt">　　REPLACE(,[,])<br />
　　c1,c2,c3都是字符串，函数用c3代替出现在c1中的c2后返回。<br />
select REPLACE(''uptown'',''up'',''down'') from dualREPLACEdowntown</span></p>
<p><br />
<span style="font-size: 14pt">　　STBSTR(,＜i＞[,])<br />
　　c1为一字符串，i,j为整数，从c1的第i位开始返回长度为j的子字符串，如果j为空，则直到串的尾部。<br />
select SUBSTR(''Message'',1,4) from dualSUBSMess</span></p>
<p><br />
<span style="font-size: 14pt">　　SUBSTRB(,＜i＞[,])<br />
　　与SUBSTR大致相同，只是I,J是以字节计算。</span></p>
<p><br />
<span style="font-size: 14pt">　　SOUNDEX()<br />
　　返回与c1发音相似的词<br />
select SOUNDEX(''dawes'') Dawes SOUNDEX(''daws'') Daws, SOUNDEX(''dawson'') from dualDawes Daws DawsonD200 D200 D250</span></p>
<p><br />
<span style="font-size: 14pt">　　TRANSLATE(,,)<br />
　　将c1中与c2相同的字符以c3代替<br />
select TRANSLATE(''fumble'',''uf'',''ar'') test from dualTEXTramble </span></p>
<p><br />
<span style="font-size: 14pt">　　TRIM([[]] from c3)<br />
　　将c3串中的第一个，最后一个，或者都删除。<br />
select TRIM('' space padded '') trim from dual TRIMspace padded</span></p>
<p><br />
<span style="font-size: 14pt">　　UPPER()<br />
　　返回c1的大写，常出现where子串中<br />
select name from dual where UPPER(name) LIKE ''KI%''NAMEKING<br />
单行数字函数</span></p>
<p><br />
<span style="font-size: 14pt">　　单行数字函数操作数字数据，执行数学和算术运算。所有函数都有数字参数并返回数字值。所有三角函数的操作数和值都是弧度而不是角度，oracle没有提供内建的弧度和角度的转换函数。</span></p>
<p><br />
<span style="font-size: 14pt">　　ABS()<br />
　　返回n的绝对值</span></p>
<p><br />
<span style="font-size: 14pt">　　ACOS()<br />
　　反余玄函数，返回-1到1之间的数。n表示弧度<br />
select ACOS(-1) pi,ACOS(1) ZERO FROM dualPI ZERO3.14159265 0 </span></p>
<p><br />
<span style="font-size: 14pt">　　ASIN()<br />
　　反正玄函数，返回-1到1，n表示弧度</span></p>
<p><br />
<span style="font-size: 14pt">　　ATAN()<br />
　　反正切函数，返回n的反正切值，n表示弧度。</span></p>
<p><br />
<span style="font-size: 14pt">　　CEIL()<br />
　　返回大于或等于n的最小整数。</span></p>
<p><br />
<span style="font-size: 14pt">　　COS()<br />
　　返回n的余玄值，n为弧度</span></p>
<p><br />
<span style="font-size: 14pt">　　COSH()<br />
　　返回n的双曲余玄值，n 为数字。<br />
select COSH(&lt;1.4&gt;) FROM dualCOSH(1.4)2.15089847</span></p>
<p><br />
<span style="font-size: 14pt">　　EXP()<br />
　　返回e的n次幂，e=2.71828183.</span></p>
<p><br />
<span style="font-size: 14pt">　　FLOOR()<br />
　　返回小于等于N的最大整数。</span></p>
<p><br />
<span style="font-size: 14pt">　　LN()<br />
　　返回N的自然对数，N必须大于0</span></p>
<p><br />
<span style="font-size: 14pt">　　LOG(,)<br />
　　返回以n1为底n2的对数</span></p>
<p><br />
<span style="font-size: 14pt">　　MOD()<br />
　　返回n1除以n2的余数，</span></p>
<p><br />
<span style="font-size: 14pt">　　POWER(,)<br />
　　返回n1的n2次方</span></p>
<p><br />
<span style="font-size: 14pt">　　ROUND(,)<br />
　　返回舍入小数点右边n2位的n1的值，n2的缺省值为0，这回将小数点最接近的整数，如果n2为负数就舍入到小数点左边相应的位上，n2必须是整数。<br />
select ROUND(12345,-2),ROUND(12345.54321,2) FROM dualROUND(12345,-2) ROUND(12345.54321,2)12300 12345.54</span></p>
<p><br />
<span style="font-size: 14pt">　　SIGN()<br />
　　如果n为负数，返回-1,如果n为正数，返回1，如果n=0返回0.</span></p>
<p><br />
<span style="font-size: 14pt">　　SIN（)<br />
　　返回n的正玄值,n为弧度。</span></p>
<p><br />
<span style="font-size: 14pt">　　SINH()<br />
　　返回n的双曲正玄值,n为弧度。</span></p>
<p><br />
<span style="font-size: 14pt">　　SQRT()<br />
　　返回n的平方根,n为弧度</span></p>
<p><br />
<span style="font-size: 14pt">　　TAN（)<br />
　　返回n的正切值,n为弧度</span></p>
<p><br />
<span style="font-size: 14pt">　　TANH()<br />
　　返回n的双曲正切值,n为弧度</span></p>
<p><br />
<span style="font-size: 14pt">　　TRUNC(,)<br />
　　返回截尾到n2位小数的n1的值，n2缺省设置为0，当n2为缺省设置时会将n1截尾为整数，如果n2为负值，就截尾在小数点左边相应的位上。</span></p>
<br />
<br />
<br />
<span style="font-size: 14pt">单行日期函数 </span>
<p>&nbsp;</p>
<p><br />
<span style="font-size: 14pt">　　单行日期函数操作DATA数据类型，绝大多数都有DATA数据类型的参数，绝大多数返回的也是DATA数据类型的值。</span></p>
<p><br />
<span style="font-size: 14pt">　　ADD_MONTHS(,＜i＞)<br />
　　返回日期d加上i个月后的结果。i可以使任意整数。如果i是一个小数，那么数据库将隐式的他转换成整数，将会截去小数点后面的部分。</span></p>
<p><br />
<span style="font-size: 14pt">　　LAST_DAY()<br />
　　函数返回包含日期d的月份的最后一天 </span></p>
<p><br />
<span style="font-size: 14pt">　　MONTHS_BETWEEN(,)<br />
　　返回d1和d2之间月的数目,如果d1和d2的日的日期都相同，或者都使该月的最后一天，那么将返回一个整数，否则会返回的结果将包含一个分数。</span></p>
<p><br />
<span style="font-size: 14pt">　　NEW_TIME(,,)<br />
　　d1是一个日期数据类型，当时区tz1中的日期和时间是d时，返回时区tz2中的日期和时间。tz1和tz2时字符串。</span></p>
<p><br />
<span style="font-size: 14pt">　　NEXT_DAY(,)<br />
　　返回日期d后由dow给出的条件的第一天，dow使用当前会话中给出的语言指定了一周中的某一天，返回的时间分量与d的时间分量相同。<br />
select NEXT_DAY(''01-Jan-2000'',''Monday'') "1st Monday",NEXT_DAY(''01-Nov-2004'',''Tuesday'')+7 "2nd Tuesday") from dual;1st Monday 2nd Tuesday03-Jan-2000 09-Nov-2004 </span></p>
<p><br />
<span style="font-size: 14pt">　　ROUND([,])<br />
　　将日期d按照fmt指定的格式舍入，fmt为字符串。</span></p>
<p><br />
<span style="font-size: 14pt">　　SYADATE<br />
　　函数没有参数，返回当前日期和时间。</span></p>
<p><br />
<span style="font-size: 14pt">　　TRUNC([,]) <br />
　　返回由fmt指定的单位的日期d.<br />
单行转换函数</span></p>
<p><br />
<span style="font-size: 14pt">　　单行转换函数用于操作多数据类型，在数据类型之间进行转换。</span></p>
<p><br />
<span style="font-size: 14pt">　　CHARTORWID()<br />
　　c 使一个字符串，函数将c转换为RWID数据类型。<br />
SELECT test_id from test_case where rowid=CHARTORWID(''AAAA0SAACAAAALiAAA'') </span></p>
<p><br />
<span style="font-size: 14pt">　　CONVERT(,[,])<br />
　　c尾字符串，dset、sset是两个字符集，函数将字符串c由sset字符集转换为dset字符集，sset的缺省设置为数据库的字符集。</span></p>
<p><br />
<span style="font-size: 14pt">　　HEXTORAW()<br />
　　x为16进制的字符串，函数将16进制的x转换为RAW数据类型。</span></p>
<p><br />
<span style="font-size: 14pt">　　RAWTOHEX()<br />
　　x是RAW数据类型字符串，函数将RAW数据类转换为16进制的数据类型。</span></p>
<p><br />
<span style="font-size: 14pt">　　ROWIDTOCHAR()<br />
　　函数将ROWID数据类型转换为CHAR数据类型。</span></p>
<p><br />
<span style="font-size: 14pt">　　TO_CHAR([[,)<br />
　　x是一个data或number数据类型，函数将x转换成fmt指定格式的char数据类型，如果x为日期nlsparm=NLS_DATE_LANGUAGE 控制返回的月份和日份所使用的语言。如果x为数字nlsparm=NLS_NUMERIC_CHARACTERS 用来指定小数位和千分位的分隔符，以及货币符号。<br />
NLS_NUMERIC_CHARACTERS ="dg", NLS_CURRENCY="string"</span></p>
<p><br />
<span style="font-size: 14pt">　　TO_DATE([,[,）<br />
　　c表示字符串，fmt表示一种特殊格式的字符串。返回按照fmt格式显示的c,nlsparm表示使用的语言。函数将字符串c转换成date数据类型。</span></p>
<p><br />
<span style="font-size: 14pt">　　TO_MULTI_BYTE()<br />
　　c表示一个字符串，函数将c的担子截字符转换成多字节字符。</span></p>
<p><br />
<span style="font-size: 14pt">　　TO_NUMBER([,[,)<br />
　　c表示字符串，fmt表示一个特殊格式的字符串，函数返回值按照fmt指定的格式显示。nlsparm表示语言，函数将返回c代表的数字。</span></p>
<p><br />
<span style="font-size: 14pt">　　TO_SINGLE_BYTE()<br />
　　将字符串c中得多字节字符转化成等价的单字节字符。该函数仅当数据库字符集同时包含单字节和多字节字符时才使用</span></p>
<p><br />
<span style="font-size: 14pt">　　其它单行函数</span></p>
<p><br />
<span style="font-size: 14pt">　　BFILENAME( <br />
,)<br />
　　dir是一个directory类型的对象，file为一文件名。函数返回一个空的BFILE位置值指示符，函数用于初始化BFILE变量或者是BFILE列。</span></p>
<p><br />
<span style="font-size: 14pt">　　DECODE(,,[,,,[])<br />
　　x是一个表达式，m1是一个匹配表达式，x与m1比较，如果m1等于x，那么返回r1,否则,x与m2比较，依次类推m3,m4,m5....直到有返回结果。</span></p>
<p><br />
<span style="font-size: 14pt">　　DUMP(,[,[,[,]]])<br />
　　x是一个表达式或字符，fmt表示8进制、10进制、16进制、或则单字符。函数返回包含了有关x的内部表示信息的VARCHAR2类型的值。如果指定了n1,n2那么从n1开始的长度为n2的字节将被返回。</span></p>
<p><br />
<span style="font-size: 14pt">　　EMPTY_BLOB()<br />
　　该函数没有参数，函数返回 一个空的BLOB位置指示符。函数用于初始化一个BLOB变量或BLOB列。</span></p>
<p><br />
<span style="font-size: 14pt">　　EMPTY_CLOB()<br />
　　该函数没有参数，函数返回 一个空的CLOB位置指示符。函数用于初始化一个CLOB变量或CLOB列。</span></p>
<p><br />
<span style="font-size: 14pt">　　GREATEST()<br />
　　exp_list是一列表达式，返回其中最大的表达式，每个表达式都被隐含的转换第一个表达式的数据类型，如果第一个表达式是字符串数据类型中的任何一个，那么返回的结果是varchar2数据类型，同时使用的比较是非填充空格类型的比较。</span></p>
<p><br />
<span style="font-size: 14pt">　　LEAST()<br />
　　exp_list是一列表达式，返回其中最小的表达式，每个表达式都被隐含的转换第一个表达式的数据类型，如果第一个表达式是字符串数据类型中的任何一个，将返回的结果是varchar2数据类型，同时使用的比较是非填充空格类型的比较。</span></p>
<p><br />
<span style="font-size: 14pt">　　UID<br />
　　该函数没有参数，返回唯一标示当前数据库用户的整数。</span></p>
<p><br />
<span style="font-size: 14pt">　　USER<br />
　　返回当前用户的用户名</span></p>
<p><br />
<span style="font-size: 14pt">　　USERENV()<br />
　　基于opt返回包含当前会话信息。opt的可选值为：</span></p>
<p><br />
<span style="font-size: 14pt">　　ISDBA　 　　会话中SYSDBA脚色响应，返回TRUE <br />
　　SESSIONID 　返回审计会话标示符<br />
　　ENTRYID 　　返回可用的审计项标示符 <br />
　　INSTANCE　　在会话连接后，返回实例标示符。该值只用于运行Parallel 服务器并且有 多个实例的情况下使用。<br />
　　LANGUAGE　　返回语言、地域、数据库设置的字符集。<br />
　　LANG　　　　返回语言名称的ISO缩写。<br />
　　TERMINAL　　为当前会话使用的终端或计算机返回操作系统的标示符。</span></p>
<p><br />
<font size="2"><span style="font-size: 14pt">　　VSIZE()<br />
　　x是一个表达式。返回x内部表示的字节数。<br />
<br />
<br />
<span style="background-color: #00ccff"><span><span style="background-color: #ffffff">SQL中的组函数</span></span></span></span></font></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　组函数也叫集合函数，返回基于多个行的单一结果，行的准确数量无法确定，除非查询被执行并且所有的结果都被包含在内。与单行函数不同的是，在解析时所有的行都是已知的。由于这种差别使组函数与单行函数有在要求和行为上有微小的差异.</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　组（多行）函数</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　与单行函数相比，oracle提供了丰富的基于组的，多行的函数。这些函数可以在select或select的having子句中使用，当用于select子串时常常都和GROUP BY一起使用。</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　AVG([{DISYINCT|ALL}])<br />
　　返回数值的平均值。缺省设置为ALL.<br />
SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal) FROM scott.empAVG(SAL) AVG(ALL SAL) AVG(DISTINCT SAL)1877.94118 1877.94118 1916.071413</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　COUNT({*|DISTINCT|ALL} )<br />
　　返回查询中行的数目，缺省设置是ALL,*表示返回所有的行。</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　MAX([{DISTINCT|ALL}])<br />
　　返回选择列表项目的最大值，如果x是字符串数据类型，他返回一个VARCHAR2数据类型，如果X是一个DATA数据类型，返回一个日期，如果X是numeric数据类型，返回一个数字。注意distinct和all不起作用，应为最大值与这两种设置是相同的。</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　MIN([{DISTINCT|ALL}])<br />
　　返回选择列表项目的最小值。</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　STDDEV([{DISTINCT|ALL}])<br />
　　返回选者的列表项目的标准差，所谓标准差是方差的平方根。</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　SUM([{DISTINCT|ALL}])<br />
　　返回选择列表项目的数值的总和。</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　VARIANCE([{DISTINCT|ALL}])<br />
　　返回选择列表项目的统计方差。</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　用GROUP BY给数据分组</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　正如题目暗示的那样组函数就是操作那些已经分好组的数据，我们告诉数据库用GROUP BY怎样给数据分组或者分类，当我们在SELECT语句的SELECT子句中使用组函数时，我们必须把为分组或非常数列放置在GROUP BY子句中，如果没有用group by进行专门处理，那么缺省的分类是将整个结果设为一类。<br />
select stat,counter(*) zip_count from zip_codes GROUP BY state;ST ZIP_COUNT-- ---------AK 360AL 1212AR 1309AZ 768CA 3982</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　在这个例子中，我们用state字段分类；如果我们要将结果按照zip_codes排序,可以用ORDER BY语句，ORDER BY子句可以使用列或组函数。<br />
select stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC;ST COUNT(*)-- --------NY 4312PA 4297TX 4123CA 3982</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　用HAVING子句限制分组数据</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　现在你已经知道了在查询的SELECT语句和ORDER BY子句中使用主函数，组函数只能用于两个子串中，组函数不能用于WHERE子串中，例如下面的查询是错误的：<br />
错误SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept=''OUTSIDE'' AND SUM(sale_amount)&gt;10000 GROUP BY sales_clerk</span></span></span></span></span></p>
<p><br />
<span style="background-color: #00ccff"><span><span style="font-size: 14pt"><span style="background-color: #ffffff"><span style="color: #003366">　　这个语句中数据库不知道SUM()是什么，当我们需要指示数据库对行分组，然后限制分组后的行的输出时，正确的方法是使用HAVING语句：<br />
SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept=''OUTSIDE'' GROUP BY sales_clerkHAVING SUM(sale_amount)&gt;10000;</span></span></span></span></span></p>
<p><br />
<span style="font-size: 14pt">　　嵌套函数</span></p>
<p><br />
<span style="font-size: 14pt">　　函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可继承的执行过程。但函数的优先权只是基于位置，函数遵循由内到外，由左到右的原则。嵌套技术一般用于象DECODE这样的能被用于逻辑判断语句IF....THEN...ELSE的函数。</span></p>
<p><br />
<span style="font-size: 14pt">　　嵌套函数可以包括在组函数中嵌套单行函数，或者组函数嵌套入单行函数或组函数中。比如下面的例子：<br />
SELECT deptno, GREATEST(COUNT(DISTINCT job),COUNT(DISTINCT mgr) cnt,COUNT(DISTINCT job) jobs,COUNT(DISTINCT mgr) mgrsFROM empGROUP BY deptno;DEPTNO CNT JOBS MGRS------ --- ---- ----10 4 4 220 4 3 430 3 3 2 </span></p>
<img src ="http://www.blogjava.net/aczreg/aggbug/304217.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aczreg/" target="_blank">咖啡企鹅</a> 2009-11-30 10:19 <a href="http://www.blogjava.net/aczreg/archive/2009/11/30/304217.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle表查询</title><link>http://www.blogjava.net/aczreg/archive/2009/11/28/304029.html</link><dc:creator>咖啡企鹅</dc:creator><author>咖啡企鹅</author><pubDate>Sat, 28 Nov 2009 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/aczreg/archive/2009/11/28/304029.html</guid><wfw:comment>http://www.blogjava.net/aczreg/comments/304029.html</wfw:comment><comments>http://www.blogjava.net/aczreg/archive/2009/11/28/304029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aczreg/comments/commentRss/304029.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aczreg/services/trackbacks/304029.html</trackback:ping><description><![CDATA[<p><strong>查询时过滤重复行DISTINCT关键字<br />
</strong>如：<br />
SELECT DISTINCT deptno,job FROM emp;<br />
<br />
<strong>NULL运算处理：</strong><br />
NVL判断<br />
如：<br />
SELECT ename,(sal+comm)*12 "annsal" FROM emp;--当comm为null时整个算式为空<br />
SELECT ename,(sal+NVL(comm,0))*12 "annsal" FROM emp;--当comm为null时替换为0<br />
<br />
<strong>LIKE匹配：</strong><br />
%任意个数字符；-单个字符<br />
如：<br />
SELECT * FROM emp WHERE ename LIKE 'S%';<br />
SELECT * FROM emp WHERE ename LIKE 'S__T_';<br />
<br />
<strong>排序ORDER BY 和 ASC 与 DESC</strong><br />
ASC与升序，可省缺；DESC降序<br />
如：<br />
SELECT * FROM emp ORDER BY sal <span style="color: #ffcc00">ASC</span>;<br />
SELECT * FROM emp ORDER BY sal <span style="color: #ff0000">DESC</span>;<br />
--C先按照deptno升序，同deptno里按sal降序<br />
SELECT * FROM emp ORDER BY deptno ASC,sal DESC;<br />
<br />
<strong>排序GROUP BY 与 HAVING<br />
</strong>GROUP BY分组排列，与ORDER BY一样，其后跟字段次序，也就是分组优先次序；&nbsp;<br />
SELECT AVG(sal),MAX(sal),deptno,job FROM emp GROUP BY deptno,job;<br />
HAVING与GROUP BY联合使用，HAVING 后跟条件，下面两句效果是等同的：<br />
SELECT * FROM (SELECT AVG(sal) asal,deptno FROM emp GROUP BY deptno) A WHERE A.asal&gt;2000;<br />
SELECT AVG(sal),DEPTNO FROM emp GROUP BY deptno HAVING AVG(sal)&gt;2000;<br />
<br />
<strong>注：</strong>组函数只能出现在选择列表、HAVING、ORDER BY子句中；<br />
SELECT语句中出现以下三者，其出现顺序限定为GROUP BY、HAVING、ORDER BY；<br />
<br />
</p>
<img src ="http://www.blogjava.net/aczreg/aggbug/304029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aczreg/" target="_blank">咖啡企鹅</a> 2009-11-28 16:59 <a href="http://www.blogjava.net/aczreg/archive/2009/11/28/304029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle表操作</title><link>http://www.blogjava.net/aczreg/archive/2009/11/27/303961.html</link><dc:creator>咖啡企鹅</dc:creator><author>咖啡企鹅</author><pubDate>Fri, 27 Nov 2009 10:34:00 GMT</pubDate><guid>http://www.blogjava.net/aczreg/archive/2009/11/27/303961.html</guid><wfw:comment>http://www.blogjava.net/aczreg/comments/303961.html</wfw:comment><comments>http://www.blogjava.net/aczreg/archive/2009/11/27/303961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aczreg/comments/commentRss/303961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aczreg/services/trackbacks/303961.html</trackback:ping><description><![CDATA[<div class="postbody">
<p><font color="#ff0000"><span style="color: #000000"><span style="font-family: Lucida Console"><strong>增加一个列：</strong><br />
ALTER TABLE 表名 ADD(列名 数据类型);<br />
如：<br />
ALTER TABLE emp ADD(weight NUMBER(5,0));</span></span></font></p>
<font color="#000000">
<p><font color="#ff0000"><span style="color: #000000"><span style="font-family: Lucida Console"><strong>修改一个列的数据类型(一般限于修改长度，修改为一个不同类型时有诸多限制):<br />
</strong>ALTER TABLE 表名 MODIFY(列名 数据类型);<br />
如：<br />
ALTER TABLE emp MODIFY(weight NUMBER(3,0) NOT NULL);<br />
</span></span></font></p>
<p><font color="#ff0000"><span style="color: #000000"><strong><br />
<span style="font-family: Lucida Console">给列改名：</span></strong><br />
<span style="font-family: Lucida Console">ALTER TABLE 表名 RENAME COLUMN 当前列名 TO 新列名;<br />
如：<br />
ALTER TABLE emp RENAME COLUMN weight TO weight_new;</span></span></font></p>
<p><font color="#ff0000"><span style="color: #000000"><span style="font-family: Lucida Console"><strong>删除一个列：</strong><br />
ALTER TABLE 表名 DROP COLUMN 列名;<br />
如：<br />
ALTER TABLE emp DROP COLUMN weight_new;</span></span></font></p>
<p><font color="#ff0000"><span style="color: #000000"><span style="font-family: Lucida Console"><strong>将一个表改名：<br />
</strong>ALTER TABLE 当前表名 RENAME TO 新表名;<br />
如：<br />
ALTER TABLE&nbsp;emp RENAME TO emp_new;<br />
<br />
<strong>删除一个表：</strong><br />
DROP TABLE 表名；<br />
如：<br />
DROP TABLE emp;<br />
<br />
<strong>删除一个表的数据：</strong><br />
DELETE&nbsp;TABLE 表名；<br />
如：<br />
DELETE&nbsp;TABLE emp;<br />
</span></span></font></p>
<br />
<span style="font-family: Lucida Console"><strong>格式化日期在一个SESSIONN中<br />
</strong>ORACLE默认日期格式如:'23-10<span style="color: #ff0000">月</span>-2008'(日-月-年)<br />
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';<br />
<strong><br />
查询空值NULL<br />
</strong>SELECT * FROM&nbsp;表名 WHERE&nbsp;列名 <span style="color: #ff0000">IS</span> NULL;<br />
如：<br />
SELECT * FROM emp WHERE weight <span style="color: #ff0000">IS</span> NULL;<br />
<br />
<strong>更新列值(改字段）<br />
</strong>UPDATE 表名 SET 列名=值 WHERE 条件；<br />
如：<br />
UPDATE emp SET salary=salary+100 WHERE weight &lt;= 80;<br />
</span><br />
<strong>一个SESSION中的SAVEPOINT与ROLLBACK;<br />
</strong>创建SAVEPOINT点：SAVEPOINT 名；<br />
如：<br />
SAVEPOINT a;<br />
<span style="color: #ffcc00">中间进行无COMMIT(提交)动作操作&#8230;&#8230;<br />
</span>回滚到SAVEPOINT: ROLLBACK&nbsp; TO 名;<br />
如：<br />
ROLLBACK TO a;<br />
<br />
</font></div>
<img src ="http://www.blogjava.net/aczreg/aggbug/303961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aczreg/" target="_blank">咖啡企鹅</a> 2009-11-27 18:34 <a href="http://www.blogjava.net/aczreg/archive/2009/11/27/303961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>