Compartir vía


Empleo de secuencias de escape de SQL

Descargar controlador JDBC

El Microsoft JDBC Driver para SQL Server admite el uso de secuencias de escape SQL, según se define en la API de JDBC. Las secuencias de escape se usan dentro de una instrucción SQL para indicar al controlador que la parte de escape de la cadena SQL debe controlarse de forma diferente. Cuando el controlador JDBC procesa la parte de escape de una cadena SQL, traduce esa parte de la cadena en código SQL que SQL Server entiende.

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

  • Literales comodín LIKE
  • Tratamiento 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 comodín LIKE

El controlador JDBC admite la sintaxis de {escape 'escape character'} para usar comodines de cláusulas LIKE como 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.

Tratamiento 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 cadena Funciones numéricas Funciones de fecha y hora Funciones del sistema
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

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 de literal Descripción Formato del valor
d Date aaaa-mm-dd
t Time hh:mm:ss [1]
ts TimeStamp aaaa-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 de combinación externa completa, derecha e izquierda de SQL92. La secuencia de escape para las combinaciones externas es:

{oj outer-join}  

donde outer-join 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'  

El controlador JDBC admite las siguientes secuencias de escape de combinaciones externas:

  • 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

Empleo de instrucciones con el controlador JDBC