Разбор/парсинг значения поля (строки) по разделителям на строки

25.10.2011

Простой пример того, о чем речь:

SELECT regexp_substr(str, '[^#]+', 1, LEVEL)
  FROM (SELECT 'one#two#tree' str FROM dual)
CONNECT BY instr(str, '#', 1, LEVEL-1) > 0

напоминалка:

  • ‘[^#]+’ такая маска найдет все символы кроме решетки
  • instr(str, ‘#’, 1, LEVEL-1) > 0 поиск позиции разделителя начиная с первой позиции и, видимо, с LEVEL = 2 (возвратит 0 если позиция при заданных параметрах не найдена)
  • CONNECT BY условие подсказывает ораклу как долго продолжать цикл

Результат:

1	one
2	two
3	tree

Агрегация (конкатенация) строковых значений полей с группировкой

29.08.2011

Иногда необходимо склеить (сконкатенировать) строковые значения полей возвращаемых запросом в одно значение в соответствии с группировкой по другому полю, сделать это можно как с помощью встроенных Oracle функций так и с помощью своей.

Ниже описание одного способа с использованием встроенной функции wm_concat и ссылки на описание остальных методов.

Функция SQLERRM

02.06.2011

Что делает функция SQLERRM?

Функция SQLERRM возвращает сообщение об ошибке связанной с последним из возникших срабатываний оператора exception. Эта функция должна использоваться только в блоке Exception вашего кода:

EXCEPTION

    WHEN exception_name1 THEN

        [statements]

    WHEN exception_name2 THEN

        [statements]

    WHEN exception_name_n THEN

        [statements]

    WHEN OTHERS THEN

        [statements]

END [procedure_name];