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

Комментарий к операции - где хранится в базе?

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


Вступление в Клуб: 29.03.2013
СообщениеВт Июн 18, 2013 20:43   Комментарий к операции - где хранится в базе? Ответить с цитатой
Полезность: Нет оценки
Добрый день.
Я тут на новенького - принимайте....
Вопрос такой - в АРМе Администратор в конструкторе Операции есть вкладка 'Комментарий' - та что возле вкладки "Компиляция".
куда пишется это поле?
а поле хорошее - полноценное МЕМО-поле, можно засунуть в него много своей информации.
Нашел табличку METHOD (или METHODS - по памяти сейчас пишу) - вроде бы там должна информация храниться по операции, но вот поля соответствующего "Комментариям" там нет.
немного сумбурно получилось....
Damir
Участник - экстремал


Вступление в Клуб: 29.03.2013
СообщениеСр Июн 19, 2013 07:21   Re: Комментарий к операции - где хранится в базе? Ответить с цитатой
Полезность: Нет оценки
тыкс...
отвечаю сам себе (ну и вдруг кому-то вдруг...):
Код:
select * from lraw L WHERE L.ID = (select ID from TOPICS T WHERE OWNER = '16934631107')
Damir
Участник - экстремал


Вступление в Клуб: 29.03.2013
СообщениеСр Июн 19, 2013 08:00   Re: Комментарий к операции - где хранится в базе? Ответить с цитатой
Полезность: Нет оценки
Комментарий хранится RTF-формате, как оказалось.
Народ! А как конвертнуть RTF-формат в обычный varchar2?
Может, в ядре цфт есть библиотечка какая-нить?
у Кайта есть решение, но что-то сходу не осилил его.

Код:
select l.data from lralong raw w L
WHERE L.ID = (select ID from TOPICS T WHERE OWNER = '16934631107')


PS: есть тут кто?
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСр Июн 19, 2013 08:13    Ответить с цитатой
Полезность: 4
Есть такая функция

