Я пытаюсь разобрать годы, введенные в виде строк (, пожалуйста, не начинайте, это то, что ).Однако есть введенные годы, которые не могут быть проанализированы 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
.