甲骨文开发人员。 ORA-01722: 使用 UNION 时数字无效

Oracle developer. ORA-01722 Invalid Number when using UNION

我有这个问题:

我有两个表:Table A 和 Table B,同一列名为 PK_COLUMN,在两个表中都是 numeric(8, 0).

我想建立这个联盟:

Select 
    CAST(TRIM(TABLEA.PK_COLUMN) AS INT) 
FROM TABLE A 
UNION 
Select 
    CAST(TRIM(TABLEB.PK_COLUMN) AS INT) 
FROM TABLE B

我得到了下一个错误代码:

ORA-01722 Invalid number.

问题是,当我分别执行联合的两个部分时,它们工作得很好!

正如 Dominik Klug 所说,pk_column 中的一个值无法转换为 INT。当 运行 单独查询时,您不会收到错误,因为您没有扫描所有行,只是扫描首先返回的行的一个子集。如果您 运行 查询

Select DISTINCT CAST(TRIM(TABLEA.PK_COLUMN) AS INT) 
FROM TABLEA;

Select DISTINCT CAST(TRIM(TABLEA.PK_COLUMN) AS INT) 
FROM TABLEB;

您将能够确定哪些 table 有问题记录。

如果您使用的是 Oracle 12.2 或更高版本,您可以使用 VALIDATE_CONVERSION 函数来确定哪些值无法通过如下查询转换为 INT。

Select *
FROM TABLEA
WHERE VALIDATE_CONVERSION(TABLEA.PK_COLUMN as NUMBER) = 0;

Select *
FROM TABLEB
WHERE VALIDATE_CONVERSION(TABLEB.PK_COLUMN as NUMBER) = 0;