chr(13) в CLOB

dbms
Дата: 01.12.2009 16:04:17
Привет.

Загружаю CLOB в поле таблицы. Если просматривать загруженный клоб побайтово (HEX), то видно, что переход строки = chr(13) || chr(10). При чтении CLOB из хранимой процедуры оракл ведет себя так, буд-то символов 13 в файле нет, а на месте перехода строки - chr(10). Такое поведение оракла нравится и вполне устраивает. Но можно ли положиться, что ВСЕГДА при чтении CLOB оракл будет убирать символ 13?
andrey_anonymous
Дата: 01.12.2009 17:21:19
Сервер БД под win?
Есть подозрение, что под nix так может и не случиться.
Elic
Дата: 01.12.2009 20:13:04
dbms
Но можно ли положиться, что ВСЕГДА при чтении CLOB оракл будет убирать символ 13?
Oracle ничего не "убирает".
Это "любезно" делает клиентские библиотека/приложение (RTFM).
andrey_anonymous
Дата: 01.12.2009 20:18:47
Elic
Oracle ничего не "убирает".
Это "любезно" делает клиентские библиотека/приложение

Вспомни utl_file.
С clob может иметь место сходное поведение (использование стандартных библиотек + файловый поток в ascii-mode = платформозависимая интерпретация <cr> ).
...надо будет проверить при случае :)
Elic
Дата: 02.12.2009 10:14:47
andrey_anonymous
Вспомни utl_file.
Ты путаешь. CLOB - это "поток" символов, а не строк. Соответственно и "строчное" API отсутствует.
create table tmp(c clob);

declare
  c clob;
begin
  for i in 1 .. 10000 loop
    c := c || 'x' || chr(13) || chr(10);
  end loop;
  dbms_output.put_line(dbms_lob.getlength(c));
  dbms_output.put_line(length(dbms_lob.substr(c)));
  insert into tmp values(c);
end;
/

30000
30000

PL/SQL procedure successfully completed.

select dump(dbms_lob.substr(c, 10)) from tmp;

DUMP(DBMS_LOB.SUBSTR(C,10))
-----------------------------------------------------
Typ=1 Len=10: 120,13,10,120,13,10,120,13,10,120
andrey_anonymous
Дата: 02.12.2009 15:59:30
Elic

Если тест на win-машине, то попробуй плиз
c := c || 'x'  || chr(10);
utl_file сюда "лепил" лишнее.
Если на никсе - то не показатель, там подобного замечено не было.
...у меня сейчас ни одного win-сервера с оракелем нет, негде проверить
Elic
Дата: 02.12.2009 16:35:19
andrey_anonymous
Если тест на win-машине
Монопенисульно.
andrey_anonymous
utl_file сюда "лепил" лишнее.
Ещё раз: не весь utl_file, а его line-wise часть, которой напрочь нет в dbms_lob.
andrey_anonymous
Дата: 02.12.2009 16:40:41
Elic
Ещё раз: не весь utl_file, а его line-wise часть, которой напрочь нет в dbms_lob.

ЕМНИП, ты не прав.
Я наступил еще в 8i, пытаясь писать этим пакетом dbf (в бинарной моде, ессно).
Причем вроде как посимвольно тоже пробовал.
Потому и отказался тогда.
Elic
Дата: 02.12.2009 17:10:44
andrey_anonymous
пытаясь писать этим пакетом dbf (в бинарной моде, ессно).
В огороде бузина, а в Киеве дядька :)
А мы тут клобами балуемся, вообще-то...
andrey_anonymous
Дата: 02.12.2009 17:27:41
Elic
andrey_anonymous
пытаясь писать этим пакетом dbf (в бинарной моде, ессно).
В огороде бузина, а в Киеве дядька :)
А мы тут клобами балуемся, вообще-то...

Ты по ходу потерял нить, перечти топик :)
Так есть где потестить на win-сервере?
Успокой уже меня, покажи, что все работает без той platform-specific "особенности", которую oracle в свое время даже поправить не пожелал.