CftClub.ru
Клуб специалистов ЦФТ-Банк

BLOB to LONG RAW (без использования JAVA)

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
MARINA KRAMARENKO
Участник


Вступление в Клуб: 26.08.2013
СообщениеСр Окт 16, 2013 16:30   BLOB to LONG RAW (без использования JAVA) Ответить с цитатой
Полезность: Нет оценки
Есть ли возможность преобразовать данные типа BLOB в LONG RAW, не прибегая к помощи JAVA?
Может получилось у кого-нибудь? Помогите разобраться...

Спасибо.
maestro
Профи


Вступление в Клуб: 12.10.2010
СообщениеЧт Окт 17, 2013 08:21   Re: BLOB to LONG RAW (без использования JAVA) Ответить с цитатой
Полезность: Нет оценки
MARINA KRAMARENKO пишет:
Есть ли возможность преобразовать данные типа BLOB в LONG RAW, не прибегая к помощи JAVA?
Может получилось у кого-нибудь? Помогите разобраться...

Спасибо.


У нас на джаве! Very Happy
MARINA KRAMARENKO
Участник


Вступление в Клуб: 26.08.2013
СообщениеЧт Окт 17, 2013 09:11   Re: BLOB to LONG RAW (без использования JAVA) Ответить с цитатой
Полезность: Нет оценки
maestro пишет:
У нас на джаве! Very Happy


А можно примерчик? Very Happy
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеЧт Окт 17, 2013 09:20   Re: BLOB to LONG RAW (без использования JAVA) Ответить с цитатой
Полезность: Нет оценки
MARINA KRAMARENKO пишет:
BLOB в LONG RAW

Нафига?!
LONG RAW куда-нить преобразовать, я ещё понимаю...

Вот примерчик, может, поможет.
Код:

lMax   constant pls_integer := 4000;

type arr_str table of varchar2(32767) index by binary_integer;
function TextView(   p_name   varchar2
) return arr_str is
   iCursor      integer := dbms_sql.open_cursor;
   longValue   long;
   iBufLen      pls_integer;
   a         arr_str;
   iSize      integer;
begin
   iSize := 0;

   for (   select x(x.text_length   :text_length)
         in user_views%rowtype
         where   x.view_name = p_name
   ) loop
      iSize := x.text_length;
   end loop;

   if iSize = 0 then
      pragma error('view '||p_name||' not found');
   end if;


   dbms_sql.parse(   iCursor
            ,   'select text from user_views where view_name = :bv'
            ,   dbms_sql.native
   );

   dbms_sql.bind_variable( iCursor, ':bv', p_name );

   dbms_sql.define_column_long(iCursor, 1);
   dbms_sql.execute(iCursor);

   if dbms_sql.fetch_rows(iCursor) > 0 then
      for i in 1 .. ceil(iSize / lMax) loop
         dbms_sql.column_value_long(   c            ==   iCursor
                           ,   position      ==   1
                           ,   length         ==   lMax
                           ,   offset         ==   (i-1)*lMax
                           ,   value         ==   longValue
                           ,   value_length   ==   iBufLen
         );

         a(a.count + 1) := longValue;
      end loop;
   end if;

   if a.count = 0 then
      pragma error('view '||p_name||' not found');
   end if;
   a(1) := 'create or replace view '||p_name||' as '||a(1);

   return a;
end;
maestro
Профи


Вступление в Клуб: 12.10.2010
СообщениеЧт Окт 17, 2013 09:31   Re: BLOB to LONG RAW (без использования JAVA) Ответить с цитатой
Полезность: Нет оценки
MARINA KRAMARENKO пишет:
maestro пишет:
У нас на джаве! Very Happy


А можно примерчик? Very Happy


Код:


create or replace and compile java source named "NomRepView" as
import oracle.jdbc.OracleDriver;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class NomRepView {
   public static void CopyBlobToRep(Blob v_blob, int v_job, int v_pos) throws SQLException,IOException {
    Connection con = null;
    PreparedStatement pst = null;
    try {
      con = new OracleDriver().defaultConnection();
      pst = con.prepareStatement("UPDATE ORSA_JOBS_OUT SET BODY = ? WHERE job = ? and pos = ?");
      InputStream in = null;
      try {
        in = new BufferedInputStream(v_blob.getBinaryStream());
        pst.setBinaryStream(1, in, (int) v_blob.length());
        pst.setInt(2, v_job);
        pst.setInt(3, v_pos);
        pst.execute();
      } finally {
        if (in != null) {in.close();}
      }
    } finally {
      if (pst != null) {pst.close();}
      if (con != null) {con.close();}
    }
  }
}
MARINA KRAMARENKO
Участник


Вступление в Клуб: 26.08.2013
СообщениеПн Окт 21, 2013 15:27    Ответить с цитатой
Полезность: Нет оценки
Спасибо, все получилось!!! Very Happy
kykyRyky
Участник


Вступление в Клуб: 27.08.2013
СообщениеЧт Окт 24, 2013 08:28    Ответить с цитатой
Полезность: Нет оценки
Марина, поделитесь пожалуйста, что и как вы сделали. Похоже у нас схожие задачи, у меня сейчас в файлы сохранены блобы, которые надо загрузить в LONG RAW.
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеПт Окт 25, 2013 12:38    Ответить с цитатой
Полезность: Нет оценки
kykyRyky пишет:
Марина, поделитесь пожалуйста, что и как вы сделали. Похоже у нас схожие задачи, у меня сейчас в файлы сохранены блобы, которые надо загрузить в LONG RAW.


Oracle, например, везде пишет, что тип LONG RAW - это устаревший тип и его поддерживают постольку, поскольку.
Объясните, зачем он вам ?
devor
Профи


Вступление в Клуб: 13.02.2012
СообщениеПт Окт 25, 2013 14:14    Ответить с цитатой
Полезность: Нет оценки
Random пишет:
kykyRyky пишет:
Марина, поделитесь пожалуйста, что и как вы сделали. Похоже у нас схожие задачи, у меня сейчас в файлы сохранены блобы, которые надо загрузить в LONG RAW.


Oracle, например, везде пишет, что тип LONG RAW - это устаревший тип и его поддерживают постольку, поскольку.
Объясните, зачем он вам ?


Тяжелое наследие царского режима - схемы на Oracle8, например.
По теме - если непременно нужно сделать на чистом PL/SQL, то надо резать на куски по 32K
Код:
utl_raw.cast_to_varchar2

ну а потом куски склеивать их вместе
Код:
dbms_lob.substr
MARINA KRAMARENKO
Участник


Вступление в Клуб: 26.08.2013
СообщениеПн Окт 28, 2013 09:16    Ответить с цитатой
Полезность: Нет оценки
kykyRyky пишет:
Марина, поделитесь пожалуйста, что и как вы сделали. Похоже у нас схожие задачи, у меня сейчас в файлы сохранены блобы, которые надо загрузить в LONG RAW.

Легко! В архиве - хранилище для создания простой операции в ИБСО и скрипт jvs, который нужно создать в Toad или SQLNav.
Если будут вопросы и/или предложения по улучшению, обращайтесь!
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru