oracle присоединяет строку к числу, не работающему, добавляя regexp_like. Например,
Foo Bar
-------------- ------------
id varchar2(20) id number(20,0)
Идентификатор Foo может быть числом или любой строкой (не числом), например, 123, привет, мир, 555 и т. Д.
select foo.id,bar.id from Foo foo
left join Bar bar on (regexp_like(foo.id, '^[0-9]+$') and foo.id=bar.id)
ошибка:
ERROR at line 1:
ORA-01722: invalid number
foo.id = bar.id вычисляется только тогда, когда foo.id - это число, верно?
Следующее работает нормально для mysql
select foo.id,bar.id from Foo foo
left join Bar bar on (foo.id=bar.id)
Ноэто вызывает ORA-01722: неверный номер для оракула. Вот почему "regexp_like" добавляется в состоянии соединения.