В сложном выражении внешнего соединения вы должны поместить оператор (+)
во все соответствующие столбцы, например:
AND D.IFSC_CODE=UPPER(substr(B.BANK_CODE (+),1,4))
Например:
SQL> WITH table_a AS (
2 SELECT '0001' ID FROM dual
3 UNION ALL SELECT '0002' FROM dual
4 UNION ALL SELECT '0003' FROM dual
5 ), table_b AS (
6 SELECT '0001a' ID FROM dual
7 UNION ALL SELECT '0002b' FROM dual
8 )
9 SELECT a.id, b.id
10 FROM table_a a, table_b b
11 WHERE a.id = substr(b.id (+), 1, 4);
ID ID
---- -----
0001 0001a
0002 0002b
0003
Эта форма внешнего объединения специфична для Oracle и, возможно, более трудна для чтения, чем внешнее соединение SQL ANSI. Кроме того, некоторые старые функции отключаются с помощью этого старого метода (полное внешнее соединение, внешнее соединение с несколькими таблицами). В форме соединения SQL и запроса запрос будет выглядеть следующим образом:
SQL> WITH table_a AS (
2 SELECT '0001' ID FROM dual
3 UNION ALL SELECT '0002' FROM dual
4 UNION ALL SELECT '0003' FROM dual
5 ), table_b AS (
6 SELECT '0001a' ID FROM dual
7 UNION ALL SELECT '0002b' FROM dual
8 )
9 SELECT a.id, b.id
10 FROM table_a a
11 LEFT OUTER JOIN table_b b ON a.id = substr(b.id, 1, 4);
ID ID
---- -----
0001 0001a
0002 0002b
0003