2026년 07월 29일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-01740 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-01740 missing double quote in identifier 는?
ORA-01740 에러는 Oracle SQL에서 큰따옴표(")로 묶인 식별자(Identifier)를 사용할 때 닫는 따옴표가 누락되었거나 잘못된 위치에 있을 경우 발생하는 구문 오류입니다. Oracle은 테이블명, 컬럼명, 별칭(Alias) 등에서 특수문자나 대소문자를 구분하는 식별자를 사용할 때 큰따옴표로 감싸는 것을 허용하는데, 이 따옴표 쌍이 맞지 않으면 파서(Parser)가 식별자의 끝을 인식하지 못해 해당 에러를 던집니다. 주로 동적 SQL 생성, 복잡한 쿼리 작성, 또는 타 DB에서 마이그레이션한 스크립트에서 자주 목격되는 에러입니다.
주요 발생 원인
1. 큰따옴표 닫기 누락 (가장 흔한 원인)
가장 흔하게 발생하는 원인으로, 식별자를 큰따옴표로 시작했지만 닫는 따옴표를 빠뜨린 경우입니다. 특히 컬럼 별칭(Alias)이나 테이블 별칭을 직접 타이핑할 때 실수로 누락되는 경우가 많으며, 긴 쿼리에서는 육안으로 발견하기도 어렵습니다.
-- 에러 발생 예시: 닫는 큰따옴표 누락
SELECT employee_id, first_name "직원 이름
FROM employees;
-- ORA-01740: missing double quote in identifier
2. 식별자 내부에 잘못된 따옴표 혼용
작은따옴표(')와 큰따옴표(")를 혼동하여 잘못 사용하는 경우입니다. Oracle에서 문자열 리터럴은 작은따옴표를, 식별자는 큰따옴표를 사용해야 하는데, 이를 혼용하면 파서가 식별자의 경계를 제대로 판단하지 못합니다. 타 데이터베이스(MySQL 등)에서 이전해온 SQL 스크립트에서 특히 많이 나타납니다.
-- 에러 발생 예시: 작은따옴표와 큰따옴표 혼용
SELECT department_id, department_name "부서명'
FROM departments;
-- ORA-01740: missing double quote in identifier
-- 추가 혼용 예시
SELECT "employee_id', first_name
FROM employees;
-- ORA-01740: missing double quote in identifier
3. 동적 SQL 또는 PL/SQL에서 문자열 연결 시 따옴표 이스케이프 오류
PL/SQL의 EXECUTE IMMEDIATE나 동적 SQL을 생성할 때 문자열 연결 과정에서 큰따옴표를 제대로 이스케이프하지 못해 발생하는 경우입니다. 동적 쿼리 내에서 큰따옴표로 감싼 식별자를 포함하려면 따옴표를 두 번("") 쓰거나 변수를 정밀하게 관리해야 합니다. 이 경우 런타임에서야 에러가 드러나므로 디버깅이 어렵습니다.
-- 에러 발생 예시: 동적 SQL에서 따옴표 이스케이프 오류
DECLARE
v_sql VARCHAR2(500);
BEGIN
-- 잘못된 동적 SQL 구성 (큰따옴표 하나만 사용)
v_sql := 'SELECT "직원번호, "이름" FROM "직원테이블"';
EXECUTE IMMEDIATE v_sql;
END;
/
-- ORA-01740: missing double quote in identifier
해결 방법
원인 1 해결: 큰따옴표 쌍 맞추기
누락된 닫는 큰따옴표를 반드시 추가해야 합니다. 식별자에 공백이나 특수문자가 없다면 큰따옴표 없이 작성하는 것이 더 안전하고 간결합니다.
-- 수정된 쿼리: 닫는 큰따옴표 추가
SELECT employee_id, first_name "직원 이름"
FROM employees;
-- 더 권장하는 방법: 특수문자/공백이 없으면 큰따옴표 생략
SELECT employee_id, first_name AS 직원이름
FROM employees;
-- 또는 영문 별칭 사용 (가장 안전)
SELECT employee_id, first_name AS employee_name
FROM employees;
원인 2 해결: 따옴표 유형 통일
작은따옴표와 큰따옴표의 역할을 명확히 구분하여 사용해야 합니다. 문자열 값은 반드시 작은따옴표, 식별자(컬럼명, 테이블명, 별칭)는 큰따옴표를 사용하는 규칙을 지킵니다.
-- 잘못된 예시 수정
-- Before (에러)
SELECT department_id, department_name "부서명'
FROM departments;
-- After (정상)
SELECT department_id, department_name "부서명"
FROM departments;
-- 실무 예시: 문자열 비교와 식별자를 올바르게 혼용
SELECT "EMPLOYEE_ID", first_name
FROM employees
WHERE department_name = '영업부'; -- 값은 작은따옴표
원인 3 해결: 동적 SQL에서 따옴표 올바르게 처리
동적 SQL에서 큰따옴표를 포함하려면 연속된 큰따옴표("")를 사용하거나, Oracle 10g 이상에서는 q'[]' 구문(Quote Operator)을 활용하면 가독성이 크게 향상됩니다.
-- 수정된 동적 SQL: 큰따옴표 올바르게 이스케이프
DECLARE
v_sql VARCHAR2(500);
BEGIN
-- 방법 1: 큰따옴표 두 번 사용으로 이스케이프
v_sql := 'SELECT "직원번호", "이름" FROM "직원테이블"';
EXECUTE IMMEDIATE v_sql;
END;
/
-- 방법 2: Oracle q-quote(q'[]') 활용 (권장)
DECLARE
v_sql VARCHAR2(500);
v_result VARCHAR2(100);
BEGIN
v_sql := q'[SELECT "직원번호" FROM "직원테이블" WHERE ROWNUM = 1]';
EXECUTE IMMEDIATE v_sql INTO v_result;
DBMS_OUTPUT.PUT_LINE('결과: ' || v_result);
END;
/
-- 방법 3: 따옴표가 필요 없도록 식별자 설계
DECLARE
v_sql VARCHAR2(500);
BEGIN
-- 큰따옴표 불필요한 일반 식별자 사용
v_sql := 'SELECT EMPNO, ENAME FROM EMP WHERE ROWNUM <= 5';
EXECUTE IMMEDIATE v_sql;
END;
/
예방 방법
1. 식별자 명명 규칙(Naming Convention) 표준화
처음부터 큰따옴표가 필요 없는 식별자를 사용하도록 팀 내 명명 규칙을 표준화하는 것이 최선입니다. 즉, 테이블명·컬럼명에 공백, 특수문자, 한글, 소문자 혼용을 지양하고, 영문 대문자와 언더스코어(_) 조합만 허용하도록 코딩 가이드를 수립하세요. 이렇게 하면 큰따옴표 자체가 필요 없어지므로 ORA-01740 에러가 원천적으로 차단됩니다.
-- 비권장 (큰따옴표 필요)
CREATE TABLE "직원 정보" ("직원 번호" NUMBER, "이름" VARCHAR2(50));
-- 권장 (큰따옴표 불필요)
CREATE TABLE EMPLOYEE_INFO (EMPLOYEE_NO NUMBER, EMP_NAME VARCHAR2(50));
2. SQL 작성 전 IDE 또는 SQL 린터(Linter) 적극 활용
SQL Developer, DBeaver, Toad 등 IDE의 구문 강조(Syntax Highlighting) 기능을 활용하면 따옴표 쌍이 맞지 않을 때 즉시 시각적으로 확인할 수 있습니다. 또한 CI/CD 파이프라인에 SQLFluff와 같은 SQL 린터를 도입하면 배포 전 단계에서 이러한 구문 오류를 자동으로 검출할 수 있으므로, 운영 환경 장애를 사전에 예방할 수 있습니다.
관련 에러
| 에러 코드 | 설명 |
|—|—|
| ORA-00904 | invalid identifier — 식별자 자체가 잘못되거나 존재하지 않을 때 발생. ORA-01740과 함께 식별자 관련 오류로 자주 쌍을 이룸. |
| ORA-00907 | missing right parenthesis — 괄호 누락 에러로, 구문 오류 패턴이 ORA-01740과 유사. |
| ORA-01756 | quoted string not properly terminated — 작은따옴표로 감싼 문자열이 제대로 닫히지 않은 경우 발생. ORA-01740의 작은따옴표 버전에 해당. |
| ORA-00923 | FROM keyword not found where expected — 따옴표 오류로 인해 FROM 키워드를 파서가 찾지 못할 때 종종 함께 발생. |
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.