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 설정

ValueDescription
y (OLE DB, .NET 기본값)단일 인용부호 '...'는 문자열 리터럴을 나타내고, 이중 인용부호 \"...\"는 SQL 식별자를 나타내며, 이는 대소문자를 구분하게 됩니다.
n (ESQL/C, JDBC, ODBC 기본값)단일 인용부호와 이중 인용부호 모두 문자열 리터럴을 나타냅니다. 이중 인용부호로 감싼 식별자는 허용되지 않으며(error 201) 예외적으로 단일 인용부호는 소유자 이름을 지정할 때 사용할 수 있습니다.
not set동작은 드라이버별 기본값을 따릅니다(예: ESQL/C는 n으로 가정).

권장 사항

GBase 8s는 이중 따옴표 없이 대소문자를 구분하는 식별자를 사용할 방법을 제공하지 않습니다. DELIMIDENT=y를 사용하고 식별자를 생성한 그대로 정확히 작성하십시오. 이렇게 하면 예측 가능한 동작을 보장하고 GBase 환경에서 조용히 발생할 수 있는 데이터 접근 오류를 방지할 수 있습니다.

0 조회
Back to Blog

관련 글

더 보기 »