2011-01-18 18 views
1

入力したIFSCコードの最初の4文字で始まる銀行マスタからすべてのIFSCコードと詳細(銀行固有のコード)を取得しようとしています。私はIFSCコード(4文字)、対応する銀行の詳細を含む銀行マスターテーブルを持っています。Oracleが動作しない

質問の主な部分を以下に示します。

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

このクエリを実行すると、エラーメッセージ "ORA-00936:missing expression"が表示されます。私は、クエリから期待しています何

は次のとおりです。

  • 復帰詳細銀行のみIFSCが

が表示されます入力した入力されたIFSCコード他

  • に対応する銀行マスタに存在する場合クエリを書き直すと

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

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

    どうすれば解決できますか?例えば

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

    :あなたはのように、関連するすべての列に(+)オペレータを置く結合式を複雑な外で

  • +2

    新しい古典的なoracle構文を忘れて、新しい、最新のansi結合を使用しましょう! –

    +0

    全体のクエリを投稿する(できれば関連するCREATE TABLEとサンプルデータで)。 –

    答えて

    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 
    
    関連する問題