SQL 이스케이프 시퀀스 사용
Microsoft JDBC Driver for SQL Server는 JDBC API에 정의된 대로 SQL 이스케이프 시퀀스의 사용을 지원합니다. 이스케이프 시퀀스는 SQL 문 내에서 SQL 문자열의 이스케이프된 부분을 다르게 처리해야 함을 드라이버에 알리는 데 사용됩니다. JDBC 드라이버는 SQL 문자열의 이스케이프된 부분을 처리할 때 해당 문자열 부분을 SQL Server가 이해하는 SQL 코드로 변환합니다.
JDBC API에 필요한 5가지 유형의 이스케이프 시퀀스가 있으며 모두 JDBC 드라이버에서 지원됩니다.
- LIKE 와일드카드 리터럴
- 함수 처리
- 날짜 및 시간 리터럴
- 저장 프로시저 호출
- 외부 조인
- Limit 이스케이프 구문
JDBC 드라이버에서 사용하는 이스케이프 시퀀스 구문은 다음과 같습니다.
{keyword ...parameters...}
참고 항목
JDBC 드라이버의 경우 SQL 이스케이프 처리가 항상 설정되어 있습니다.
다음 섹션에서는 5가지 유형의 이스케이프 시퀀스와 JDBC 드라이버에서 지원하는 방법을 설명합니다.
LIKE 와일드카드 리터럴
JDBC 드라이버는 LIKE 절 와일드카드를 리터럴로 사용하기 위한 {escape 'escape character'}
구문을 지원합니다. 예를 들어 다음 코드는 col3에 대한 값을 반환합니다. 여기서 col2 값은 문자 그대로 밑줄로 시작합니다(와일드카드 사용법이 아님).
ResultSet rst = stmt.executeQuery("SELECT col3 FROM test1 WHERE col2
LIKE '\\_%' {escape '\\'}");
참고 항목
이스케이프 시퀀스는 SQL 문의 끝에 있어야 합니다. 명령 문자열에 SQL 문이 여러 개 있을 경우 이스케이프 시퀀스는 각 관련 SQL 문의 끝에 있어야 합니다.
함수 처리
JDBC 드라이버는 다음 구문을 사용하여 SQL 문의 함수 이스케이프 시퀀스를 지원합니다.
{fn functionName}
여기서 functionName
은 JDBC 드라이버에서 지원하는 함수입니다. 예시:
SELECT {fn UCASE(Name)} FROM Employee
다음 테이블에서는 함수 이스케이프 시퀀스를 사용할 때 JDBC 드라이버에서 지원하는 다양한 함수를 나열합니다.
문자열 함수 | 숫자 함수 | Datetime 함수 | 시스템 함수 |
---|---|---|---|
ASCII CHAR CONCAT DIFFERENCE INSERT LCASE LEFT LENGTH 찾기 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 |
참고 항목
데이터베이스에서 지원하지 않는 함수를 사용하려고 하면 오류가 발생합니다.
날짜 및 시간 리터럴
날짜, 시간 및 타임스탬프 리터럴에 대한 이스케이프 구문은 다음과 같습니다.
{literal-type 'value'}
여기서 literal-type
은 다음 값 중 하나입니다.
리터럴 형식 | 설명 | 값 형식 |
---|---|---|
d | 날짜 | yyyy-mm-dd |
t | 시간 | hh:mm:ss [1] |
ts | 타임스탬프 | yyyy-mm-dd hh:mm:ss[.f...] |
예시:
UPDATE Orders SET OpenDate={d '2005-01-31'}
WHERE OrderID=1025
저장 프로시저 호출
JDBC 드라이버는 반환 매개 변수를 처리해야 하는지 여부에 따라 저장 프로시저 호출에 대한 {? = call proc_name(?,...)}
및 {call proc_name(?,...)}
이스케이프 구문을 지원합니다.
프로시저는 데이터베이스에 저장된 실행 가능한 개체입니다. 일반적으로 미리 컴파일된 하나 이상의 SQL 문입니다. 저장 프로시저를 호출하기 위한 이스케이프 시퀀스 구문은 다음과 같습니다.
{[?=]call procedure-name[([parameter][,[parameter]]...)]}
여기서 procedure-name
은 저장 프로시저의 이름을 지정하고 parameter
는 저장 프로시저 매개 변수를 지정합니다.
저장 프로시저와 함께 call
이스케이프 시퀀스를 사용하는 방법에 대한 자세한 내용은 저장 프로시저와 함께 문 사용을 참조하세요.
외부 조인
JDBC 드라이버는 SQL92 왼쪽, 오른쪽, 완전 외부 조인 구문을 지원합니다. 외부 조인에 대한 이스케이프 시퀀스는 다음과 같습니다.
{oj outer-join}
여기서 외부 조인은 다음과 같습니다.
table-reference {LEFT | RIGHT | FULL} OUTER JOIN
{table-reference | outer-join} ON search-condition
여기서 table-reference
는 테이블 이름이고 search-condition
은 테이블에 사용할 조인 조건입니다.
예시:
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'
JDBC 드라이버에서 지원하는 외부 조인 이스케이프 시퀀스는 다음과 같습니다.
- 왼쪽 우선 외부 조인
- 오른쪽 우선 외부 조인
- 완전 외부 조인
- 중첩된 외부 조인
Limit 이스케이프 구문
참고 항목
LIMIT 이스케이프 구문은 JDBC 4.1 이상을 사용하는 경우 Microsoft JDBC Driver 4.2 (또는 그 이상) for SQL Server에서만 지원됩니다.
LIMIT의 이스케이프 구문은 다음과 같습니다.
LIMIT <rows> [OFFSET <row offset>]
이스케이프 구문은 두 가지 요소로 구성되어 있습니다. <rows>는 필수이며 반환할 행 수를 지정합니다. OFFSET 및 <row offset>은 선택 사항이며 행 반환을 시작하기 전에 건너뛸 행 수를 지정합니다. JDBC 드라이버는 LIMIT 대신 TOP을 사용하도록 쿼리를 변환하여 필수 부분만 지원합니다. SQL Server는 LIMIT 절을 지원하지 않습니다. JDBC 드라이버는 선택적인 <row offset>을 지원하지 않으며 사용될 경우 드라이버에서 예외가 throw됩니다.