2012-11-22
오라클 PL/SQL에서 LONG타입 SELECT 하기.
DECLARE
src VARCHAR2 ( 32767 );
len INT;
idx INT;
BEGIN
SELECT v.text, v.text_length
INTO src, len
FROM sys.user_views v
WHERE 1 = 1
AND v.view_name = UPPER ( 'V_gbyo' );
idx := 1;
FOR p IN 1 .. ( len / 250 ) LOOP
DBMS_OUTPUT.put_line ( 'TEXT=' || SUBSTR ( src, idx, 250 ) );
idx := idx + 250;
END LOOP;
END;
substr함수에서 한번에 잘라서 사용하는 제약은 각 시스템의 운영 환경에 따라 다르다..^^
상기 예제는 dbms_output에서 라인당 최대 출력 가능한 버퍼 크기가 250으로 설정되어 있어서 저렇게 했다..ㅡㅡ; (물로 조정 가능하다..)
함수를 만들어 DML문장에 바로 사용하는것도 가능할까?
<오라클 9i>
아래는 뷰 소스를 조회하는 방법 ^^;
CREATE OR REPLACE FUNCTION f_viewsrc ( a_viewname VARCHAR2, a_pos INT )
RETURN VARCHAR2 IS
src VARCHAR2 ( 32767 );
len INT;
idx INT;
BEGIN
SELECT v.text, v.text_length
INTO src, len
FROM sys.user_views v
WHERE 1 = 1
AND v.view_name = UPPER ( a_viewname );
RETURN SUBSTR ( src, a_pos, 4000 );
END;
SELECT *
FROM ( SELECT f_viewsrc ( v.view_name, t.pos * 4000 + 1 ) AS src_text
FROM sys.user_views v CROSS JOIN ( SELECT ROWNUM - 1 pos
FROM all_objects
WHERE ROWNUM <= 9 ) t
WHERE 1 = 1
AND v.view_name = 'V_GBYO' )
WHERE src_text IS NOT NULL
32767byte를 초과하는 Long타입의 컬럼 내용을 select문에서 조회하려면...
다음과 같은 방식으로 함수를 작성해야 한다.
CREATE OR REPLACE FUNCTION f_viewsrc (a_index INT, a_pos INT)
RETURN VARCHAR2
IS
v_sql VARCHAR2 (32767) := 'SELECT LONG컨텐츠컬럼 FROM 테이블명 WHERE PK컬럼 = :변수1 ';
v_csr BINARY_INTEGER;
v_piece VARCHAR2 (32767);
v_clob CLOB;
v_plen INTEGER := 32767;
v_tlen INTEGER := 0;
v_rows INTEGER;
BEGIN
v_csr := DBMS_SQL.open_cursor;
DBMS_SQL.parse (v_csr, v_sql, DBMS_SQL.native);
DBMS_SQL.bind_variable (v_csr, ':변수1', a_index);
DBMS_SQL.define_column_long (v_csr, 1);
v_rows := DBMS_SQL.execute_and_fetch (v_csr);
LOOP
DBMS_SQL.column_value_long (v_csr, 1, 32767, v_tlen, v_piece, v_plen);
-- 조회된 결과값을 CLOB컬럼에 담는다.
v_clob := v_clob || v_piece;
-- 다음 조회 시작 위치를 계산한다.
v_tlen := v_tlen + 32767;
EXIT WHEN v_plen < 32767;
END LOOP;
RETURN SUBSTR (v_clob, a_pos, 2000);
END;
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기
-------------------------------------------------------
스마트폰 기종 :
OS버젼 :
-------------------------------------------------------
문제점 및문의 :