CLOB은 저장하는 방식이 달라서 insert/update 할 때 좀 쿼리가 복잡합니다.
기본적으로...insert할 때,
Clob인 컬럼은 빈값(empty_clob)을 넣은 후에 다시 업데이트하는 형식으로 쿼리를 작성해야 하기 때문에 번거롭죠.
그래서, 저는 Clob이 들어간 테이블에 insert/update 할 때는
Insert/Update 프로시저를 만들어서 사용합니다.
아래는 Insert 프로시저 예제입니다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | CREATE OR REPLACE PROCEDURE P_YSAPH_INSERT ( p_SAPSEQ IN NUMBER, p_WAREKY IN VARCHAR2, p_SAPPROCESS IN VARCHAR2, p_DOCCAT IN VARCHAR2, p_DOCUTY IN VARCHAR2, p_KEYCOL IN VARCHAR2, p_KEY1 IN VARCHAR2, p_KEY2s_CLOB IN CLOB, p_USERID IN VARCHAR2 ) AS V_CLOB_SELECTED CLOB; V_CLOB_LENGTH NUMBER; V_BUFFER CLOB; V_AMOUNT BINARY_INTEGER := 1024; V_POS PLS_INTEGER := 1; BEGIN -- YSAPH 테이블에 저장 INSERT INTO YSAPH ( sapseq, wareky, sapprocess, doccat, docuty, docnm, keycol, key1, key2s, successyn, credat, cretim, creusr ) VALUES ( p_SAPSEQ , nvl(p_WAREKY, ' ') , nvl(p_SAPPROCESS, ' ') , nvl(p_DOCCAT, ' ') , nvl(p_DOCUTY, ' ') , zbf_get_doc('NAME', p_DOCCAT, p_DOCUTY) , nvl(p_KEYCOL, ' ') , nvl(p_KEY1, ' ') , empty_clob() , 'Y' , TO_CHAR(SYSDATE, 'YYYYMMDD') , TO_CHAR(SYSDATE, 'HH24MISS') , p_USERID ) RETURNING key2s INTO V_CLOB_SELECTED ; -- CLOB 삽입 IF p_KEY2s_CLOB IS NOT NULL THEN V_CLOB_LENGTH := DBMS_LOB.GETLENGTH(p_KEY2s_CLOB); -- 대용량 CLOB 데이터를 쪼개어 입력한다. WHILE (V_POS < V_CLOB_LENGTH) LOOP DBMS_LOB.READ(p_KEY2s_CLOB, V_AMOUNT, V_POS, V_BUFFER); IF V_BUFFER IS NOT NULL THEN DBMS_LOB.WRITEAPPEND(V_CLOB_SELECTED, LENGTH(V_BUFFER), V_BUFFER); END IF; V_POS := V_POS + V_AMOUNT; END LOOP; END IF; COMMIT; END; | cs |
위 예제 샘플에서 YSAPH 테이블의 key2s 컬럼이 Clob으로 돼 있습니다.
위 소스에서 녹색으로 된 부분을 잘 보시고 각자 필요에 맞게 수정해서 사용하시면 됩니다.
'프로그래밍 언어 > 쿼리문 + Oracle + MySQL' 카테고리의 다른 글
[phpMyAdmin]에서 import시 파일용량 늘리기 (0) | 2018.04.25 |
---|---|
[오라클] Oracle의 rollup 사용시 최종 총계(Total)만 보고 싶다면? (0) | 2017.11.20 |
[Orange] 오렌지에서 오라클(Oracle) CLOB 글자 다 보는 법 (0) | 2017.09.30 |
[오라클] DB Link 생성하기 (0) | 2017.08.17 |
[Orange] 오렌지에서 오라클(Oracle) 다른 유저로 DB 가져오기(import) (0) | 2017.07.27 |
댓글