Uso delle sequenze di escape SQL

Scaricare il driver JDBC

Il driver Microsoft JDBC per SQL Server supporta l'uso di sequenze di escape SQL, in base a quanto definito dall'API JDBC. Le sequenze di escape vengono usate all'interno di un'istruzione SQL per indicare al driver che la parte di escape della stringa SQL deve essere gestita in modo diverso. Quando il driver JDBC elabora la parte di escape di una stringa SQL, converte tale parte della stringa in codice SQL comprensibile per SQL Server.

L'API JDBC richiede cinque tipi di sequenze di escape, tutti supportati dal driver JDBC:

  • Valori letterali dei caratteri jolly LIKE
  • Gestione delle funzioni
  • Valori letterali di data e ora
  • Chiamate di procedure memorizzate
  • Join esterni
  • Sintassi di escape per Limit

La sintassi della sequenza di escape utilizzata dal driver JDBC è la seguente:

{keyword ...parameters...}

Nota

L'elaborazione delle sequenze di escape SQL è sempre attivata per il driver JDBC.

Nelle sezioni seguenti vengono descritti i cinque tipi di sequenze di escape e viene illustrato in che modo sono supportati dal driver JDBC:

Valori letterali dei caratteri jolly LIKE

Il driver JDBC supporta la sintassi {escape 'escape character'} per usare i caratteri jolly della clausola LIKE come caratteri letterali. Il codice seguente restituisce, ad esempio, i valori per col3 se il valore di col2 inizia letteralmente con un carattere di sottolineatura (e non nel caso di utilizzo del carattere jolly).

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

Nota

La sequenza di escape deve essere alla fine dell'istruzione SQL. Se vi sono più istruzioni SQL in una stringa di comando, la sequenza di escape deve essere alla fine di ogni istruzione SQL rilevante.

Gestione delle funzioni

Il driver JDBC supporta le sequenze di escape delle funzioni nelle istruzioni SQL con la sintassi seguente:

{fn functionName}  

dove functionName è una funzione supportata dal driver JDBC. Ad esempio:

SELECT {fn UCASE(Name)} FROM Employee  

Nella tabella seguente sono elencate le varie funzioni supportate dal driver JDBC in caso di utilizzo di una sequenza di escape delle funzioni:

Funzioni stringa Funzioni numeriche Funzioni data/ora Funzioni di sistema
ASCII

CHAR

CONCAT

DIFFERENZA

INSERT

LCASE

SINISTRA

LUNGHEZZA

LOCATE

LTRIM

Ripeti

REPLACE

RIGHT

RTRIM

SOUNDEX

SPACE

SUBSTRING

UCASE
ABS

ACOS

ASIN

ATAN

ATAN2

SOFFITTO

COS

COT

GRADI

EXP

PIANO

LOG

LOG10

MOD

PI

POWER

RADIANS

RAND

ROTONDO

FIRMA

SIN

SQRT

TAN

TRONCA
CURDATE

CURTIME

DAYNAME

DAYOFMONTH

DAYOFWEEK

GIORNO DELL'ANNO

EXTRACT

ORA

MINUTO

MONTH

MONTHNAME

NOW

TRIMESTRE

SECONDO

TIMESTAMPADD

TIMESTAMPDIFF

SETTIMANA

ANNO
DATABASE

IFNULL

USER

Nota

Se si tenta di utilizzare una funzione non supportata dal database, si verifica un errore.

Valori letterali di data e ora

La sintassi di escape per i valori letterali data, ora e timestamp è la seguente:

{literal-type 'value'}  

dove literal-type è uno dei valori seguenti:

Tipo letterale Descrizione Formato del valore
d Data aaaa-mm-gg
t Tempo hh:mm:ss [1]
ts TimeStamp aaaa-mm-gg hh:mm:ss[.f...]

Ad esempio:

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

Chiamate di procedure memorizzate

Il driver JDBC supporta la sintassi di escape {? = call proc_name(?,...)} e {call proc_name(?,...)} per le chiamate di stored procedure, a seconda che si debba o meno elaborare un parametro restituito.

Una stored procedure è un oggetto eseguibile memorizzato nel database. In genere, si tratta di una o più istruzioni SQL precompilate. La sintassi della sequenza di escape per la chiamata di un stored procedure è la seguente:

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

dove procedure-name specifica il nome di una stored procedure e parameter specifica un parametro della stored procedure.

Per ulteriori informazioni sull'utilizzo della sequenza di escape call con le procedure memorizzate, vedere Utilizzo di istruzioni con procedure memorizzate.

Join esterni

Il driver JDBC supporta la sintassi left, right e full outer join SQL92. La sequenza di escape per gli outer join è la seguente:

{oj outer-join}  

dove il join esterno è:

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

dove table-reference è il nome di una tabella e search-condition è la condizione di join che si desidera usare per le tabelle.

Ad esempio:

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'  

Le sequenze di escape dell'outer join seguenti sono supportate dal driver JDBC:

  • Left outer join
  • Right outer join
  • Join esterni completi
  • Join esterne annidate

Sintassi di escape per Limit

Nota

La sintassi di escape per LIMIT è supportata solo da Microsoft JDBC Driver 4.2 (o versioni successive) per SQL Server quando si usa JDBC 4.1 o versione successiva.

La sintassi di escape per LIMIT è la seguente:

LIMIT <rows> [OFFSET <row offset>]  

La sintassi di escape è costituita da due parti: l'elemento <rows> è obbligatorio e specifica il numero di righe da restituire. Gli elementi OFFSET e <row offset> sono facoltativi e specificano il numero di righe da ignorare prima di iniziare a restituire le righe. Il driver JDBC supporta solo la parte obbligatoria trasformando la query per l'utilizzo di TOP invece di LIMIT. SQL Server non supporta la clausola LIMIT. Il driver JDBC non supporta l'elemento <row offset> facoltativo e se tale elemento viene usato il driver genera un'eccezione.

Vedi anche

Uso delle istruzioni con il driver JDBC