Sdílet prostřednictvím


Použití escape sekvencí SQL

Stáhnout ovladač JDBC

Ovladač Microsoft JDBC pro SQL Server podporuje použití únikových sekvencí SQL, jak je definováno v rozhraní JDBC API. Escape sekvence se používají v příkazu SQL k tomu, aby sdělily ovladači, že uniková část řetězce SQL by měla být zpracována odlišně. Když ovladač JDBC zpracuje escapovanou část řetězce SQL, přeloží tuto část řetězce do kódu SQL, kterému SQL Server rozumí.

Existuje pět typů únikových sekvencí požadovaných rozhraním API JDBC, přičemž všechny jsou podporovány ovladačem JDBC.

  • Zástupné znaky LIKE
  • Zpracování funkcí
  • Literály data a času
  • Volání uložených procedur
  • Vnější spojení
  • Omezení syntaxe úniku

Syntaxe escape sekvence používaná ovladačem JDBC je následující:

{keyword ...parameters...}

Poznámka:

Zpracování escape sekvencí SQL je vždy zapnuté pro ovladač JDBC.

Následující části popisují pět typů únikových sekvencí a jejich podporu ovladačem JDBC.

LIKE zástupné znaky literálů

Ovladač JDBC podporuje {escape 'escape character'} syntaxi pro použití zástupných znaků klauzule LIKE jako literály. Například následující kód vrátí hodnoty pro sloupec 3, kde hodnota sloupce2 doslova začíná podtržítkem (a ne jejím použitím se zástupnými znaky).

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

Poznámka:

Řídicí sekvence musí být na konci příkazu SQL. U více příkazů SQL v příkazovém řetězci musí být escape sekvence na konci každého relevantního SQL příkazu.

Zpracování funkcí

Ovladač JDBC podporuje únikové sekvence funkcí v příkazech SQL s následující syntaxí:

{fn functionName}  

kde functionName je funkce podporovaná ovladačem JDBC. Například:

SELECT {fn UCASE(Name)} FROM Employee  

Následující tabulka uvádí různé funkce podporované ovladačem JDBC při použití únikové sekvence funkce:

Řetězcové funkce Číselné funkce Funkce DateTime Systémové funkce
standard ASCII

CHAR

CONCAT

DIFFERENCE

INSERT

LCASE

LEFT

Délka

VYHLEDEJTE

LTRIM

OPAKUJTE

REPLACE

RIGHT

RTRIM

SOUNDEX

SPACE

SUBSTRING

UCASE
ABS

ACOS

ASIN

ATAN

ATAN2

CEILING

COS

COT

DEGREES

EXP

FLOOR

LOG

LOG10

MOD

PI

POWER

RADIÁNY

RAND

ROUND

SIGN

SIN

SQRT

TAN

ZKRÁTIT
CURDATE

CURTIME

DenNázev

DENOFMONTH

DAYOFWEEK

DEN_ROKU

EXTRAKT

HOUR

MINUTE

MONTH

NÁZEV MĚSÍCE

TEĎ

ČTVRT

SECOND

TIMESTAMPADD

TIMESTAMPDIFF

TÝDEN

YEAR
DATABASE

IFNULL

USER

Poznámka:

Pokud se pokusíte použít funkci, kterou databáze nepodporuje, dojde k chybě.

Literály data a času

Úniková syntaxe pro literály data, času a časového razítka je následující:

{literal-type 'value'}  

kde literal-type je jedna z následujících možností:

Typ literálu Description Formát hodnoty
d Date yyyy-mm-dd
t Time hh:mm:ss [1]
Ts Časové razítko yyyy-mm-dd hh:mm:ss[.f...]

Například:

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

Volání uložených procedur

Ovladač JDBC podporuje syntaxi escape {? = call proc_name(?,...)} a {call proc_name(?,...)} pro volání uložených procedur, v závislosti na tom, zda potřebujete zpracovat návratový parametr.

Procedura je spustitelný objekt uložený v databázi. Obecně platí, že jde o jeden nebo více příkazů SQL, které byly předkompilovány. Syntaxe únikové sekvence pro volání uložené procedury je následující:

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

kde procedure-name určuje název uložené procedury a parameter určuje parametr uložené procedury.

Další informace o použití call escape sekvence s uloženými procedurami naleznete v části Použití příkazů s uloženými procedurami.

Vnější spojení

Ovladač JDBC podporuje syntaxi levého, pravého a úplného vnějšího spojení SQL92. Sekvence pro escape pro vnější spojení je následující:

{oj outer-join}  

kde vnější spojení je:

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

kde table-reference je název tabulky a search-condition jedná se o podmínku spojení, kterou chcete použít pro tabulky.

Například:

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'  

Ovladač JDBC podporuje následující řídicí sekvence vnějšího spojení:

  • Levé vnější sloučení
  • Pravé vnější spojení
  • Úplná vnější spojení
  • Vnořené vnější spojení

Omezení syntaxe úniku

Poznámka:

Syntaxe escape LIMIT je podporována pouze ovladačem Microsoft JDBC Driver 4.2 (nebo vyšší) pro SQL Server při použití verze JDBC 4.1 nebo vyšší.

Úniková syntaxe pro LIMIT je následující:

LIMIT <rows> [OFFSET <row offset>]  

Syntaxe pro únik má dvě části: <řádky> jsou povinné a určují počet řádků, které se mají vrátit. POSUN a <řádkový posun> jsou volitelné a určují počet řádků, které se mají přeskočit před začátkem vracení řádků. Ovladač JDBC podporuje pouze povinnou část tím, že transformuje dotaz tak, aby místo LIMIT používal TOP. SQL Server nepodporuje klauzuli LIMIT. Ovladač JDBC nepodporuje volitelný <posun> řádku a ovladač vyvolá výjimku, pokud je použit.

Viz také

Použití příkazů s ovladačem JDBC