oracle 설정

long type 변환

초이짬 2016. 1. 12. 16:10
728x90

일반적으로 long 타입을 변경 할때 안되면 아래와 같이 함수로 처리하자
좀 예전 방식이라 11g 에서 지원하는 다른 함수가 있는지는 모르겟다

Posted by 정희락 hrjeong 님 사이트 참조 하엿다
http://hrjeong.tistory.com/46



CREATE OR REPLACE FUNCTION f2 (
i_owner IN VARCHAR2,
i_table_name IN VARCHAR2,
i_column_name IN VARCHAR2,
i_rowid IN ROWID,
i_offset IN NUMBER DEFAULT 0
)
RETURN VARCHAR2
AS
l_sql VARCHAR2 (32767);
l_c INTEGER DEFAULT DBMS_SQL.open_cursor;
l_r NUMBER;
l_value VARCHAR2 (32767);
l_value_length NUMBER;
BEGIN
l_sql := q'[SELECT %COLUMN_NAME% FROM %OWNER%.%TABLE_NAME% WHERE ROWID = :p1]';
l_sql := REPLACE (l_sql, '%OWNER%', i_owner);
l_sql := REPLACE (l_sql, '%TABLE_NAME%', i_table_name);
l_sql := REPLACE (l_sql, '%COLUMN_NAME%', i_column_name);

DBMS_SQL.parse (l_c, l_sql, DBMS_SQL.native);
DBMS_SQL.bind_variable (l_c, ':p1', i_rowid);
DBMS_SQL.define_column_long (l_c, 1);
l_r := DBMS_SQL.EXECUTE (l_c);

IF (DBMS_SQL.fetch_rows (l_c) > 0)
THEN
DBMS_SQL.column_value_long (l_c, 1, 4000, i_offset, l_value, l_value_length);
END IF;

DBMS_SQL.close_cursor (l_c);
RETURN l_value;
END f2;


함수 만들고
사용은

SELECT f2 ('SCOTT', 'T1', 'C1', ROWID) AS c1
FROM t1 a;

요렇게

728x90