Я пытаюсь разобрать годы, введенные в виде строк (пожалуйста, не заставляйте меня начинать — это то, что есть). Однако есть введенные годы, которые не могут быть проанализированы TO_NUMBER
.
WITH src AS (
SELECT '2000' AS y FROM DUAL
UNION SELECT '1991' AS y FROM DUAL
UNION SELECT '20--' AS y FROM DUAL
UNION SELECT '09' AS y FROM DUAL
UNION SELECT '11' AS y FROM DUAL
UNION SELECT '95' AS y FROM DUAL
)
BEGIN
SELECT
s.y,
TO_NUMBER(s.y) AS p
FROM src s
EXCEPTION
WHEN INVALID_NUMBER THEN NULL
END
Я никогда не занимался обработкой исключений в Oracle, поэтому прошу прощения, если это такой простой вопрос.
При выполнении моего запроса выше я получаю ORA-00928: missing SELECT keyword
, а затем выделяет ключевое слово BEGIN
. Из поиска вокруг все, что я видел, люди используют BEGIN SELECT
, что я тоже делаю. Я предполагаю, что я испортил где-то еще?
В основном то, что я хочу сделать, это проанализировать строку, и если возникнет исключение, я просто установлю его на NULL
.
РЕДАКТИРОВАТЬ
Я попробовал другой подход и добавил несколько точек с запятой, как прокомментировал @DavidFaber ниже.
BEGIN
SELECT
s.y,
TO_NUMBER(s.y) AS p
FROM (
SELECT '2000' AS y FROM DUAL
UNION SELECT '1991' AS y FROM DUAL
UNION SELECT '20--' AS y FROM DUAL
UNION SELECT '09' AS y FROM DUAL
UNION SELECT '11' AS y FROM DUAL
UNION SELECT '95' AS y FROM DUAL
) s;
EXCEPTION
WHEN INVALID_NUMBER THEN NULL;
END;
Теперь я получаю другую ошибку ORA-06550: line 2, column 3: PLS-00428: an INTO clause is expected in this SELECT statement
.
11g
, поэтому похоже, что я не могу его использовать. - person Patrick Gregorio   schedule 06.06.2018