CLOB 데이터 저장시 ORA 03146: TTC 오류 - eunja511005/Tutorial GitHub Wiki

오류 내용

ORA-03146: TTC 필드에 대한 버퍼 길이가 부적합합니다.

오류 원인

오라클 버그인지 모르지만 CLOB 필드에 바로 데이터 저장 시 TTC 오류 발

해결책

처음 insert시 들어가는 CLOB 필드에 EMPTY_CLOB()으로 빈 CLOB 데이터를 넣어주고, 
해당 row의 PK값으로 실제 content UPDATE 시켜줌
머지 구문
  <insert id="save" parameterType="com.eun.tutorial.dto.ZthhBoardDTO"> 
		MERGE INTO zthh_board 
		USING DUAL 
			ON ( board_id = #{boardId, jdbcType=VARCHAR, javaType=string} ) 
		WHEN MATCHED THEN /* ON 조건에 해당되는 것이 있으면 아래 실행(UPDATE) */
			UPDATE SET       
				title = #{title, jdbcType=VARCHAR}				
				,update_id = #{updateId, jdbcType=VARCHAR}
				,update_time = to_char(sysdate,'yyyymmddhh24miss')
				,content = #{content, mode=IN, jdbcType=CLOB, javaType=string}
		WHEN NOT MATCHED THEN /* ON 조건에 매칭되지 않으면 아래 실행(Insert)*/
		    INSERT (BOARD_ID, TITLE,
		    		create_id, create_time, update_id, update_time, CONTENT)
		   		VALUES (#{boardId, jdbcType=VARCHAR, javaType=string},
				   		#{title, jdbcType=VARCHAR}, 				   		
				   		#{createId, jdbcType=VARCHAR}, 
				   		to_char(sysdate,'yyyymmddhh24miss'), 
				   		#{updateId, jdbcType=VARCHAR}, 
				   		to_char(sysdate,'yyyymmddhh24miss'),
				   		EMPTY_CLOB())
  </insert>  
2번 호출
    @Override
    public int save(ZthhBoardDTO zthhFileAttachDTO) {
    	UUID uuid = UUID.randomUUID();
        String boardId = "board_"+uuid;
        zthhFileAttachDTO.setBoardId(boardId);
        
        // 1. insert EMPTY_CLOB()
        zthhBoardMapper.save(zthhFileAttachDTO);
    	
    	
        // 2. update 실제 content
    	return zthhBoardMapper.save(zthhFileAttachDTO);
    }
⚠️ **GitHub.com Fallback** ⚠️