?? jdbc-spec.frame11.html
字號(hào):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=gb2312">
<title></title>
</head>
<body bgcolor="#ffffff">
<table width="600">
<tr>
<td><font size="-1"><a href="jdbc-spec.frame.html">目錄</a> | <a
href="jdbc-spec.frame10.html">上一頁</a> | <a href="jdbc-spec.frame12.html">下一頁</a>
</font></td>
<td align="right"><i>JDBC<sup><font size="-2">TM</font></sup> 指南:入門</i></td>
</tr>
</table>
<hr>
<p><br>
<a name="7105"></a> </p>
<h2>11 SQL 擴(kuò)展</h2>
<p>某些超越 SQL-2 入門級(jí)的 SQL 功能已得到廣泛支持,因此值得放在
JDBC 兼容定義中,以便應(yīng)用程序能利用這些功能的可移值性。但是,ANSI
定義的下一個(gè)更高級(jí) SQL 兼容標(biāo)準(zhǔn)(即 SQL-2
過渡級(jí))卻只得到小范圍的支持。在 DBMS 中過渡級(jí)語義<em>得到</em>支持的地方,語法通常各不相同。
</p>
<p><a name="36101"></a>因此我們?yōu)?SQL-2 入門級(jí)定義了兩類必須能被
JDBC-Compliant(TM) 驅(qū)動(dòng)程序支持的擴(kuò)展:
<ul>
<p><a name="36102"></a></p>
<li>選擇性過渡級(jí)語法和語義是必須得到支持的。我們目前只要求一種這樣的功能:為和
JDBC 兼容,需要 DROP TABLE 命令。<br>
<br>
<a name="36034"></a> </li>
<li>選擇性過渡級(jí)語義必須得到轉(zhuǎn)義語法的支持。驅(qū)動(dòng)程序可以容易地將該轉(zhuǎn)義語法掃描并解釋成
DBMS 特定的語法。我們將在<a href="jdbc-spec.frame11.html#7105">第 11 節(jié)</a>的剩余部分討論這些轉(zhuǎn)義語法。注意:只有在基本數(shù)據(jù)庫支持相應(yīng)過渡級(jí)語義的地方才需支持這些轉(zhuǎn)義。
<br>
<br>
</li>
</ul>
<p><a name="36086"></a></p>
<p>由 Microsoft 定義的、支持 ODBC 核心 SQL 的 ODBC
驅(qū)動(dòng)程序與本節(jié)定義的 JDBC SQL 一致。 </p>
<p><a name="36019"></a> </p>
<h3>11.1 SQL 轉(zhuǎn)義語法</h3>
<p>對(duì)于存儲(chǔ)過程、標(biāo)量函數(shù)、日期、時(shí)間和外部連接,JDBC 和 ODBC
一樣都支持 DBMS 無關(guān)轉(zhuǎn)義語法。驅(qū)動(dòng)程序?qū)⒋宿D(zhuǎn)義語法映射為 DBMS
特定的語法,從而使需要這些功能的應(yīng)用程序具有可移植性。DBMS
無關(guān)語法基于由大括號(hào)和關(guān)鍵字界定的轉(zhuǎn)義子句: </p>
<pre><code>{ 關(guān)鍵字 ... 參數(shù) ...}
</code></pre>
<p><a name="25513"></a>該符合 ODBC 標(biāo)準(zhǔn)的轉(zhuǎn)義語法一般來說<em>不</em>同于
ANSI 在 SQL-2 過渡級(jí)中所采用的同功能轉(zhuǎn)義語法。如果所有想要的 DBMSs
都支持標(biāo)準(zhǔn) SQL-2 語法,則建議用戶使用標(biāo)準(zhǔn) SQL-2
語法而不是這些轉(zhuǎn)義語法。當(dāng)有足夠的 DBMSs 支持更高級(jí)的 SQL-2
語法和語義時(shí),這些轉(zhuǎn)義語法將不再有用。 </p>
<p><a name="16957"></a> </p>
<h3>11.2 存儲(chǔ)過程</h3>
<p>調(diào)用 JDBC 中存儲(chǔ)過程的語法是: </p>
<pre><code>{call procedure_name[(argument1, argument2, ...)]}
</code></pre>
<p>或者,也可返回結(jié)果參數(shù),其語法是: </p>
<pre><code>{?= call procedure_name[(argument1, argument2, ...)]}
</code></pre>
<p><a name="16998"></a>輸入變量既可以是文字也可以是參數(shù)。要確定是否支持存儲(chǔ)過程,可調(diào)用
DatabaseMetaData.supportsStoredProcedure。 </p>
<p><a name="16992"></a> </p>
<p><a name="16922"></a> </p>
<h3>11.3 時(shí)間和日期文字</h3>
<p>DBMS 用于日期、時(shí)間和時(shí)間戳文字方面的語法各不相同。JDBC
支持這些文字語法的 ISO
標(biāo)準(zhǔn)格式,而所利用的就是驅(qū)動(dòng)程序必須將其轉(zhuǎn)換成 DBMS
表示形式的轉(zhuǎn)義子句。 </p>
<p><a name="17040"></a>例如,可以利用該語法在 JDBC SQL
語句指定日期的表示形式為: </p>
<pre><code>{d `yyyy-mm-dd'}
</code></pre>
<p><a name="17014"></a>其中 yyyy-mm-dd 給出年月日,例如 1996-02-28。驅(qū)動(dòng)程序?qū)⒂玫葍r(jià)的
DBMS 特定表示形式代替該轉(zhuǎn)義子句(例如對(duì)于 Oracle 為“Feb 28, 1996”)。
</p>
<p><a name="17002"></a>TIME 和 TIMESTAMP 的轉(zhuǎn)義子句有相似之處: </p>
<pre><code>{t `hh:mm:ss'}
</code></pre>
<p> </p>
<pre><code>{ts `yyyy-mm-dd hh:mm:ss.f...'}
</code></pre>
<p><a name="20739"></a>TIMESTAMP 秒 (.f...) 的小數(shù)部分可以略去。 </p>
<p><a name="17045"></a> </p>
<h3>11.4 標(biāo)量函數(shù)</h3>
<p>JDBC
在標(biāo)量值方面支持?jǐn)?shù)值型、字符串、時(shí)間、日期、系統(tǒng)和轉(zhuǎn)換函數(shù)。這些函數(shù)的表示法是:關(guān)鍵字“
fn ”+ 函數(shù)名及其參數(shù)。例如,連接兩個(gè)字符串的函數(shù) concat: </p>
<pre><code>{fn concat("Hot", "Java")}
</code></pre>
<p>當(dāng)前用戶名可用下面語法獲得: </p>
<pre><code>{fn user()}
</code></pre>
<p>請(qǐng)參見 X/Open CLI 或 ODBC
規(guī)范中有關(guān)標(biāo)量函數(shù)語義的規(guī)范。這里所列的受支持函數(shù)僅供參考,某些驅(qū)動(dòng)程序可能不完全支持這些函數(shù)。要確定支持哪些函數(shù),請(qǐng)使用下列
DatabaseMe tadata 方法:getNumericFunctions()
返回一個(gè)逗號(hào)分隔的、所支持的數(shù)值型函數(shù)名的列表。getStringFunctions()
與前者相同,只是針對(duì)的是字符串函數(shù),如此類推。 </p>
<p>受支持的數(shù)值型函數(shù)有:ABS(number), ACOS(float), ASIN(float), ATAN(float),
ATAN2(float1, float2), CEILING(number), COS(float), COT(float), DEGREES(number),
EXP(float), FLOOR(number), LOG(float), LOG10(float), MOD(integer1, integer2), PI(),
POWER(number, power), RADIANS(number), RAND(integer), ROUND(number, places), SIGN(number),
SIN(float), SQRT(float), TAN(float) 和 TRUNCATE(number, places)。 </p>
<p>受支持的字符串函數(shù)有:ASCII(string), CHAR(code), CONCAT(string1, string2),
DIFFERENCE(string1, string2), INSERT(string1, start, length, string2), LCASE(string),
LEFT(string, count), LENGTH(string), LOCATE(string1, string2, start), LTRIM(string),
REPEAT(string, count), REPLACE(string1, string2, string3), RIGHT(string, count),
RTRIM(string), SOUNDEX(string), SPACE(count), SUBSTRING(string, start, length) 和
UCASE(string)。 </p>
<p><a name="17144"></a>受支持的時(shí)間函數(shù)有:CURDATE(), CURTIME(), DAYNAME(date),
DAYOFMONTH(date), DAYHOFWEEK(date), DAYOFYEAR(date), HOUR(time), MINUTE(time),
MONTH(time), MONTHNAME(date), NOW(), QUARTER(date), SECOND(time), TIMESTAMPADD(interval,
count, timestamp), TIMESTAMPDIFF(interval, timestamp1, timpestamp2), WEEK(date) 和
YEAR(date)。 </p>
<p><a name="17147"></a>受支持的系統(tǒng)函數(shù)有:DATABASE(), IFNULL(expression, value)
和 USER()。 </p>
<p><a name="17148"></a>此外還包括 CONVERT(value, SQLtype)
表達(dá)式,其中類型可以是:BIGINT, BINARY, BIT, CHAR, DATE, DECIMAL, DOUBLE,
FLOAT, INTEGER, LONGVARBINARY, LONGVARCHAR, REAL, SMALLINT, TIME, TIMESTAMP, TINYINT,
VARBINARY 和 VARCHAR。 </p>
<p><a name="17127"></a>另外,DBMS
也支持這些函數(shù),只是語法略為不同。驅(qū)動(dòng)程序的任務(wù)不是將它們映射到合適的語法就是直接在驅(qū)動(dòng)程序中實(shí)現(xiàn)這些函數(shù)。
</p>
<p><a name="25549"></a> </p>
<h3>11.5 LIKE 轉(zhuǎn)義符</h3>
<p>字符“%”和“_”在 SQL LIKE 子句中有特殊含義(“%”匹配 0
個(gè)或更多的字符,“-”只匹配一個(gè)字符)。如果要引用這些字符的原意,則需要在字符串中這些字符的前面加上專門的轉(zhuǎn)義字符,如“\”。為指定用于引用這些字符原意的轉(zhuǎn)義符,可在查詢語句的末尾加上下列語法:
</p>
<pre><code>{escape `<em>escape-character</em>'}
</code></pre>
<p>例如,查詢語句 </p>
<pre><code>SELECT NAME FROM IDENTIFIERS WHERE ID LIKE `\_%' {escape `\'}
</code></pre>
<p><a name="25577"></a>將查找以下劃線開頭的標(biāo)識(shí)符名稱。 </p>
<p><a name="25527"></a> </p>
<h3>11.6 外部連接</h3>
<p>外部連接的語法是: </p>
<pre><code>{oj outer-join}
</code></pre>
<p><a name="17191"></a>其中的 outer-join 與下述語法中 outer-join
的形式一致: </p>
<pre><code>table LEFT OUTER JOIN {table | outer-join} ON search-condition
</code></pre>
<p><a name="25489"></a>有關(guān)外部連接的詳細(xì)說明,參見 SQL
語法。我們提供了三種布爾 DatabaseMetaData
方法,可用于確定驅(qū)動(dòng)程序所支持的外部連接類型。 </p>
<p><br>
</p>
<hr>
<font size="-1"><a href="jdbc-spec.frame.html">
<p>目錄</a> | <a href="jdbc-spec.frame10.html">上一頁</a> | <a
href="jdbc-spec.frame12.html">下一頁</a> </font></p>
<hr>
<address>
<a href="mailto:jdbc@wombat.eng.sun.com">jdbc@wombat.eng.sun.com</a> 或 <a
href="mailto:jdbc-odbc@wombat.eng.sun.com">jdbc-odbc@wombat.eng.sun.com</a>
</address>
<a href="../../../relnotes/SMICopyright.html"><font size="-1"><i>
<p>版權(quán)所有© 1996 1997 Sun Microsystems, Inc. 保留所有權(quán)利。</i></font></a>
<!-- HTML generated by Suzette Pelouch on April 10, 1998 --></p>
</body>
</html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -