Использование escape-последовательностей SQLUsing SQL escape sequences

СкачатьСкачать драйвер JDBCDownloadDownload JDBC Driver

Microsoft JDBC Driver для SQL ServerMicrosoft JDBC Driver for SQL Server поддерживает использование escape-последовательностей SQL, описанных в определении API JDBC.The Microsoft JDBC Driver для SQL ServerMicrosoft JDBC Driver for SQL Server supports the use of SQL escape sequences, as defined by the JDBC API. Escape-последовательности используются в инструкции SQL для передачи драйверу сведений о том, что экранированные части SQL-строки должны обрабатываться иначе.Escape sequences are used within an SQL statement to tell the driver that the escaped part of the SQL string should be handled differently. При обработке драйвером JDBC части escape-последовательности SQL-строки выполняется преобразование этой части строки в SQL-код, распознаваемый SQL Server.When the JDBC driver processes the escaped part of an SQL string, it translates that part of the string into SQL code that SQL Server understands.

Существует пять типов escape-последовательностей, требуемых API JDBC, и все они поддерживаются драйвером JDBC:There are five types of escape sequences that the JDBC API requires, and all are supported by the JDBC driver:

  • Литералы-шаблоны LIKELIKE wildcard literals
  • Обработка функцийFunction handling
  • Литералы даты и времениDate and time literals
  • Вызовы хранимых процедурStored procedure calls
  • Внешние соединенияOuter joins
  • Escape-синтаксис LIMITLimit escape syntax

Драйвер JDBC использует следующий синтаксис escape-последовательности:The escape sequence syntax used by the JDBC driver is the following:

{keyword ...parameters...}

Примечание

Для драйвера JDBC всегда включена обработка escape-последовательностей SQL.SQL escape processing is always turned on for the JDBC driver.

В следующих разделах описывается пять типов escape-последовательностей и способы их поддержки драйвером JDBC.The following sections describe the five types of escape sequences and how they are supported by the JDBC driver.

Литералы-шаблоны LIKELIKE wildcard literals

Драйвер JDBC поддерживает синтаксис {escape 'escape character'} для использования шаблонов предложения LIKE в качестве литералов.The JDBC driver supports the {escape 'escape character'} syntax for using LIKE clause wildcards as literals. Например, в следующем коде возвращаются значения col3, для которых значение col2 начинается с символа подчеркивания (и не используется как шаблон).For example, the following code will return values for col3, where the value of col2 literally begins with an underscore (and not its wildcard usage).

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

Примечание

Escape-последовательность должна быть в конце инструкции SQL.The escape sequence must be at the end of the SQL statement. При наличии в командной строке нескольких инструкций SQL escape-последовательность должна быть в конце каждой соответствующей инструкции SQL.For multiple SQL statements in a command string, the escape sequence needs to be at the end of each relevant SQL statement.

Обработка функцийFunction handling

Драйвер JDBC поддерживает использование escape-последовательностей функций в инструкциях SQL со следующим синтаксисом:The JDBC driver supports function escape sequences in SQL statements with the following syntax:

{fn functionName}  

где functionName представляет собой функцию, поддерживаемую драйвером JDBC.where functionName is a function supported by the JDBC driver. Пример:For example:

SELECT {fn UCASE(Name)} FROM Employee  

В следующей таблице перечислены различные функции, поддерживаемые драйвером JDBC при использовании escape-последовательностей функций:The following table lists the various functions that are supported by the JDBC driver when using a function escape sequence:

Строковые функцииString Functions Числовые функцииNumeric Functions Функции DatetimeDatetime Functions Системные функцииSystem Functions
ASCIIASCII

CHARCHAR

CONCATCONCAT

DIFFERENCEDIFFERENCE

INSERTINSERT

LCASELCASE

LEFTLEFT

LENGTHLENGTH

LOCATELOCATE

LTRIMLTRIM

REPEATREPEAT

REPLACEREPLACE

RIGHTRIGHT

RTRIMRTRIM

SOUNDEXSOUNDEX

SPACESPACE

SUBSTRINGSUBSTRING

UCASEUCASE
ABSABS

ACOSACOS

ASINASIN

ATANATAN

ATAN2ATAN2

CEILINGCEILING

COSCOS

COTCOT

DEGREESDEGREES

EXPEXP

FLOORFLOOR

LOGLOG

LOG10LOG10

MODMOD

PIPI

POWERPOWER

RADIANSRADIANS

RANDRAND

ROUNDROUND

SIGNSIGN

SINSIN

SQRTSQRT

TANTAN

TRUNCATETRUNCATE
CURDATECURDATE

CURTIMECURTIME

DAYNAMEDAYNAME

DAYOFMONTHDAYOFMONTH

DAYOFWEEKDAYOFWEEK

DAYOFYEARDAYOFYEAR

EXTRACTEXTRACT

HOURHOUR

MINUTEMINUTE

