Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярные выражения в PL/SQL 
V
    Опции темы
DimW
Дата 22.4.2010, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(alt5000 @  22.4.2010,  10:53 Найти цитируемый пост)
Я спросил

 smile извини, я подумал это ответ - серьезно.
PM MAIL ICQ   Вверх
Zloxa
Дата 22.4.2010, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(corpsehunter @  29.12.2007,  00:49 Найти цитируемый пост)
 у меня Oracle 9i

owa_pattern
Цитата(alt5000 @  22.4.2010,  10:53 Найти цитируемый пост)
 в массив передать разделенные через сплит части строки

Можно сделать sql+регекспами, офигенски круто, лаконично - в одно выражение
А можно просто по пацански instr-ами, тупо, не интересно, но трошки-трошки шустрее...в пиццот раз лишто
Код

declare
  type varchar_table is table of varchar2(200);
  foo varchar_table;
  src varchar2(4000);
  start_time number;
 
  function regexp_split(src varchar2)
    return varchar_table
  is
    result varchar_table;
  begin
    select rtrim(regexp_substr(str,'[^,]+,?',1,level),',')
      bulk collect into result
      from (select src str from dual)
      connect by regexp_substr(str,'[^,]+,?',1,level) is not null;
    return result;
  end;
  function instr_split(src varchar2)
    return varchar_table
  is
    result varchar_table := varchar_table();
    cur_pos number := 1;
    next_pos number;
    len number := nvl(length(src),0);
  begin
    while cur_pos <= len loop
      next_pos := instr(src||',',',',cur_pos);
      result.extend(1);
      result(result.count):= substr(src,cur_pos,next_pos - cur_pos);
      cur_pos := next_pos + 1;
    end loop;
    return result;
  end;
begin
  src := '1';
  for i in 1..100
  loop
    src := src||','||sys_guid;
  end loop;
  start_time := dbms_utility.get_time;
  for i in 1..500
  loop
    foo := regexp_split(src);
  end loop;
  dbms_output.put_line('sql+regexp:'||(dbms_utility.get_time-start_time));
  start_time := dbms_utility.get_time;
  for i in 1..500
  loop
    foo := instr_split(src);
  end loop;
  dbms_output.put_line('pl/sql+instr:'||(dbms_utility.get_time-start_time));
end;
/
 
sql+regexp:4971
pl/sql+instr:10
 
PL/SQL procedure successfully completed


Цитата(DimW @  22.4.2010,  10:40 Найти цитируемый пост)
а как насчет того, что тема обсуждалась два года назад

на то - пофиг, когда интересно


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.