Oracle не работает

Я пытаюсь получить все коды и реквизиты IFSC (уникальный код банка) от моего банковского мастера, который начинается с первых 4 символов введенного кода IFSC. У меня есть основная таблица банков, которая включает код IFSC (4 символа), соответствующие банковские реквизиты.

Основная часть запроса приведена ниже.

AND D.IFSC_CODE=UPPER(substr(B.BANK_CODE,1,4)) (+) ORDER BY....

Когда я выполняю этот запрос, я получаю сообщение об ошибке "ORA-00936: отсутствует выражение".

Что я ожидаю от запроса:

  • вернуть реквизиты, если в основной записи банка есть банк, соответствующий введенному коду IFSC
  • иначе только введенный IFSC должен отображать

Когда я переписываю запрос как

AND D.IFSC_CODE(+) =UPPER(substr(B.BANK_CODE,1,4)) ORDER BY....

Нет ошибки, но результат оказался не таким, как я ожидал.

Как я могу решить это?

1 ответ

В сложном выражении внешнего соединения вы бы поместили (+) оператор на всех соответствующих столбцах, как в:

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 
Другие вопросы по тегам