1

入力した 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....

エラーはありませんが、結果は期待したものではありませんでした。

どうすればこれを解決できますか?

4

1 に答える 1

4

複雑な外部結合式では、次の(+)ように、関連するすべての列に演算子を配置します。

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 ANSI 結合形式では、クエリは次のようになります。

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 
于 2011-01-18T09:00:43.457 に答える