Como usar sequências de escape do SQL

Baixar o JDBC Driver

O Microsoft JDBC Driver for SQL Server dá suporte ao uso de sequências de escape do SQL, conforme definido pela API JDBC. As sequências de escape são usadas em uma instrução SQL para informar ao driver que a parte de escape da cadeia de caracteres SQL deve ser tratada de forma diferente. Quando o driver JDBC processa a parte de escape de uma cadeia de caracteres SQL, ele converte essa parte da cadeia de caracteres em código SQL que o SQL Server entende.

Há cinco tipos de sequências de escape requeridas pela API JDBC e todos têm o suporte do driver JDBC:

  • Literais do curinga LIKE
  • Manipulação de função
  • Literais de data e hora
  • Chamadas de procedimento armazenado
  • Junções externas
  • Sintaxe de escape de limite

A sintaxe da sequência de escape usada pelo driver JDBC é a seguinte:

{keyword ...parameters...}

Observação

O processamento de escape do SQL sempre fica ativado no driver JDBC.

As seções a seguir descrevem os cinco tipos de sequências de escape e como elas têm o suporte do driver JDBC.

Literais de curinga do LIKE

O driver JDBC oferece suporte à sintaxe {escape 'escape character'} para usar caracteres curinga da cláusula LIKE como literais. Por exemplo, o código a seguir retornará valores para col3, onde o valor de col2 começa literalmente com um sublinhado (e não seu uso de curinga).

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

Observação

A sequência de escape deve estar no fim da instrução SQL. Para várias instruções SQL em uma cadeia de caracteres de comando, a sequência de escape precisa estar no fim de cada instrução SQL pertinente.

Manipulação de função

O driver JDBC dá suporte às sequências de escape de função em instruções SQL com a seguinte sintaxe:

{fn functionName}  

em que functionName é uma função compatível com o driver JDBC. Por exemplo:

SELECT {fn UCASE(Name)} FROM Employee  

A tabela a seguir lista as várias funções que têm o suporte do driver JDBC ao usar uma sequência de escape de função:

Funções de String Funções numéricas Funções de data e hora Funções de sistema
ASCII

CHAR

CONCAT

DIFERENÇA

INSERT

LCASE

ESQUERDA

LENGTH

Localizar

LTRIM

REPETIR

REPLACE

DIREITA

RTRIM

SOUNDEX

ESPAÇO

SUBSTRING

UCASE
ABS

ACOS

ASIN

ATAN

ATAN2

CEILING

COS

COT

DEGREES

EXP

PISO

LOG

LOG10

MOD

PI

ENERGIA

RADIANS

RAND

ROUND

Assinar

SIN

SQRT

TAN

TRUNCAR
CURDATE

CURTIME

DAYNAME

DAYOFMONTH

DAYOFWEEK

DAYOFYEAR

Extrair

HORA

MINUTO

MÊS

MONTHNAME

AGORA

TRIMESTRE

SEGUNDO

TIMESTAMPADD

TIMESTAMPDIFF

SEMANA

ANO
DATABASE

IFNULL

USER

Observação

Se você tentar usar uma função que não tenha o suporte do banco de dados, ocorrerá um erro.

Literais de data e hora

A sintaxe de escape para literais de data, hora e timestamp é a seguinte:

{literal-type 'value'}  

em que literal-type é um dos seguintes:

Tipo literal Descrição Formato do valor
d Data aaaa-mm-dd
t Hora hh:mm:ss [1]
ts TimeStamp aaaa-mm-dd hh:mm:ss[.f...]

Por exemplo:

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

Chamadas de procedimento armazenado

O driver JDBC é compatível com as sintaxes de escape {? = call proc_name(?,...)} e {call proc_name(?,...)} para chamadas de procedimento armazenado, dependendo da necessidade de processar um parâmetro de retorno.

Um procedimento é um objeto executável armazenado no banco de dados. Em geral, é uma ou mais instruções SQL que foram pré-compiladas. A sintaxe da sequência de escape para chamar um procedimento armazenado é a seguinte:

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

em que procedure-name especifica o nome de um procedimento armazenado e parameter especifica um parâmetro de procedimento armazenado.

Para obter mais informações sobre o uso da sequência de escape call com procedimentos armazenados, confira Como usar instruções com procedimentos armazenados.

Junções externas

O driver JDBC dá suporte à sintaxe de junção externa esquerda, direita e completa do SQL92. A sequência de escape de junções externas é a seguinte:

{oj outer-join}  

onde junção externa é:

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

em que table-reference é um nome de tabela e search-condition é a condição de junção que você deseja usar para as tabelas.

Por exemplo:

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'  

As seguintes sequências de escape de junção externa têm o suporte do driver JDBC:

  • Junções externas à esquerda
  • Junções externas direitas
  • Junções externas completas
  • Junções externas aninhadas

Limitar sintaxe de escape

Observação

A sintaxe de escape LIMIT é compatível apenas com o Microsoft JDBC Driver 4.2 (ou superior) para SQL Server ao usar JDBC 4.1 ou superior.

A sintaxe de escape LIMIT é da seguinte maneira:

LIMIT <rows> [OFFSET <row offset>]  

A sintaxe de escape tem duas partes: <rows> é obrigatória e especifica o número de linhas a serem retornadas. OFFSET e <deslocamento de linha> são opcionais e especificam o número de linhas a serem ignoradas antes de começar a retornar as linhas. O driver JDBC dá suporte apenas à parte obrigatória, transformando a consulta para usar TOP em vez de LIMIT. O SQL Server não d suporte à cláusula LIMIT. O driver JDBC não oferece suporte ao <deslocamento de linha> opcional, e lançará uma exceção se ele for usado.

Confira também

Como usar instruções com o JDBC Driver