티스토리 뷰
■에러
ORA-00904: 부적합한 식별자입니다.
■원인1
식별자는 큰 따옴표(")로 묶어 사용된다.
많은 개발 언어에서 작은 따옴표(')와 큰 따옴표(")를 같은 의미로 사용할 수 있으나, 오라클에서는 각각 다른 의미를 가지고 있다.
작은 따옴표는 리터럴을 나타내지만, 큰 따옴표는 객체명을 나타내므로 ORA-00904 에러가 발생한다.
큰 따옴표(")로 둘러싼 식별자는 대문자 소문자를 구별한다.
따옴표로 묶지 않은 식별자는 항상 대문자로 변환되어 관리된다.
예제
컬럼명 "abc" ≠ abc
컬럼명 "한국어a" ≠ "한국어A"
컬럼명 "ABC" = abc
■대응방법
큰 따옴표(")로 묶은 식별자를 사용하는 경우에는 대소문자까지 올바르게 기술한다.
■원인2
리터럴 항목을 작은 따옴표로 묶어 사용하지 않는다.
동적 SQL을 사용하는 경우 리터럴로 지정하는 항목을 문자열로 결합하려고 할 때 작은 따옴표로 묶는 것을 까먹는 경우가 있다.
vVal := '대입하려는 리터럴';
vSQL := 'INSERT INTO ... VALUES (' || vVal || ')';
이 SQL은 INSERT INTO ... VALUES (대입하려는 리터럴) 이 되어, ORA-00904 가 된다.
■대응방법
작은 따옴표(')를 대입하고 싶은 경우에는 작은 따옴표(')를 연속적으로 입력한다.
vVal := '대입하려는 리터럴';
vSQL := 'INSERT INTO ... VALUES (''' || vVal || ''')';
/* 또는 */
vVal := '''대입하려는 리터럴''';
vSQL : = 'INSERT INTO ... VALUES('|| vVal ||'')';
이 SQL은 INSERT INTO ... VALUES ('대입하려는 리터럴') 이 된다.
■대응방법(ver:10g)
vVal := q'{'대입하려는 리터럴'}';
vSQL := 'INSERT INTO ... VALUES ('|| vVal || ')';
오라클 버전이 10g면 위의 sql로도 가능하다.
'Oracle > [oracle] Error' 카테고리의 다른 글
[개발시 에러] ORA-00942 : 테이블 또는 뷰가 존재하지 않습니다. (0) | 2022.05.12 |
---|---|
[개발시 에러] ORA-00911: 문자가 부적합합니다 (0) | 2022.03.31 |
[개발시 에러] ORA-00001: 유일성(무결성) 제약조건에 위배됩니다. (0) | 2022.03.28 |
[플랫폼 종속 문제(데이터 이식, 마이그레이션)] ORA-12899: 열 string의 값이 너무 큽니다(실제:string, 최대:string) (0) | 2022.03.28 |
[유틸리티 에러]KUP-04020: 지원되는 버퍼 크기 524288보다 긴 레코드가 <filename>에서 발견되었습니다. (0) | 2022.03.28 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- rollback
- C#
- in/out/ref 예제
- REVOKE
- NLog
- 시간차이
- in/out/ref 공통점
- in/out/ref
- 참조전달
- BEGIN절
- 유틸리티
- USER_SYS_PRIVS
- commit
- DBA_SYS_PRIVS
- TrimEnd
- VB.Net
- PL/SQL 실행문
- 유틸리티에러
- DECLARE절
- in/out/ref 차이점
- 에러
- Oracle
- 동기통신
- 후나빙
- vba
- grant
- PL/SQL 예외처리문
- EXCEPTION절
- 초기화파라미터파일
- pl/sql
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함