我第一次尝试使用 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)
. 它不会以某种方式神奇地截断为一位数,但会引发错误。好的。这是我预期会发生的。
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
条款,有缺陷?