SQL에서 EJB 조회 구문

SQL에서 EJB 조회를 수행하기 위한 구문은 데이터베이스에 따라 다릅니다. 이 정보를 참조하여 여러 데이터베이스 벤더 백엔드에서 EJB 조회를 실행하여 어떤 SQL 문이 변환되었는지 알아내십시오.

이 참조 주제는 다음 사용자에게 유용합니다.
  • 지원되지 않는 데이터베이스에 대해 전개하도록 선택한 사용자. 이 참조 주제를 사용하면 지원되지 않는 전개 환경에 거의 일치하는 유효한 데이터베이스 벤더 백엔드 ID를 선택하는 데 도움이 됩니다.
  • 유효하지 않은 SQL92 또는 SQL99 백엔드 ID를 사용하도록 선택한 사용자. 이 참조 주제를 사용하면 유효하지 않은 SQL92 및 SQL99 백엔드를 더 이상 사용할 수 없을 때 차후에 사용해야 하는 백엔드를 결정하는 데 도움이 됩니다.

지원되는 데이터베이스 벤더 백엔드 ID

다음은 응용프로그램을 전개하기 위해 지정할 수 있는 지원되는 데이터베이스 벤더 이름 목록입니다.
주: ejbdeploy 명령을 실행할 때 백엔드 ID를 dbvendor 인수의 값으로 사용하십시오. ejbdeploy 명령에 대한 자세한 정보는 ejbdeploy 명령 주제를 참조하십시오.
표 1. 지원되는 데이터베이스 벤더 백엔드 ID
데이터베이스 벤더 백엔드 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
다음 백엔드 ID는 유효하지 않습니다.
  • SQL92(1992 SQL 표준)
  • SQL99(1999 SQL 표준)
SQL92 및 SQL99가 유효하지 않더라도 SQL92 및 SQL99 옵션을 그대로 사용할 수 있습니다. SQL92 또는 SQL92 옵션을 사용할 경우 Cloudscape V5용 SQL이 생성됩니다.

SQL 문에 열 이름 지정

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

데이터베이스 함수

다음 섹션은 EJB 조회에서 사용할 수 있는 데이터베이스 함수를 나열하고 지정된 데이터베이스 벤더 백엔드에 대해 변환된 SQL 구문을 표시합니다.

외부 결합

SQL에서 외부 결합을 수행하는 구문은 데이터베이스에 따라 다릅니다.

지원되는 모든 데이터베이스 벤더(Oracle V8 제외)는 외부 결합 구문을 준수하는 ANSI입니다. 다음은 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 조회 함수가 특정 백엔드 데이터베이스 벤더로 푸시다운할 수 없으므로 조회를 푸시다운할 수 없음 오류 조건을 생성할 수 있습니다.

표 2. EJB 조회의 SQL 스칼라 함수 및 각 백엔드에 푸시다운된 SQL 구문
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 조회의 예를 나열합니다.
주: emp_ts의 데이터 유형은 Calendar입니다.
표 3. 날짜, 시간 및 시간 소인 표시: 다른 데이터베이스 벤더의 EJB 조회 예 및 푸시다운 SQL 문.
백엔드 데이터베이스 벤더 샘플 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, LOCATE, LENGTH 및 SUBSTR 함수

연결 연산자(CONCAT)는 두 개의 문자열 피연산자를 연결하여 문자열 표현식을 형성합니다. 연결 피연산자는 호환 가능한 문자열이어야 합니다. 찾기 연산자는 소스 문자열에서 검색 문자열의 첫 번째 어커런스 시작 위치를 리턴합니다. 길이 연산자는 값의 길이를 리턴합니다. 하위 문자열 연산자(SUBSTR)는 문자열의 하위 문자열을 리턴합니다.

DB2와 다른 데이터베이스 벤더 비교

DB2의 경우, 입력 인수를 입력 매개변수(예: SUBSTR, CONCAT, LOCATE 및 LENGTH 함수)로 허용하는 함수는 CAST 구문을 사용해야 하지만 다른 데이터베이스 벤더의 경우 해당 함수의 CAST가 필요하지 않습니다.

예:

java.lang.String 유형의 입력 매개변수를 가지는 입력 인수를 포함한 다음 샘플 EJB 조회문을 고려하십시오.
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

샘플 EJB 조회문:
 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해야 합니다. 세부사항은 다음 주제를 참조하십시오.

예:

샘플 EJB 조회문:
SELECT e FROM EmpBean e WHERE SUBSTRING(?1, 1) = 'John Smith'  {_varchar}
변환된 SQL 문:
SELECT  q1."EMPID",  q1."NAME" FROM Emp q1  WHERE  (CAST(SUBSTR ( ?1, 1) AS VARCHAR(255)) =
'John Smith')

SQLJ

SQLJ를 사용하여 SQL 문을 Java™ 프로그램에 임베드할 수 있습니다.

SQLJ 지원은 iSeries용 DB2를 제외한 모든 DB2 그룹 백엔드에서 사용 가능합니다.

SQLJ에 대한 자세한 정보는 SQLJ 소개 주제를 참조하십시오.

변경이 예상되지 않는 술부 절

변경이 예상되지 않는 동시성 제어의 목적은 지정된 자원을 다른 트랜잭션에서 사용할 수 없도록 시간을 최소화하는 것입니다. 변경이 예상되지 않는 액세스 목적이 설정되면 변경이 예상되지 않는 술부에 포함시킬 속성을 지정해야 합니다. 이 속성은 UPDATE SQL 문의 WHERE 절에 포함됩니다.
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 문에 대한 세부사항은 액세스 목적 -- 분리 레벨 및 갱신 잠금 주제를 참조하십시오.

이용약관 | 피드백
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.