Код:
Function rtf2txt(c_InStr varchar2) return varchar2 is
s_tmp string;
s_InStr varchar2(32000);
s_OutStr varchar2(32000);
b_tag boolean;
begin
 s_InStr := c_InStr;
 b_tag := false;
 s_OutStr := '';
 s_tmp := '';

 if ( length(s_InStr) = 0 ) then -- пусто на входе
  null;

 elsif ( substr(s_InStr, 1, 6) <> '{\rtf1' ) then -- не rtf
   s_OutStr := 'не rtf!';

  else
   s_InStr := replace(replace(s_InStr, chr(13)), chr(10));
   for i in 1..length(s_InStr) loop -- ЦИКЛ ПО ТЕКСТУ

    if ( substr(s_InStr, i, 1) in ( '\', '}', '{' ) ) then -- управляющий
     b_tag := true;
    end if;

    if ( substr(s_InStr, i+1, 1) in ( '\', '}', '{' ) ) then -- управляющий следующий
     b_tag := false;

     if ( length(s_tmp) > 0 ) then

      if ( s_tmp = 'par' ) then -- перевод каретки
       s_OutStr := s_OutStr || chr(13) || chr(10);

      elsif ( ( substr(s_tmp, 1, 1) = '''' ) and ( length(s_tmp) >= 3 ) ) then  -- заполняем по существу !!! пробел, процент и знаки после русской
       s_OutStr := s_OutStr || chr(to_number(substr(s_tmp, 2, 2), 'xx')) || substr(s_tmp, 4);

      elsif ( ( ( instr(s_tmp, ' ') > 0 ) or ( ( substr(s_tmp, 1, 3) = 'par' ) and ( s_tmp <> 'pard' ) ) )
          and ( substr(s_tmp, length(s_tmp), 1) <> ';' )
            ) then
       s_tmp := replace(s_tmp, chr(13));
       s_tmp := replace(s_tmp, chr(10));
   
       if substr(s_tmp, 1, 3) = 'par' then -- заполняем... !!! пробел
        s_OutStr := s_OutStr || chr(13) || chr(10) || substr(s_tmp, 5, length(s_tmp) - 3);
       else
        s_OutStr := s_OutStr || substr(s_tmp, instr(s_tmp, ' ')+1, length(s_tmp)-instr(s_tmp, ' '));
       end if;
   
      end if;
   
     end if;
   
     s_tmp := '';
   
    end if;
   
    if ( b_tag ) then
      s_tmp := s_tmp || substr(s_InStr, i+1, 1);
    end if;

   end loop;

   s_OutStr := convert(s_OutStr, 'CL8ISO8859P5', 'CL8MSWIN1251');

 end if;

 return s_OutStr;

end;
Damir
Участник - экстремал


Вступление в Клуб: 29.03.2013
СообщениеСр Июн 19, 2013 14:05    Ответить с цитатой
Полезность: Нет оценки
Volod пишет:
Есть такая функция

это оно!
не понял как оно работает - надо формат RTF-а знать, но работает.

PS: Volod круче Кайта Razz
Кайт привел 3 варианта решения - у меня ни один не прокатил.
то схемы ctxsys нету, то Джавы нету - топать к DBA не вариант.
Решения с парсингом РТФ-а Кайт не привел.

Вот решения Кайта
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:25695084847068
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСр Июн 19, 2013 14:40    Ответить с цитатой
Полезность: Нет оценки
Код не мой, но написан был для моей задачи.
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеСр Июн 19, 2013 14:50    Ответить с цитатой
Полезность: Нет оценки
Volod пишет:
Код не мой, но

Мотороллер не мой , я только разместил (с)
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеЧт Июн 20, 2013 07:22    Ответить с цитатой
Полезность: 3
Damir пишет:
Volod пишет:
Есть такая функция

это оно!
не понял как оно работает - надо формат RTF-а знать, но работает.


А вот обратная:
Код:
function Txt2Rtf(p_value varchar2) return varchar2 is
v$ret   varchar2(32767);
begin
   v$ret := convert(p_value,0,stdio.WINTEXT);
   v$ret := replace(v$ret,CR$,LF$);
   v$ret := replace(v$ret,LF$||LF$,LF$);
   v$ret := replace(v$ret,LF$,'\par'||NL$);
--   v$ret := replace(v$ret,'   ','\tab');
   v$ret := '{\rtf1'||LF$||v$ret||LF$||'}';
   return v$ret;
end;
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеЧт Июн 20, 2013 13:28   Re: Комментарий к операции - где хранится в базе? Ответить с цитатой
Полезность: Нет оценки
Damir пишет:
тыкс...
отвечаю сам себе (ну и вдруг кому-то вдруг...):
Код:
select * from lraw L WHERE L.ID = (select ID from TOPICS T WHERE OWNER = '16934631107')


Не совсем так.
Код:
function GetMethodRemark(p_method ref [METHOD]) return varchar2 is
   v_ex   varchar2(32767);
   v$ret   varchar2(32767);
   v_pos   number;
begin
   v_ex :=
'declare m varchar2(32767); v$tmp long raw; v$ret varchar2(32767);
begin
   m := '||p_method||';
   for i in (select data from lraw where id = m) loop
      v$tmp := i.data;
   end loop;

   if v$tmp is not null then
      for i in (select data from lraw where id in (select id from topics t where t.owner = m and t.class = ''METHOD'' and t.topic = ''DESCRIPTION'') ) loop
         v$tmp := i.data;
      end loop;
   end if;

   v$ret := utils.raw_str(v$tmp);
   :res := v$ret;
end;';

   if rtl.exec_sql_out(v_ex,'res',v$ret) <> 0 then
      return null;
   end if;

   return Rtf2Txt(v$ret);
end;
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
Страница 1 из 1

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