Как получить конкретные слова в выводе оракула
Если я отправлю запрос как
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;