Как получить конкретные слова в выводе оракула

Если я отправлю запрос как

select message_text
from x$dbgalert;

Тогда я получу этот результат ниже..

ORA-1501 signalled during: CREATE DATABASE  "NEWDB"
          ,MAXINSTANCES 1
          ,MAXLOGHISTORY 1
          ,MAXLOGFILES 16

Но я хочу получить конкретное слово, которое означает "ORA-1501в приведенном выше результате.

То, что я хочу, это один или несколько специальных слов, которые я хочу видеть в длинном предложении, которое включает в себя много слов.

1 ответ

Решение

Вы можете использовать SUBSTR и INSTR.

Например, предположим, у вас есть 3 строки в таблице, из которых только 2 строки имеют ORA- номер ошибки.

SQL> WITH DATA(str) AS(
  2  SELECT 'ORA-1501 signalled during: CREATE DATABASE  "NEWDB"
  3            ,ORA- 1
  4            ,MAXLOGHISTORY 1
  5            ,MAXLOGFILES 16' FROM dual UNION ALL
  6  SELECT 'ORA-1999 signalled during: DROP DATABASE  "NEWDB"
  7            ,MAXINSTANCES 1
  8            ,MAXLOGHISTORY 1
  9            ,MAXLOGFILES 16' FROM dual UNION ALL
 10  SELECT 'signalled during: DROP DATABASE  "NEWDB"
 11            ,MAXINSTANCES 1
 12            ,MAXLOGHISTORY 1
 13            ,MAXLOGFILES 16' FROM dual
 14  )
 15  SELECT SUBSTR(str, 1, instr(str, ' ', 1, 1) -1) str
 16  FROM DATA
 17  WHERE instr(str, 'ORA-') > 0;

STR
----------------------------------------------------------------
ORA-1501
ORA-1999

SQL>

WHERE instr(str, 'ORA-') > 0 я стою отфильтровать те строки, которые не имеют ORA- номер ошибки.

Обновление Предложение WITH просто для создания примера данных для демонстрации. В вашем фактическом запросе вам не нужно предложение WITH.

Вы можете просто использовать запрос:

SELECT SUBSTR(message_text, 1, instr(message_text, ' ', 1, 1) -1) message_text
  FROM x$dbgalert
 WHERE instr(message_text, 'ORA-') > 0;
Другие вопросы по тегам