内容阅读
在知识库中专注阅读,并随时返回相关工具与课程
ORA-01722常见语法
无效的数字
Invalid number
错误描述
尝试将字符串转换为数字失败,因为字符串不表示有效数字。
可能原因
- 将包含非数字数据的 VARCHAR2 列与 NUMBER 比较
- 算术运算中非数字字符串的隐式转换
- 数据质量问题:预期为数字的列中包含非数字值
解决方案
- 1查找非数字值:SELECT col FROM t WHERE NOT REGEXP_LIKE(col, '^-?[0-9]+(\\\\.[0-9]+)?$');
- 2使用 TO_NUMBER 配合异常处理或 DEFAULT ON CONVERSION ERROR(12c+)
- 3在源头修复数据质量问题
诊断命令
SELECT col FROM table_name WHERE NOT REGEXP_LIKE(col, '^[0-9.]+$') AND col IS NOT NULL FETCH FIRST 20 ROWS ONLY;SELECT data_type FROM dba_tab_columns WHERE table_name = 'TABLE_NAME' AND column_name = 'COL_NAME';#syntax#invalid-number#conversion#data-type