次の方法で共有


SQL エスケープ シーケンスの使用

Microsoft SQL Server JDBC Driver は、JDBC API の定義に従って、SQL エスケープ シーケンスの使用をサポートしています。SQL ステートメント内のエスケープ シーケンスは、SQL 文字列のエスケープ部分を異なる方法で処理することを、JDBC ドライバに指示するために使用します。JDBC ドライバが SQL 文字列のエスケープ部分を処理すると、文字列の該当部分は SQL Server が理解する SQL コードに変換されます。

JDBC API で要求されるエスケープ シーケンスには 5 つの種類があり、すべて JDBC ドライバによってサポートされています。

  • LIKE ワイルドカード リテラル

  • 関数処理

  • 日付および時刻のリテラル

  • ストアド プロシージャ呼び出し

  • 外部結合

JDBC ドライバで使用されるエスケープ シーケンスの構文は、次のとおりです。

{keyword ...parameters...}

注メモ :

SQL のエスケープ処理は、JDBC ドライバに対して常に有効化されています。

以下のセクションでは、5 つの種類のエスケープ シーケンスと、それらが JDBC ドライバでどのようにサポートされているかについて説明します。

LIKE ワイルドカード リテラル

JDBC ドライバは、LIKE 句でワイルドカードをリテラルとして使用する {escape 'escape character'} 構文をサポートします。たとえば次のコードでは、col2 の値が (ワイルドカードとしてではなく) 文字どおりアンダースコアで始まっている行の col3 の値が返されます。

ResultSet rst = stmt.executeQuery("SELECT col3 FROM test1 WHERE col2 
LIKE '\\_%' {escape '\\'}");
注メモ :

エスケープ シーケンスは、SQL ステートメントの末尾に置く必要があります。コマンド文字列内に複数の SQL ステートメントがある場合、エスケープ シーケンスは該当する各 SQL ステートメントの末尾に置く必要があります。

関数処理

JDBC ドライバは、次の構文で SQL ステートメント内の関数エスケープ シーケンスをサポートしています。

{fn functionName}

functionName は、JDBC ドライバでサポートされている関数です。次に例を示します。

SELECT {fn UCASE(Name)} FROM Employee

次の表は、JDBC ドライバで関数エスケープ シーケンスを使用する場合にサポートされている、さまざまな関数を示します。

文字列関数 数値関数 日付時刻関数 システム関数

ASCII

CHAR

CONCAT

DIFFERENCE

INSERT

LCASE

LEFT

LENGTH

LOCATE

LTRIM

REPEAT

REPLACE

RIGHT

RTRIM

SOUNDEX

SPACE

SUBSTRING

UCASE

ABS

ACOS

ASIN

ATAN

ATAN2

CEILING

COS

COT

DEGREES

EXP

FLOOR

LOG

LOG10

MOD

PI

POWER

RADIANS

RAND

ROUND

SIGN

SIN

SQRT

TAN

TRUNCATE

CURDATE

CURTIME

DAYNAME

DAYOFMONTH

DAYOFWEEK

DAYOFYEAR

EXTRACT

HOUR

MINUTE

MONTH

MONTHNAME

NOW

QUARTER

SECOND

TIMESTAMPADD

TIMESTAMPDIFF

WEEK

YEAR

DATABASE

IFNULL

USER

注メモ :

データベースでサポートされていない関数を使用すると、エラーが発生します。

日付および時刻のリテラル

日付、時刻、およびタイムスタンプのリテラルに使用するエスケープ構文は、次のとおりです。

{literal-type 'value'}

ここで literal-type は、次のいずれかです。

リテラルの種類 説明 値の形式

d

日付

yyyy-mm-dd

t

時刻

hh:mm:ss [1]

ts

タイムスタンプ

yyyy-mm-dd hh:mm:ss[.f...]

次に例を示します。

UPDATE Orders SET OpenDate={d '2005-01-31'} 
WHERE OrderID=1025

ストアド プロシージャ呼び出し

JDBC ドライバでは、ストアド プロシージャ呼び出しについては、戻りパラメータを処理する必要があるかどうかによって、{? = call proc_name(?,...)} および {call proc_name(?,...)} というエスケープ構文がサポートされています。

プロシージャは、データベースに格納されている実行可能なオブジェクトです。これは通常、プリコンパイルされた 1 つ以上の SQL ステートメントです。ストアド プロシージャを呼び出すためのエスケープ シーケンス構文は、次のとおりです。

{[?=]call procedure-name[([parameter][,[parameter]]...)]}

procedure-name にはストアド プロシージャの名前を指定し、parameter にはストアド プロシージャのパラメータを指定します。

ストアド プロシージャで call エスケープ シーケンスを使用する方法の詳細については、「ストアド プロシージャでのステートメントの使用」を参照してください。

外部結合

JDBC ドライバでは、SQL92 の左外部結合、右外部結合、および完全外部結合で使用する構文がサポートされています。外部結合用のエスケープ シーケンスは、次のとおりです。

{oj outer-join}

outer-join の内容は次のとおりです。

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

table-reference はテーブル名で、search-condition はテーブルで使用する結合条件です。

次に例を示します。

SELECT Customers.CustID, Customers.Name, Orders.OrderID, Orders.Status 
   FROM {oj Customers LEFT OUTER JOIN 
      Orders ON Customers.CustID=Orders.CustID} 
   WHERE Orders.Status='OPEN'

JDBC ドライバでは、次の外部結合エスケープ シーケンスがサポートされています。

  • 左外部結合

  • 右外部結合

  • 完全外部結合

  • 入れ子になった外部結合

参照

その他の技術情報

JDBC ドライバでのステートメントの使用