본문 바로가기

oracle&sql

컬럼크기 CLOB으로 변경했는데도 에러나는 이유(ORA-01461)

게시글 컬럼의 크기를 VARCHAR2에서 CLOB으로 변경했는데도 계속 Insert에서 에러가 났다.
인서트문을 보니 게시글 본문 컬럼에 nvl이 걸려있길래 혹시나해서 지웠더니 오류가 안난다!
찾아보니 nvl이 4000바이트까지라는 얘기도 있고 string으로 변환한다는 얘기도 있어 공식문서를 찾아보았다.

오라클 공식 문서 일부 발췌

If expr1 is character data, then Oracle Database converts expr2 to the data type of expr1 before comparing them and returns VARCHAR2 in the character set of expr1.

전달값1이 문자 데이터이면 오라클 데이터베이스에서 전달값2를 전달값1의 데이터 타입으로 변환한 후에 비교한다. 그리고 전달값1의 캐릭터셋에서 VARCHAR2로 리턴한다.

NVL의 특징이 인자값의 데이터 타입이 다르면 함수 내부에서 타입을 변환하여 비교한다는 건데, 첫번째 인자값이 문자열이면 VARCHAR2로 리턴하는듯 하다.
그래서 4000바이트가 넘어가면 에러가 난 것이다.


COALESCE 사용하면 오류가 안나는데,  COALESCE는 형변환을 하지 않기 때문인것같다.


참고자료
CLOB 관련 유의사항
https://developyo.tistory.com/m/entry/ORACLE-ORA-64203

[ORACLE] VARCHAR2, CLOB 사용 및 가공시 주의점

[ ORACLE에서의 자료형 VARCHAR2, CLOB 사용 및 가공시 주의점 ] 보통 4000bytes 이하의 문자열에 사용되는 VARCHAR2 대용량 데이터 LOB 의 문자자료형인 CLOB 데이터 [ Charset 에 따른 한글 문자 bytes 크기 ] ORACLE

developyo.tistory.com


nlv을 where절에 사용할때

https://forums.oracle.com/ords/apexds/post/nvl-function-on-clob-data-type-7236

출처:
https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/NVL.html

SQL Language Reference

docs.oracle.com

https://linzynote.tistory.com/m/1

ORA-01461 / CLOB 컬럼 4000byte 이상 INSERT UPDATE시 에러 발생 해결

ORACLE CLOB 컬럼인데 4000Byte 이상 INSERT 시 오류가 발생 했다.. CLOB 컬럼에 4000byte 이상 값을 INSERT / UPDATE 할 경우 ORA-01461: LONG 값은 LONG 열에만 입력할 수 있습니다 오라클 에러가 발생했다 4000bytes 이

linzynote.tistory.com

https://gaechelin-guide.tistory.com/m/13

[ORACLE] ORA-01461 / CLOB or BLOB insert Error

1. 발생 상황: Mybatis 환경에서 CLOB or BLOB insert 중 발생.ORA-01461(LONG 값은 LONG 열에 삽입할 때만 바인드할 수 있습니다.) INSERT INTO INSERT_TABLE( SEQNO , BINARY_COLUMN ) VALUES ( SEQNO.NEXTVAL , BASE64DECODE(#{BINARY_COLUMN

gaechelin-guide.tistory.com

'oracle&sql' 카테고리의 다른 글

[MYSQL] UPDATE 시 날짜 자동 입력  (0) 2023.12.31