Connection conn = null;
	PreparedStatement  pstmt  = null;
	ResultSet  rs   = null;
	
	try{
		
		conn = .............
		
		String sql = "";
		
		int 	t_int = 1;
		String 	t_clob = "clob data 한글 입력";
		
		sql =  " insert into  test_clob (t_int, t_clob)values(?, ?) ";
		pstmt = conn.prepareStatement(sql);
		pstmt.setInt(1, t_int);
		pstmt.setAsciiStream(2, new ByteArrayInputStream(t_clob.getBytes()), t_clob.getBytes().length);
		int result = pstmt.executeUpdate();
		out.print("
result: " + result); sql = " select * from test_clob "; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); if( rs.next() ){ do{ InputStream is2 = rs.getAsciiStream(2); StringBuffer sb = new StringBuffer(); if( is2 != null ){ byte[] b = new byte[4096]; for (int n; (n = is2.read(b)) != -1;) { sb.append(new String(b, 0, n)); } } out.print("
int: " + rs.getInt(1) + " | clob: " + sb); }while( rs.next() ); } }catch(Exception e){ out.print("
e: " + e); }

ORACLE VARCHAR2 --> CLOB 로 바꾸는 방법....

 

-- 옮기기위한 테이블과 옮길 테이블 그리고 중간 단계를 거칠 테이블을 생성한다.

테이블 정보

TEST_TBL  :  ( 옮기기 위한 테이블) 원본

    USERID   VARCHAR2(20) ,

    CONTENT  VARCHAR2(40000)


TEST_TBL_LONG  :  (CLOB로 바꾸기 위하여 중간에 거치는 테이블)

    USERID  VARCHAR(20),

    CONTENT  LONG


TEST_TML_CLOB  :  (마지막으로 바꿀 테이블)

    USERID  VARCHAR(20),

    CONTENT  CLOB


예를 들어 위와 같은 테이블을 만들어 테스트를 해볼수 있다.


일반 VARCHAR2 에서 CLOB로 바로 옮길수는 없다. LONG 형에서 CLOB로 옮길수는 있다.

바로TO_LOB를 쓰면 LONG 에서 CLOB로 바꿀수 있다.


단 , 여기서 바꾸거나, 바뀌는 모든 테이블이 모두 같은 수의 컬럼과 순서를 가지고 있다.


1. 바꾸고 싶은 원본 테이블을 LONG 으로 바꾸어 주어야 한다.

INSERT INTO TEST_TBL_LONG
    SELECT USERID , CONTENT FROM TEST_TBL
 
 
2. LONG으로 바꾼 테이블을 CLOB로 바꾼다. 이때 TO_LOB를 사용한다.
INSERT INTO TEST_TBL_LONG
   SELECT USERID ,TO_LOB(CONTENT) FROM TEST_TBL_LONG


이렇게 하면 비교적 손쉽게 VARCHAR2 를 CLOB로 바꿀수 있다.



+ Recent posts