SQL 이스케이프 시퀀스 사용
Microsoft SQL Server JDBC 드라이버는 JDBC API에 정의된 SQL 이스케이프 시퀀스 사용을 지원합니다. 이스케이프 시퀀스는 SQL 문 내에서 SQL 문자열의 이스케이프 부분이 다르게 처리되었음을 드라이버에 알리는 데 사용됩니다. SQL 문자열의 이스케이프 부분은 JDBC 드라이버에서 처리될 때 SQL Server에서 이해할 수 있는 SQL 코드로 변환됩니다.
JDBC API에 필요한 이스케이프 시퀀스에는 다음 5가지 종류가 있으며 이들 모두 JDBC 드라이버에서 지원됩니다.
LIKE 와일드카드 리터럴
함수 처리
날짜 및 시간 리터럴
저장 프로시저 호출
외부 조인
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 LOCATE 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 LEFT, RIGHT 및 FULL OUTER JOIN 구문을 지원합니다. 외부 조인에 대한 이스케이프 시퀀스는 다음과 같습니다.
{oj outer-join}
여기서 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 드라이버에서 지원하는 외부 조인 이스케이프 시퀀스는 다음과 같습니다.
왼쪽 우선 외부 조인
오른쪽 우선 외부 조인
완전 외부 조인
중첩된 외부 조인