SQL에서 EJB 조회를 수행하기 위한 구문은 데이터베이스에 따라 다릅니다. 이 정보를 참조하여 여러 데이터베이스 벤더 백엔드에서 EJB 조회를 실행하여 어떤 SQL 문이 변환되었는지 알아내십시오.
데이터베이스 벤더 | 백엔드 ID | 설명 |
---|---|---|
DB2® | DB2UDB_V81 | Windows® 및 UNIX®용 DB2® Universal Database V8.1 |
DB2UDB_V82 | Windows 및 UNIX용 DB2 Universal Database V8.2 | |
DB2UDBOS390_V7 | z/OS® 및 OS/390®용 DB2 Universal Database™ V7 | |
DB2UDBOS390_V8 | z/OS 및 OS/390용 DB2 Universal Database V8 | |
DB2UDBISERIES | iSeries™용 DB2 | |
DB2UDBISERIES_V52 | iSeries V5R2용 DB2 | |
DB2UDBISERIES_V53 | iSeries V5R3용 DB2 | |
Oracle | ORACLE_V8 | Oracle, V8.0 |
ORACLE_V9I | Oracle, V9i | |
ORACLE_V10G | Oracle, V10g | |
Informix® | INFORMIX_V73 | Informix Dynamic Server.2000, V7.3 |
INFORMIX_V93 | Informix Dynamic Server.2000, V9.3 | |
INFORMIX_V94 | Informix Dynamic Server.2000, V9.4 | |
Sybase | SYBASE_V1200 | Sybase Adaptive Server Enterprise, V12.0 |
SYBASE_V1250 | Sybase Adaptive Server Enterprise, V12.5 | |
SQL Server | MSSQLSERVER_2000 | Microsoft® SQL Server 2000 |
MSSQLSERVER_V7 | Microsoft SQL Server, V7.0 | |
Cloudscape™ | CLOUDSCAPE_V5 | Cloudscape, V5.1 |
Derby | DERBY_V10 | Derby V10 |
SQL에 열 이름을 지정하는 구문은 데이터베이스에 따라 다릅니다. DB2, Oracle 및 Cloudscape의 경우 열, 테이블 및 상관 이름은 큰따옴표로 묶어 대소문자가 구분된 이름을 유지합니다. 다음은 DB2에 대해 변환된 SQL 문의 예입니다.
SELECT q1."EMPID", q1."NAME",q1."SALARY" FROM Emp q1
그러나 Informix, SQL Server 및 Sybase는 열 이름을 큰따옴표로 묶지 않습니다. 다음은 Sybase에 대해 변환된 SQL 문의 예입니다.
SELECT q1.EMPID, q1.NAME, q1.SALARY FROM Emp q1
SQL에서 외부 결합을 수행하는 구문은 데이터베이스에 따라 다릅니다.
SELECT ... FROM t1 LEFT OUTER JOIN t2 ON (t1.col1=t2.col2)Oracle의 경우, SQL 문의 WHERE 절에서 "+" 구문이 사용됩니다.
SELECT ... FROM t1, t2 WHERE t1.col1=t2.col2 (+)
EJB 조회는 유형 변환, 문자열 조작 및 날짜-시간 값 조작을 수행하는 스칼라 함수를 포함합니다. 스칼라 함수 목록에 대한 자세한 정보는 EJB 조회: 스칼라 함수 주제를 참조하십시오.
표의 왼쪽 열은 EJB 조회에서 포함할 수 있는 스칼라 함수를 나열합니다. EJB 조회 함수 열의 오른쪽에는 각 열의 표제에 나열되어 있는 각 백엔드 데이터베이스 벤더로 푸시다운된 SQL 구문을 나열합니다. 텍스트가 없는 빈 셀은 EJB 조회 함수가 특정 백엔드 데이터베이스 벤더로 푸시다운할 수 없으므로 조회를 푸시다운할 수 없음 오류 조건을 생성할 수 있습니다.
EJB 조회 함수 | DB2 OS390 | DB2 | Oracle | Informix | Sybase | SQL Server | Cloudscape V5.1 | Derby V10 |
---|---|---|---|---|---|---|---|---|
ABS | abs | abs | abs | abs | abs | abs | abs | abs |
SQRT | sqrt | sqrt | sqrt | sqrt | sqrt | sqrt | sqrt | sqrt |
CONCAT | concat | concat | concat | || | + | + | || | concat |
LENGTH | length | length | length | length | char_length | len | char_length | length |
LOCATE | locate | locate | instr | locate | charindex | charindex | locate | locate |
SUBSTRING | substr | substr | substr | substr | substring | substring | substr | substr |
MOD | mod | mod | mod | mod | mod | % | mod | mod |
ucase | upper | upper | upper | upper | upper | upper | upper | upper |
upper | upper | upper | upper | upper | upper | upper | upper | upper |
lcase | lower | lower | lower | lower | lower | lower | lower | lower |
lower | lower | lower | lower | lower | lower | lower | lower | lower |
char | char | char | to_char | char | char | char | ||
bigint | bigint | bigint | ||||||
date | date | date | date | |||||
decimal | decimal | decimal | ||||||
double | double | double | ||||||
float | float | float | float | |||||
integer | integer | integer | integer | |||||
real | real | real | real | |||||
smallint | smallint | smallint | ||||||
time | time | time | time | |||||
timestamp | timestamp | timestamp | timestamp | |||||
digits | digits | digits | digits | |||||
day | day | day | day | |||||
days | days | days | days | |||||
hour | hour | hour | hour | |||||
microsecond | microsecond | microsecond | microsecond | |||||
minute | minute | minute | minute | |||||
month | month | month | month | |||||
second | second | second | second | |||||
year | year | year | year |
날짜, 시간 산술 및 비교에 대한 일반적인 지식은 WebSphere® InfoCenter에서 날짜, 시간 산술 및 비교 주제를 참조하십시오.
DATE, TIME 및 TIMESTAMP 값에 문자열 표시를 사용하고 EJB 조회 언어에서 산술 및 비교 연산을 지정할 수 있도록 DB2 그룹에서 지원합니다. DB2의 DATE, TIME 및 TIMESTAMP 값에 대한 세부사항은 Datetime 값 주제를 참조하십시오.
DB2 그룹이 아닌 데이터베이스의 경우, DATE, TIME 및 TIMESTAMP 값에 문자열 표시를 사용하고 EJB 조회 언어로 산술 및 비교 연산을 지정하는 것이 지원되지 않습니다. 대신 Java™ long 데이터 유형을 사용하여 밀리초 단위로 날짜, 시간 또는 시간 소인 값을 표시할 수 있습니다. 날짜, 시간 또는 시간 소인 리터럴은 숫자 리터럴이어야 합니다. 밀리초 값을 생성하기 위해 java.util.Calendar 클래스를 사용할 수 있습니다. java.util.Calendar 인터페이스를 사용하여 여러 Calendar 오브젝트를 비교하십시오.
예백엔드 데이터베이스 벤더 | 샘플 EJB 조회문 | 변환된 SQL 조회문 |
---|---|---|
DB2 | SELECT e FROM EmpBean e WHERE e.emp_ts=71039082 | SELECT q1."no", q1."name", q1."emp_ts" FROM userid.iEmp q1 WHERE q1."emp_ts" = '1970-1-1-11.43.59.082' |
Oracle | SELECT e FROM EmpBean e WHERE e.emp_ts=71039082 | SELECT q1."no", q1."name", q1."emp_ts" FROM userid.iEmp q1 WHERE q1."emp_ts" = TO_DATE ( '1970-1-1-11.43.59','YYYY-MM-DD-HH24.MI.SS') |
Informix | SELECT e FROM EmpBean e WHERE e.emp_ts>71039082 | SELECT q1.no, q1.name, q1.emp_ts FROM userid.iEmp q1 WHERE q1.emp_ts > DATETIME (1970-1-1 11:43:59.082) YEAR TO FRACTION) |
Cloudscape | SELECT e FROM EmpBean e WHERE e.emp_ts<71039082 | SELECT q1."no", q1."name", q1."emp_ts" FROM userid.iEmp q1 WHERE q1."emp_ts" < '1970-1-1-11.43.59.082' |
SQL Server | SELECT e FROM EmpBean e WHERE e.emp_ts=71039082 | SELECT q1.no, q1.name, q1.emp_ts FROM userid.iEmp q1 WHERE q1.emp_ts = 'Jan 1 1970 11:43:59.82 AM' |
Sybase | SELECT e FROM EmpBean e WHERE e.emp_ts=71039082 | SELECT q1.no, q1.name,emp_ts FROM userid.iEmp q1 WHERE q1.emp_ts = 'Jan 1 1970 11:43:59.82 AM' |
연결 연산자(CONCAT)는 두 개의 문자열 피연산자를 연결하여 문자열 표현식을 형성합니다. 연결 피연산자는 호환 가능한 문자열이어야 합니다. 찾기 연산자는 소스 문자열에서 검색 문자열의 첫 번째 어커런스 시작 위치를 리턴합니다. 길이 연산자는 값의 길이를 리턴합니다. 하위 문자열 연산자(SUBSTR)는 문자열의 하위 문자열을 리턴합니다.
DB2와 다른 데이터베이스 벤더 비교
DB2의 경우, 입력 인수를 입력 매개변수(예: SUBSTR, CONCAT, LOCATE 및 LENGTH 함수)로 허용하는 함수는 CAST 구문을 사용해야 하지만 다른 데이터베이스 벤더의 경우 해당 함수의 CAST가 필요하지 않습니다.
예:
SELECT e FROM EmpBean e WHERE SUBSTRING(?1, 1) = 'John Smith' {_varchar}다음은 z/OS 또는 OS/390의 DB2 Universal Database에 대해 변환된 SQL 문입니다.
SELECT q1."EMPID", q1."NAME" FROM Emp q1 WHERE (CAST(SUBSTR ( ?, 1) AS VARCHAR(255)) = 'John Smith')다음은 Informix에 대해 변환된 SQL 문입니다.
SELECT q1.EMPID, q1.NAME FROM Emp q1 WHERE SUBSTR(?,1)='John Smith'SUBSTR 함수에 대한 CAST 구문이 필요하지 않는 다른 데이터베이스 벤더(예: Informix)를 참조할 수 있습니다.
iSeries용 DB2 및 Windows 및 UNIX용 Universal Database
iSeries용 DB2와 Windows 및 UNIX용 Universal Database의 경우, CONCAT 함수는 아래 표시된 대로 결합된 길이 속성을 4000 또는 32672에 CAST합니다. 세부사항은 DB2 Information Center를 참조하십시오.
예:
예 #1: 결합된 길이 속성을 VARCHAR(4000)에 CAST
SELECT e FROM EmpBean e WHERE concat(?1, 'ahmad') = 'deptahmad' {_varchar}변환된 SQL 문:
SELECT q2."no", q2."name" FROM userid.Emp q1 WHERE (CAST(concat ( ?, 'ahmad') AS VARCHAR(4000)) = 'deptahmad')예 #2: 데이터 유형 VARCHAR의 매개변수 표시자 사용
SELECT d.name FROM DeptBean d WHERE CONCAT(?1,?2) = 'Firstname1' {_varchar,_varchar}
SELECT q1."name" FROM userid.Deptc q1 WHERE (CAST(concat (CAST(? AS VARCHAR(32672)), CAST(? AS VARCHAR(32672))) AS VARCHAR(4000)) = 'Firstname1')
z/OS 및 OS/390용 DB2 Universal Database™
매개변수 표시자가 있는 경우 입력 인수를 입력 매개변수(예: CONCAT, SUBSTR, LOCATE, LENGTH 함수)로 허용하는 함수는 DB2 참조 매뉴얼에 정의된 대로 매개변수 표시자의 길이 속성을 CAST해야 합니다. 세부사항은 다음 주제를 참조하십시오.예:
SELECT e FROM EmpBean e WHERE SUBSTRING(?1, 1) = 'John Smith' {_varchar}
SELECT q1."EMPID", q1."NAME" FROM Emp q1 WHERE (CAST(SUBSTR ( ?1, 1) AS VARCHAR(255)) = 'John Smith')
SQLJ를 사용하여 SQL 문을 Java™ 프로그램에 임베드할 수 있습니다.
SQLJ 지원은 iSeries용 DB2를 제외한 모든 DB2 그룹 백엔드에서 사용 가능합니다.
SQLJ에 대한 자세한 정보는 SQLJ 소개 주제를 참조하십시오.
UPDATE SET X = ? WHERE ID = ? AND X = ?
여기서, ID는 1차 키 열입니다.
DB2UDBOS390_V8 백엔드 ID의 경우, 변경이 예상되지 않는 술부 열이 널 입력 가능하면 결과 UPDATE 조회가 "IS NOT DISTINCT FROM" 구성을 사용합니다. 예를 들어, ID가 1차 키 열이고 NAME이 널 입력 가능하면 결과 UPDATE 조회는 다음과 같습니다.
UPDATE SET NAME = ? WHERE ID = ? AND NAME IS NOT DISTINCT FROM ?
SELECT 문을 사용하여 갱신 잠금을 가져오는 구문은 데이터베이스에 따라 다릅니다. UPDATE 절의 변환된 SQL 문에 대한 세부사항은 액세스 목적 -- 분리 레벨 및 갱신 잠금 주제를 참조하십시오.