MONTHMONTH

MONTHNAMEMONTHNAME

NOWNOW

QUARTERQUARTER

SECONDSECOND

TIMESTAMPADDTIMESTAMPADD

TIMESTAMPDIFFTIMESTAMPDIFF

WEEKWEEK

YEARYEAR
DATABASEDATABASE

IFNULLIFNULL

ПользовательUSER

Примечание

Использование функции, не поддерживаемой базой данных, приведет к возникновению ошибки.If you try to use a function that the database does not support, an error will occur.

Литералы даты и времениDate and time literals

Ниже приводится синтаксис escape-последовательности для литералов даты, времени и отметок времени:The escape syntax for date, time, and timestamp literals is the following:

{literal-type 'value'}  

где literal-type является одним из следующих:where literal-type is one of the following:

Тип литералаLiteral Type ОписаниеDescription Формат значенияValue Format
dd ДатаDate гггг-мм-ддyyyy-mm-dd
tt TimeTime чч:мм:сс [1]hh:mm:ss [1]
tsts TimeStampTimeStamp гггг-мм-дд чч:мм:сс[.f...]yyyy-mm-dd hh:mm:ss[.f...]

Пример:For example:

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

Вызовы хранимых процедурStored procedure calls

Драйвер JDBC поддерживает синтаксис escape-последовательностей {? = call proc_name(?,...)} и {call proc_name(?,...)} для вызовов хранимых процедур, в зависимости от того, требуется ли обработка возвращаемого параметра.The JDBC driver supports the {? = call proc_name(?,...)} and {call proc_name(?,...)} escape syntax for stored procedure calls, depending on whether you need to process a return parameter.

Процедура представляет собой исполняемый объект, который хранится в базе данных.A procedure is an executable object stored in the database. Обычно процедурой является одна или несколько заранее скомпилированных инструкций SQL.Generally, it is one or more SQL statements that have been precompiled. Ниже приводится синтаксис escape-последовательности вызова хранимой процедуры:The escape sequence syntax for calling a stored procedure is the following:

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

где procedure-name указывает имя хранимой процедуры, а parameter указывает параметр хранимой процедуры.where procedure-name specifies the name of a stored procedure and parameter specifies a stored procedure parameter.

См. сведения об использовании escape-последовательностей call с хранимыми процедурами.For more information about using the call escape sequence with stored procedures, see Using Statements with Stored Procedures.

Внешние соединенияOuter joins

Драйвер JDBC поддерживает синтаксис левого, правого и полного внешнего соединения SQL92.The JDBC driver supports the SQL92 left, right, and full outer join syntax. Ниже приводится синтаксис escape-последовательности для внешних соединений:The escape sequence for outer joins is the following:

{oj outer-join}  

где внешнее соединение:where outer-join is:

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

где table-reference является именем таблицы, а search-condition представляет собой условия соединения, которые необходимо использовать для таблиц.where table-reference is a table name and search-condition is the join condition you want to use for the tables.

Пример:For example:

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 поддерживает следующие escape-последовательности внешнего соединения:The following outer join escape sequences are supported by the JDBC driver:

  • Левые внешние соединенияLeft outer joins
  • Правые внешние соединенияRight outer joins
  • Полные внешние соединенияFull outer joins
  • Вложенные внешние соединенияNested outer joins

Escape-синтаксис LIMITLimit escape syntax

Примечание

Escape-синтаксис LIMIT поддерживается только драйвером Microsoft JDBC Driver 4.2 (и более поздних версий) для SQL Server при использовании JDBC 4.1 или более поздней версии.The LIMIT escape syntax is only supported by Microsoft JDBC Driver 4.2 (or higher) for SQL Server when using JDBC 4.1 or higher.

Escape-синтаксис LIMIT выглядит следующим образом:The escape syntax for LIMIT is as follows:

LIMIT <rows> [OFFSET <row offset>]  

Escape-синтаксис состоит из двух частей: <строки> — это обязательная часть, которая указывает число возвращаемых строк.The escape syntax has two parts: <rows> is mandatory and specifies the number of rows to return. OFFSET и <смещение строки> — это необязательные компоненты, указывающие число строк, которые необходимо пропустить перед началом получения строк.OFFSET and <row offset> are optional and specify the number of rows to skip before beginning to return rows. Драйвер JDBC поддерживает только обязательную часть, преобразуя запрос для использования TOP вместо LIMIT.The JDBC driver supports only the mandatory part by transforming the query to use TOP instead of LIMIT. SQL Server не поддерживает предложение LIMIT.SQL Server does not support the LIMIT clause. Драйвер JDBC не поддерживает необязательную часть <смещение строки>. При ее использовании драйвер вызовет исключение.The JDBC driver does not support the optional <row offset> and the driver will throw an exception if it is used.

См. также разделSee also

Использование инструкций с JDBC DriverUsing statements with the JDBC driver