다음을 통해 공유


SQL 이스케이프 시퀀스 사용

JDBC 드라이버 다운로드

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 Time 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됩니다.

참고 항목

JDBC 드라이버와 함께 문 사용