Я пытаюсь 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
, некорректно?