Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / нужно "выудить" из текста / 8 сообщений из 8, страница 1 из 1
08.06.2018, 12:19
    #39658232
нужно "выудить" из текста
Добрй день,
нужно "выудить" из текста название Constraint, при ошибке ORA-00001.
Посоветуйте, как можно записать этот селект более компактней:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
            SELECT SUBSTR (meldung, anfang, ende)
              FROM (SELECT   INSTR (
                                 SUBSTR (
                                     'Hasdkf H kasjd fHk jaskdf jkasfd hK hORA-00001: Unique Constraint (STAGE.EMPLOYEES_PK) violated jka aksdj fa sjaksdjf aksjdf',
                                       (INSTR (lower('Hasdkf H kasjd fHk jaskdf jkasfd hK hORA-00001: Unique Constraint (STAGE.EMPLOYEES_PK) violated jka aksdj fa sjaksdjf aksjdf'),
                                               'unique constraint ('))
                                     + 19),
                                 ')')
                           - 1
                               AS ende,
                           INSTR (lower('Hasdkf H kasjd fHk jaskdf jkasfd hK hORA-00001: Unique Constraint (STAGE.EMPLOYEES_PK) violated jka aksdj fa sjaksdjf aksjdf'), 'unique constraint (') + 19
                               anfang,
                               'Hasdkf H kasjd fHk jaskdf jkasfd hK hORA-00001: Unique Constraint (STAGE.EMPLOYEES_PK) violated jka aksdj fa sjaksdjf aksjdf' as meldung
                      FROM DUAL)



Thank you!
...
Рейтинг: 0 / 0
08.06.2018, 12:28
    #39658242
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужно "выудить" из текста
...
Рейтинг: 0 / 0
08.06.2018, 12:31
    #39658246
нужно "выудить" из текста
Elic,

спасибо.
...
Рейтинг: 0 / 0
08.06.2018, 12:31
    #39658247
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужно "выудить" из текста
regexp_substr(str, 'ORA-00001: Unique Constraint \(([^\)]*)\) violated', 1, 1, 'i', 1) ?
...
Рейтинг: 0 / 0
08.06.2018, 12:54
    #39658286
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужно "выудить" из текста
Hans Christian Andersen,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
WITH t(s) AS (
select 'Hasdkf H kasjd fHk jaskdf jkasfd hK hORA-00001: Unique Constraint (STAGE.EMPLOYEES_PK) violated jka aksdj fa sjaksdjf aksjdf' from dual
)
,tt(c,b,e) as (
select s,instr(s,'('),instr(s,')') from t
)
SELECT SUBSTR(c,b+1,e-b-1) as constr FROM tt UNION ALL
select regexp_substr(s, '\(([^\)]*)\)', 1, 1, 'i', 1) from t
/



единственно, нужно учитывать, что на больших объёмах instr будет быстрее

p.s. у Вячеслав Любомудров, более точный поиск, я просто ищу текст в скобках
...
Рейтинг: 0 / 0
08.06.2018, 13:01
    #39658297
нужно "выудить" из текста
Спасибо Вячеслав Любомудров и Vadim Lejnin,

Взял вот это решение regexp_substr(str, 'ORA-00001: Unique Constraint \(([^\)]*)\) ', 1, 1, 'i', 1)
Заменил "violated" на пробел. Так как "violated" встречается на 2х языках.
...
Рейтинг: 0 / 0
08.06.2018, 14:50
    #39658405
alwan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужно "выудить" из текста
Hans Christian AndersenСпасибо Вячеслав Любомудров и Vadim Lejnin,

Взял вот это решение regexp_substr(str, 'ORA-00001: Unique Constraint \(([^\)]*)\) ', 1, 1, 'i', 1)
Заменил "violated" на пробел. Так как "violated" встречается на 2х языках.

Можно тогда заменить на
Код: sql
1.
(violated|нарушено)
...
Рейтинг: 0 / 0
08.06.2018, 15:10
    #39658440
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужно "выудить" из текста
Hans Christian Andersen"violated" встречается на 2х языкахИ с китайской винды никого в базу не пускать!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / нужно "выудить" из текста / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]