Преобразование маленьких необработанных значений Oracle в другие типы - PullRequest
1 голос
/ 09 января 2009

У меня есть таблица Oracle, которая содержит поле типа LONG RAW, которое содержит символьные данные ASCII. Как я могу написать запрос или представление, которое преобразует это в более легко потребляемую строку символов? Это всегда будут однобайтовые символы, FWIW.

Ответы [ 3 ]

2 голосов
/ 09 января 2009

Может быть

select ...., to_lob(long_raw) from old_table

(http://www.psoug.org/reference/convert_func.html)

или

UTL_RAW.CAST_TO_VARCHAR2(b) 

(http://www.dbasupport.com/forums/showthread.php?t=5342).

0 голосов
/ 09 января 2009

Я обнаружил, что это хорошо работает с типами данных CLOB. Я полагаю, что то же самое будет справедливо для типов LOB.

create or replace function lob2char(clob_col clob) return varchar2 IS
buffer varchar2(4000);
amt BINARY_INTEGER := 4000;
pos INTEGER := 1;
l clob;
bfils bfile;
l_var varchar2(4000):='';
begin
LOOP
if dbms_lob.getlength(clob_col)<=4000 THEN
dbms_lob.read (clob_col, amt, pos, buffer);
l_var := l_var||buffer;
pos:=pos+amt;
ELSE
l_var:= 'Cannot convert.  Exceeded varchar2 limit';
exit;
END IF;
END LOOP;
return l_var;
EXCEPTION
WHEN NO_DATA_FOUND THEN
return l_var;
END;



INSERT INTO NEWTABLE (NEWCOLUMN) SELECT RTRIM(lob2char(OLDCOLUMN)) FROM OLDTABLE;
0 голосов
/ 09 января 2009

Я нашел эту цитату:

В Oracle9i вы можете даже:

изменить таблицу old_table modify (c clob );

чтобы конвертировать.

Смотрите здесь: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1037232794454

Редактировать

Максимальная длина столбца varchar2 составляет 4000. Это слишком мало?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...