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 utilizzate all'interno di un'istruzione SQL per indicare al driver che la parte della stringa SQL per cui vengono utilizzati caratteri di escape deve essere gestita in modo diverso. Quando la parte della stringa SQL per cui vengono utilizzati caratteri di escape viene elaborata dal driver JDBC, tale parte viene tradotta in codice SQL compreso da 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 data e ora
  • Chiamate di stored procedure
  • Outer join
  • 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 l'uso dei caratteri jolly della clausola LIKE come valori 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 di stringa Funzioni numeriche Funzioni data/ora Funzioni di sistema
ASCII

CHAR

CONCAT

DIFFERENCE

INSERT

LCASE

LEFT

LENGTH

LOCATE

LTRIM

Ripetere…

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

GIORNOANNO

EXTRACT

HOUR

MINUTE

MONTH

MONTHNAME

NOW

QUARTER

SECOND

TIMESTAMPADD

TIMESTAMPDIFF

WEEK

YEAR
DATABASE

IFNULL

USER

Nota

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

Valori letterali 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 di valore letterale Descrizione Formato del valore
d Data aaaa-mm-gg
t Ora 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 stored procedure

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 archiviato 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 altre informazioni sull'uso della sequenza di escape call con le stored procedure, vedere Uso delle istruzioni con le stored procedure.

Outer join

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 outer-join è:

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
  • Full outer join
  • Outer join nidificati

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