GBase 8s: DELIMIDENT가 대소문자 구분을 제어하는 방법
발행: (2026년 5월 4일 PM 07:22 GMT+9)
4 분 소요
원문: Dev.to
Source: Dev.to
DELIMIDENT 시연
환경 변수 DELIMIDENT=y를 설정하고 다음 명령을 실행합니다:
export DELIMIDENT=y
dbaccess testdb <<!
-- Uppercase table name, double‑quoted
CREATE TABLE "Tab04"(id INT, name VARCHAR(20));
INSERT INTO "Tab04" VALUES(1, 'T DA XIE');
-- Lowercase table name, double‑quoted
CREATE TABLE "tab04" (id INT, name VARCHAR(20));
INSERT INTO "tab04" VALUES(1, 't xiao xie');
-- Without double quotes, this collides with the lowercase one (error 310)
CREATE TABLE tab04 (id INT, name VARCHAR(20)); -- fails
!
시스템 카탈로그에서 테이블 확인
SELECT tabname FROM systables WHERE tabname LIKE '%ab04%';
-- 반환: tab04 및 Tab04 (따옴표 없이 표시되지만 구분됩니다)
DELIMIDENT=y인 경우 쿼리 동작
따옴표가 없거나 소문자 따옴표로 감싼 참조는 소문자 테이블 tab04로 해석됩니다:
SELECT * FROM Tab04; -- → tab04
SELECT * FROM tab04; -- → tab04
SELECT * FROM "tab04"; -- → tab04
정확히 일치하는 대문자 이름을 두 번 따옴표로 감쌀 때만 대문자 테이블에 접근할 수 있습니다:
SELECT * FROM "Tab04"; -- → Tab04
DELIMIDENT를 해제한 후
unset DELIMIDENT
dbaccess -e testdb <<!
SELECT * FROM Tab04; -- → tab04 (still works)
SELECT * FROM tab04; -- → tab04
SELECT * FROM "tab04"; -- error 201
SELECT * FROM "Tab04"; -- error 201
!
DELIMIDENT가 해제되면, 이중 따옴표로 감싸는 것이 불법이 되어 대문자 테이블에 접근할 수 없게 됩니다.
DELIMIDENT 설정
| Value | Description |
|---|---|
| y (OLE DB, .NET 기본값) | 단일 인용부호 '...'는 문자열 리터럴을 나타내고, 이중 인용부호 \"...\"는 SQL 식별자를 나타내며, 이는 대소문자를 구분하게 됩니다. |
| n (ESQL/C, JDBC, ODBC 기본값) | 단일 인용부호와 이중 인용부호 모두 문자열 리터럴을 나타냅니다. 이중 인용부호로 감싼 식별자는 허용되지 않으며(error 201) 예외적으로 단일 인용부호는 소유자 이름을 지정할 때 사용할 수 있습니다. |
| not set | 동작은 드라이버별 기본값을 따릅니다(예: ESQL/C는 n으로 가정). |
권장 사항
GBase 8s는 이중 따옴표 없이 대소문자를 구분하는 식별자를 사용할 방법을 제공하지 않습니다. DELIMIDENT=y를 사용하고 식별자를 생성한 그대로 정확히 작성하십시오. 이렇게 하면 예측 가능한 동작을 보장하고 GBase 환경에서 조용히 발생할 수 있는 데이터 접근 오류를 방지할 수 있습니다.