DataBase/SQL

[ORACLE] CLOB형식 데이터를 String으로 받을 때

반응형

Could not write content: Direct self-reference leading to cycle, ArrayList와 Hashmap관련된 에러가 떴다. 이건 전에도 겪어본 적 있는데, json을 호출하는 @responsebody 어노테이션이 꼬리에 꼬리를 물게 되면 발생했던 에러다. 근데 이번엔 CLOB to String 변환 과정에서 발생하는 것 같았다. WARN 텍스트에 CLOB 데이터가 있었거든.. CLOB이 그리 녹록치 않은 놈이라는 건 이미 오래오래전에 겪어보았다.

방법을 몇가지 찾아보았는데 java api를 쓰는 방법은 내가 프로젝트에서 쓰는 방식이 아니라 적용하기 너무 어려울 것 같았다(는 사실을 30분은 지나고서야 알게 됨)

오라클 sql구문에서 DBMS_LOB.SUBSTR() 을 이용하면 CLOB을 VARCHAR2 타입으로 변환할 수 있다고 해서 적용하고 바로 성공했다. 내 경우엔 View에 적용해서, 코드가 좀 길다.. 중간에 4000, 1 숫자가 보이는 부분이 적용한 부분이다.

create or replace view matchupMemSearchView
	as
	select rownum as RNUM,  A.*
	from
	(
	select m.mcumem_no as MCUMEMNO, m.resume_no AS RESUMENO, m.mem_no AS MEMNO, m.expertise_no AS EXPERTISENO, 
	       m.jobsearch_flag AS JOBSEARCHFLAG, m.resumeopen_flag AS RESUMEOPENFLAG, r.resume_title AS RESUMETITLE,
	       r.resume_name AS RESUMENAME, DBMS_LOB.SUBSTR(r.resume_introduce, 4000, 1) AS RESUMEINTRODUCE, r.lang_flag AS LANGFLAG, 
	       c.career_name AS CAREERNAME, e.edu_name AS EDUNAME, e.edu_major AS EDUMAJOR, 
	       x.jikGun_code AS JIKGUNCODE, x.career AS CAREER, x.skill AS SKILL,
	       (select jikmu_name from jikmu j where j.JIKMU_CODE=
	            (select jikmu_code from matchupmemjikmu mjm where mjm.expertise_no=m.expertise_no)) as JIKMUNAME, 
	       (select jikgun_name from jikgun jk where jk.jikgun_code=
	            (select jikgun_code from expertise e where e.expertise_no=m.expertise_no)) as JIKGUNNAME
	from matchupMem m join resume r on m.resume_No = r.resume_no 
	left outer join career c on c.resume_no=m.resume_no
	left outer join education e on e.resume_no=m.resume_no
	left outer join expertise x on x.expertise_no=m.expertise_no
	where m.resumeopen_flag='Y'
	order by m.mcumem_no
	)A;



출처: https://forgiveall.tistory.com/426 [하하하하하]

감사합니다.

728x90
반응형