Является ли Oracle CAST ON CONVERSION ERROR ошибкой? - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь Oracle CAST с предложением ON CONVERSION ERROR в первый раз, и результаты не те, что я ожидаю.

Давайте начнем с CAST без предложения:

SELECT CAST(123456  AS NUMBER(1,0)) FROM DUAL;

ORA-01438: "value larger than specified precision allowed for this column"

Номер 123456 длиннее NUMBER(1,0). Он каким-то образом не усекается до одного ди git, но возникает ошибка. Хорошо. Это то, что я ожидал.

SELECT CAST('123456'  AS VARCHAR2(4 CHAR)) FROM DUAL;

Result = '1234'

Строка '123456' длиннее VARCHAR2(4 CHAR). Это не подходит. Я должен признать, что ожидал ошибку преобразования как с числом, а не искажением строки.

SELECT CAST(123456  AS NUMBER(1,0) DEFAULT -1 ON CONVERSION ERROR) FROM DUAL;

Result: 123456

Как это? Внезапно возникает проблема с номером 123456, который не помещается в NUMBER(1,0), и возвращается все число?

SELECT CAST('123456'  AS VARCHAR2(4 CHAR) DEFAULT 'too long' ON CONVERSION ERROR) FROM DUAL;

ORA-00907: "missing right parenthesis" at position 43

Я смотрел снова и снова; Здесь я не вижу пропущенных скобок.

Мое мышление неверно? Или CAST, особенно в отношении предложения ON CONVERSION ERROR, некорректно?

1 Ответ

0 голосов
/ 24 апреля 2020

Относительно ON CONVERSION ERROR. См. Таблицу Casting Built-In Data Types в этой ссылке . Только те преобразования, которые отмечены Note3, могут использовать ON CONVERSION ERROR. Вы также можете прочитать Note3 для получения более подробной информации

Для вашего второго выпуска вы должны упомянуть format после ON CONVERSION ERROR, как вы можете упомянуть в TO_NUMBER

  SELECT CAST(123456  AS number(1,0) DEFAULT -1 ON CONVERSION ERROR,9) FROM 
  DUAL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...