Я думаю, что у вас есть некоторые "поврежденные" данные, где SUBSTR(d.PAYEE_ID, 2, 7)
не является числовым.Вы можете идентифицировать их, используя REGEXP_LIKE, например: WHERE REGEXP_LIKE(SUBSTR(d.PAYEE_ID, 2, 7), '\D')
.
Тогда вы сами выбираете, как поступить с этими данными.Одна из возможностей - использовать case в условии JOIN и только JOIN, когда SUBSTR (d.PAYEE_ID, 2, 7) является числовым:
SELECT
d.PAYEE_ID,
SUBSTR(d.PAYEE_ID, 2, 7) AS CLAIMANT_ID,
d.ACCOUNT_NB,
c.CLAIM_ID
FROM DW_PCS d
LEFT JOIN DW_CLAIM c
ON c.CLAIMANT_ID = CASE WHEN NOT REGEXP_LIKE(SUBSTR(d.PAYEE_ID, 2, 7),'\D')
THEN TO_NUMBER(SUBSTR(d.PAYEE_ID, 2, 7))
END
PS: я думаю, что MySQL преобразует обе стороны в строки для сравнения, тогда какOracle пытается преобразовать левую сторону в число, которое приводит к этой ошибке.Поэтому разница ...