|
|
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
Всем, привет. Подскажите, пожалуйста, выход со следующей ситуации. PROCEDURE build(TASKID NUMBER) IS buf_buf1 varchar2(32767); buf_buf2 varchar2(32767); buf_buf3 varchar2(32767); id_1 number; name_1 varchar(100); money_1 number; bl1 blob; bl2 blob; bl3 blob; begin for i in (select id, name, money from table_one) loop id_1:= i.id; name_1:=name; money_1 :=money; if i.id=1 then buf_buf1:=buf_buf1||id_1|| chr(9) || name_1 || chr(9)||money_1|| chr(10); end if; if i.id=2 then buf_buf2:=buf_buf2||id_1|| chr(9) || name_1 || chr(9)||money_1|| chr(10); end if; if i.id=3 then buf_buf3:=buf_buf3||id_1|| chr(9) || name_1 || chr(9)||money_1|| chr(10); end if; end loop; Как здесь преобразовать buf_buf1 в bl1 или может есть способ переменные сразу добавлять в bl1 end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 17:11 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
varchar2 - текстовый тип BLOB - бинарный Падеж падежей. Т.ч. или вместо BLOB - CLOB или явное преобразование (hextoraw или какой нибудь явный cast). IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 17:14 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, мне всеравно какой тип. Мне на выходе надо blob, так как этот blob передается в следующую процедуру и из этого blob строится excel файл с java функциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 17:18 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
Баньте тему сразу. Через день разбора синтаксических плс- и ора- и прочего говножуйства все равно придется закрывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 17:49 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
Zloxa, ничего не найду необходимого мне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 17:52 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
срачи прилетели, вместо помощи, начинаете лить.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 17:57 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
create or replace function clob_to_blob (p_clob_in in clob) return blob is v_blob blob; v_offset integer; v_buffer_varchar varchar2(32000); v_buffer_raw raw(32000); v_buffer_size binary_integer := 32000; begin -- if p_clob_in is null then return null; end if; -- DBMS_LOB.CREATETEMPORARY(v_blob, TRUE); v_offset := 1; FOR i IN 1..CEIL(DBMS_LOB.GETLENGTH(p_clob_in) / v_buffer_size) loop dbms_lob.read(p_clob_in, v_buffer_size, v_offset, v_buffer_varchar); v_buffer_raw := utl_raw.cast_to_raw(v_buffer_varchar); dbms_lob.writeappend(v_blob, utl_raw.length(v_buffer_raw), v_buffer_raw); v_offset := v_offset + v_buffer_size; end loop; return v_blob; end clob_to_blob; вот преобразует clob в blob, а мне надо varchar в blob ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 17:59 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
julat21, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 18:04 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
AlexFF__|, золотой человек. Спасибо, большое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 18:07 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 19:44 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
Коллеги, это все здорово, но при трансформации *char->Blob надо бы как-то про целевой encoding не забывать, мало ли с каким database_characterset придется столкнуться... а то и вообще N-тип подсунут :) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 19:52 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
Да, согласен. Правильнее использовать SUBSTR а не UTL_RAW.SUBSTR который считает позицию длину в байтах: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 21:47 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
SYДа, согласен. Правильнее использовать SUBSTR а не UTL_RAW.SUBSTR который считает позицию длину в байтах Вообще я имел ввиду convert и to_char либо "translate using char_cs", чтобы понимать, в какой кодировке лежат данные в blob :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 00:05 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousВообще я имел ввиду convert и to_char либо "translate using char_cs", чтобы понимать, в какой кодировке лежат данные в blob :) Зачем? Разве-что BLOB передается вне базы - но тогда convert пусть там и делают если у них charset не совпадает. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 04:03 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
SYесли у них charset не совпадаетчтобы узнать "не совпадает", надо знать кодировку переданного извне блоба. Соответственно выгрузка либо должна содержать указание кодировки через дополнительные атрибуты. Либо кодировка должна быть оговоренно-фиксированной независимо от кодировки исходной БД. В любом случае кому-то решать вопрос с перекодированием или надеяться, что кодировки баз никогда не поменяются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 04:33 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
SYРазве-что BLOB передается вне базы - но тогда convert пусть там и делают если у них charset не совпадает. А зачем вообще люди складывают тексты именно в B lob? Праальна, чтобы исключить применение к готовому тексту трансляции кодировки, применяемых при передаче между сервером и клиентом. А зачем исключать? Ну чтобы что-то не сломалось. Например: - текст содержит метаданные о собственной кодировке (XML) - текст предназначен для передачи контрагенту в определенной кодировке, причем независимо от кодировок клиентов, работающих с БД. Так вот. В предложенном решении текст ляжет в BLOB в одной из двух кодировок - char_cs или nchar_cs базы. Это довольно стабильно и даже в большинстве случаев достаточно. Но не переносимо. Потому при оформлении в код следует сделать две вещи: 1. применить to_char() к входному текстовому параметру (описанному как characterset any_cs). Бред? Нет, не бред. Oracle рекомендует для преобразования из nchar_cs в char_cs вместо ansi-шного translate(... using char_cs) Это разрешит проблему с кодировкой при передаче на вод N-типов. 2. Перед кастованием в raw применить convert с указанием только целевой кодировки, которую хотим видеть в blob (src characterset oracle и так знает - если выполнен п.(1)). тогда можно быть уверенным, что блоб сформирован корректно и данные лежат в предсказуемой кодировке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 10:02 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousА зачем вообще люди складывают тексты именно в B lob? Праальна, чтобы исключить применение к готовому тексту трансляции кодировки, применяемых при передаче между сервером и клиентом. Так я и говорил - "Разве-что BLOB передается вне базы". Кроме того, я бы делал convert не в Oracle а на mid-tier который знает: a) charset клиента б) charset базы SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 13:46 |
|
||
|
Преобразование varchar2 в blob
|
|||
|---|---|---|---|
|
#18+
SYТак я и говорил - "Разве-что BLOB передается вне базы". Кроме того, я бы делал convert не в Oracle а на mid-tier который знает: a) charset клиента б) charset базы SY. А зачем оно вообще в blob хранить, если в пределах базы? Геморрой один. mid-tier - неудачное решение, поскольку данные о кодировке строки, сохраненной в blob, утеряны в момент сохранения - см. пример с N-типом. Восстанавливать эти данные по косвенным признакам (charset базы) - неудачное решение, если эти данные можно сохранить в момент формирования blob. Тем более, что кода-то там... cast_to_raw(convert(to_char(:src_string),:target_charset)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 14:05 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=197&tid=1887318]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
49ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 407ms |

| 0 / 0 |
