Empleo de secuencias de escape de SQL

Descargar controlador JDBC

El controlador Microsoft JDBC Driver para SQL Server permite el uso de secuencias de escape SQL, según se define en la API JDBC. Las secuencias de escape se usan dentro de una instrucción SQL para indicar al controlador que la parte de la secuencia de escape de la cadena SQL se debería tratar de forma diferente. Cuando el controlador JDBC procesa la parte con caracteres de escape de una cadena de SQL, traduce esa parte de la cadena a código SQL que SQL Server puede interpretar.

Hay cinco tipos de secuencias de escape que la API JDBC requiere, y el controlador JDBC las admite todas:

  • Literales comodín de LIKE
  • Gestión de funciones
  • Literales de fecha y hora
  • Llamadas a procedimientos almacenados
  • Combinaciones externas
  • Sintaxis de escape de LIMIT

La sintaxis de las secuencias de escape que usa el controlador JDBC es la siguiente:

{keyword ...parameters...}

Nota

El proceso de escape SQL siempre está activado para el controlador JDBC.

En las secciones siguientes se describen los cinco tipos de secuencias de escape y cómo las admite el controlador JDBC.

Literales con comodines LIKE

El controlador JDBC admite la sintaxis {escape 'escape character'} para utilizar los comodines de la cláusula LIKE como caracteres literales. Por ejemplo, el código siguiente devolverá valores para col3, donde el valor de col2 comienza literalmente con un guión (y no con su uso como comodín).

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

Nota

La secuencia de escape debe estar al final de la instrucción SQL. Para que haya varias instrucciones SQL en una cadena de comandos, la secuencia de escape tiene que estar al final de cada instrucción SQL pertinente.

Manejo de funciones

El controlador JDBC admite las secuencias de escape de funciones en instrucciones SQL con la sintaxis siguiente:

{fn functionName}  

donde functionName es una función que admite el controlador JDBC. Por ejemplo:

SELECT {fn UCASE(Name)} FROM Employee  

En la tabla siguiente se muestran las diversas funciones que el controlador JDBC admite al usar un flujo de escape de funciones.

Funciones de cadenas Funciones numéricas Funciones de fecha y hora Funciones del sistema
ASCII

CHAR

CONCAT

DIFERENCIA

INSERT

LCASE

IZQUIERDA

LONGITUD

Localizar

LTRIM

REPETIR

REPLACE

DERECHA

RTRIM

SOUNDEX

ESPACIO

subcadena

UCASE
ABS

ACOS

ASIN

ATAN

ATAN2

TECHO

COS

COT

GRADOS

EXP

SUELO

Registro

LOG10

MOD

PI

POWER

RADIANS

RAND

ROUND

FIRMAR

SIN

SQRT

TAN

TRUNCAR
CURDATE

CURTIME

DAYNAME

DAYOFMONTH

DAYOFWEEK

DAYOFYEAR

EXTRACT

HORA

MINUTO

MES

MONTHNAME

AHORA

TRIMESTRE

SEGUNDO

TIMESTAMPADD

TIMESTAMPDIFF

SEMANA

AÑO
DATABASE

IFNULL

USER

Nota

Si intenta utilizar una función que la base de datos no admita, se producirá un error.

Literales de fecha y hora

La sintaxis de las secuencias de escape para los literales de fecha, hora y marca de tiempo es la siguiente:

{literal-type 'value'}  

donde literal-type es uno de los siguientes:

Tipo literal Descripción Formato del valor
d Fecha aaaa-mm-dd
t Tiempo hh:mm:ss [1]
ts TimeStamp yyyy-mm-dd hh:mm:ss[.f...]

Por ejemplo:

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

Llamadas a procedimientos almacenados

El controlador JDBC es compatible con la sintaxis de escape {? = call proc_name(?,...)} y {call proc_name(?,...)} para las llamadas a procedimientos almacenados, según si tiene que procesar un parámetro de devolución.

Un procedimiento almacenado es un objeto ejecutable almacenado en la base de datos. Normalmente, se trata de una o varias instrucciones SQL compiladas. La sintaxis de las secuencias de escape para llamar a un procedimiento almacenado es la siguiente:

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

donde procedure-name y parameter especifican el nombre y un parámetro de un procedimiento almacenado, respectivamente.

Para obtener más información acerca de cómo usar la secuencia de escape call con los procedimientos almacenados, consulte Usar instrucciones con procedimientos almacenados.

Combinaciones externas

El controlador JDBC admite la sintaxis SQL92 de combinación izquierda, derecha y externa completa. La secuencia de escape para las combinaciones externas es la siguiente:

{oj outer-join}  

donde la combinación externa es:

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

donde table-reference es un nombre de tabla y search-condition es la condición de combinación que quiere usar para las tablas.

Por ejemplo:

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'  

Se admiten las siguientes secuencias de escape para combinaciones externas en el controlador JDBC:

  • Combinaciones externas izquierdas
  • Combinaciones externas derechas
  • Combinaciones externas completas
  • Combinaciones externas anidadas

Sintaxis de escape de LIMIT

Nota

La sintaxis de escape de LIMIT solo se admite en Microsoft JDBC Driver 4.2 (o superior) para SQL Server al usar JDBC 4.1 o una versión posterior.

La sintaxis de escape de LIMIT se describe a continuación:

LIMIT <rows> [OFFSET <row offset>]  

La sintaxis de escape tiene dos partes: <rows> es obligatorio y especifica el número de filas que se devolverán. OFFSET y <row offset> son opcionales y especifican el número de filas que se omiten antes de empezar a devolver filas. El controlador JDBC solo admite el elemento obligatorio al transformar la consulta para que use TOP en lugar de LIMIT. SQL Server no admite la cláusula de LIMIT. El controlador JDBC no admite el argumento opcional <row offset> y el controlador producirá una excepción si se usa.

Consulte también

Uso de instrucciones con el controlador JDBC