目次 | 前の項目 | 次の項目 JDBCTM ガイド: 使用の開始


11 SQL の拡張

SQL-2 エントリレベルの範囲を越える SQL 機能の中には、広くサポートされているものがあり、このような機能の移植性に依存するアプリケーションのために、JDBC に準拠した定義の一部として取り入れることが求められます。一方、ANSI による SQL 準拠定義のさらに高いレベルである SQL-2 トランジショナルレベルは、まだ広くサポートされていません。トランジショナルレベルのセマンティクスがサポートされている場合でも、その構文は DBMS によってしばしば異なります。

したがって、JDBC-Compliant(TM) ドライバがサポートしなければならない SQL-2 エントリレベルの拡張としては、次の 2 種類が定義されています。

Microsoft が定義する ODBC Core SQL をサポートする ODBC ドライバは、この項で定義する JDBC SQL に準拠しています。

11.1     SQL エスケープ構文

JDBC がサポートする DBMS に依存しないエスケープ構文は、ODBC でストアドプロシージャ、スカラー関数、日付、時刻、および外部結合に対して使われているものと同じです。ドライバは、このエスケープ構文を DBMS 固有の構文に変換し、対象となっている機能を必要とするアプリケーションプログラムの移植性を保証します。DBMS に依存しない構文は、中括弧で区切られたエスケープ節とキーワードで構成されます。

{keyword ... parameters ...}

ODBC 互換のこのエスケープ構文は、一般に、同じ機能に対して ANSI が SQL-2 トランジショナルレベルで採用している構文と同じではありません。使う DBMS がすべて標準の SQL-2 構文をサポートしている場合は、ここで示したエスケープ構文の代わりに、標準構文を使うことが推奨されます。十分な数の DBMS がさらに広範に SQL-2 の構文とセマンティクスをサポートするようになれば、このエスケープ構文は必要なくなります。

11.2     ストアドプロシージャ

次は、JDBC でストアドプロシージャを起動する構文です。

{call procedure_name[(argument1, argument2, ...)]}

結果のパラメータを返すプロシージャの場合は、次の構文を使います。

{?= call procedure_name[(argument1, argument2, ...)]}

入力引数には、リテラルまたはパラメータを指定できます。ストアドプロシージャがサポートされているかどうかを調べるには、DatabaseMetaData.supportsStoredProcedure メソッドを使います。

11.3     時刻と日付のリテラル

日付、時刻、およびタイムスタンプのリテラルに使う構文は、DBMS ごとに異なります。JDBC は、これらのリテラルの構文については ISO の標準形式をサポートし、ドライバが DBMS 固有の表現に変換するエスケープ節を使っています。

次は、JDBC の SQL 文で日付を指定するときの構文です。

{d 'yyyy-mm-dd'}

yyyy-mm-dd では、1996-02-28 のように、年、月、日を指定します。ドライバは、このエスケープ節を、DBMS 固有の同等の表現に変換します。たとえば、Oracle の場合は、「Feb 28, 1996」のようになります。

TIME と TIMESTAMP にも同様のエスケープ節があります。

{t 'hh:mm:ss'}

{ts 'yyyy-mm-dd hh:mm:ss.f...'}

TIMESTAMP の秒の小数部分 (.f...) は省略できます。

11.4     スカラー関数

JDBC は、スカラー値に対して、数値、文字列、時刻、日付、システム、および変換の各関数をサポートしています。スカラー関数は、目的の関数名と引数の前にキーワード「fn」を付けて示します。たとえば、2 つの文字列を連結するには、concat 関数を使います。

{fn concat("Hot", "Java")}

現在のユーザの名前は、次の構文で取得できます。

{fn user()}

スカラー関数のセマンティクスの仕様については、X/Open CLI または ODBC の仕様を参照してください。参考のため、サポートされている関数の一覧を次に示します。ドライバの中には、一部の関数だけをサポートしているものもあります。 サポートされている関数を調べるには、DatabaseMetaData の次のメソッドを使います。getNumericFunctions() メソッドからは、サポートされている数値関数の名前をコンマで区切った一覧が返されます。 getStringFunctions() メソッドからは、同じ形式の文字列関数の一覧が返されます。

ほかのメソッドについても同様です。 数値関数は、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) です。

文字列関数は、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) です。

時刻と日付の関数は、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) です。

システム関数は、DATABASE()、IFNULL(expression, value)、および USER() です。

CONVERT(value, SQLtype) という式もあり、データ型には BIGINT、BINARY、BIT、CHAR、DATE、DECIMAL、DOUBLE、FLOAT、INTEGER、LONGVARBINARY、LONGVARCHAR、REAL、SMALLINT、TIME、TIMESTAMP、TINYINT、VARBINARY、および VARCHAR を指定できます。

これらの関数の構文は、DBMS の種類によってわずかに違います。 ドライバは、これらの構文を適切な構文にマッピングしたり、またはドライバ内で関数を直接実装したりします。

11.5     LIKE エスケープ文字

文字「%」と「_」は、SQL の LIKE 節の中では特別な意味があります。 それぞれが、0 個以上の文字との一致、1 個の文字との一致を表わします。これらをそのまま文字として解釈させるには、文字列の中で特殊なエスケープ文字 (「\」など) を前に付けて示します。エスケープ文字を指定するには、クエリーの最後に次の構文を追加します。

{escape 'escape-character'}

次はエスケープ文字を指定したクエリーの例です。

SELECT NAME FROM IDENTIFIERS WHERE ID LIKE '\_%' {escape '\'}

この例では、下線で始まる識別子名を検索しています。

11.6     外部結合

外部結合の構文は次のとおりです。

{oj outer-join}

outer-join は、次の形式で指定します。

table LEFT OUTER JOIN {table | outer-join} ON search-condition

外部結合については、SQL の文法の解説を参照してください。ドライバがサポートする外部結合の種類を調べるには、DatabaseMetaData で提供されている 3 つの boolean 型メソッドを使います。



目次 | 前の項目 | 次の項目
jdbc@wombat.eng.sun.com または jdbc-odbc@wombat.eng.sun.com
Copyright © 1996, 1997 Sun Microsystems, Inc. All rights reserved.