Uso delle sequenze di escape SQL
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 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 per i valori 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 | Time | 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.