使用 SQL 逸出序列

下載下載 JDBC 驅動程式

Microsoft JDBC Driver for SQL Server 支援使用 SQL 逸出序列,如 JDBC API 所定義。 逸出序列用於 SQL 陳述式,以告知驅動程式 SQL 字串的逸出部分應以不同的方式處理。 當 JDBC 驅動程式處理 SQL 字串的逸出部分時,它會將該部分的字串轉譯為 SQL Server 了解的 SQL 程式碼。

JDBC API 需要的逸出序列有五種,而且這五種都受到 JDBC 驅動程式的支援:

  • LIKE 萬用字元常值
  • 函數處理
  • 日期和時間常值
  • 預存程序呼叫
  • 外部聯結
  • LIMIT 逸出語法

JDBC 驅動程式所使用的逸出序列語法如下:

{keyword ...parameters...}

注意

JDBC 驅動程式的 SQL 逸出處理永遠保持開啟狀態。

下列幾節描述五種逸出序列,以及它們如何受到 JDBC 驅動程式支援。

LIKE 萬用字元常值

JDBC 驅動程式支援使用 LIKE 子句萬用字元作為常值的 {escape 'escape character'} 語法。 例如,下列程式碼將會傳回 col3 的值,其中 col2 的值會實際以底線開頭 (而非其萬用字元用法)。

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

記錄

LOG10

MOD

PI

POWER

RADIANS

RAND

ROUND

SIGN

SIN

SQRT

TAN

TRUNCATE
CURDATE

CURTIME

DAYNAME

DAYOFMONTH

DAYOFWEEK

DAYOFYEAR

EXTRACT

HOUR

MINUTE



MONTHNAME

NOW

QUARTER

SECOND

TIMESTAMPADD

TIMESTAMPDIFF

WEEK

DATABASE

IFNULL

USER

注意

如果您嘗試使用資料庫不支援的函數,將會發生錯誤。

日期和時間常值

日期、時間和時間戳記常值的逸出語法如下:

{literal-type 'value'}  

其中 literal-type 是下列其中之一:

常值類型 描述 值格式
d Date yyyy-mm-dd
t Time hh:mm:ss [1]
ts TimeStamp 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(?,...)} 逸出語法,視您是否需要處理傳回參數而定。

程序是一種儲存在資料庫中的可執行物件。 通常,它是先行編譯的一或多個 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 驅動程式支援下列外部聯結逸出序列:

  • 左方外部聯結
  • 右方外部聯結
  • 完整外部聯結
  • 巢狀外部聯結

LIMIT 逸出語法

注意

在使用 JDBC 4.1 或更高版本時,LIMIT 逸出語法只受 Microsoft JDBC Driver 4.2 (更高版本) for SQL server 支援。

LIMIT 的逸出語法如下:

LIMIT <rows> [OFFSET <row offset>]  

Escape 語法有兩個部分: <rows> 是必要的,而且會指定要傳回的資料列數目。 OFFSET 和 <row offset> 是選擇性的,並指定開始傳回資料列之前要略過的資料列數目。 JDBC 驅動程式只支援必要的部分,方法是轉換查詢為使用 TOP,而非 LIMIT。 SQL Server 不支援 LIMIT 子句。 JDBC 驅動程式不支援選擇性 <row offset> ,驅動程式將會擲回例外狀況(如果使用 的話)。

另請參閱

搭配 JDBC 驅動程式使用陳述式