0

このクエリを実行してdb-visualizerでいくつかの結果を取得しようとしていますが、次の応答が返されます。

応答

[エラーコード:907、SQL状態:42000] ORA-00907:右括弧がありません

編集 されたクエリ:

SELECT * FROM (
    SELECT 
    e.*, clt_add_l1, clt_add_l2, clt_city, clt_prst_cd, clt_pszp_cd 
    FROM     Staging.db_&tablename_v._match e,  client.clt_address ca, client.clt_add_usg au 
    WHERE    substr(match_desc,1,2) = '00' 
    and e.clt_ofc_no=au.clt_ofc_no(+) 
    and e.clt_no=au.clt_no(+) 
    and au.clt_ofc_no=ca.clt_ofc_no(+) 
    and au.clt_add_key=ca.clt_add_key(+) 
    and au.clt_add_type(+)='PRI' 
    UNION ALL
    SELECT 
    e.*, clt_add_l1, clt_add_l2, clt_city, clt_prst_cd, clt_pszp_cd 
    FROM     Staging.db_&tablename_v._match e,  staging.clt_address_cp au 
    WHERE    substr(match_desc,1,2) in ('01','02') 
    and e.namadd_no = au.namadd_no(+) 
) foo ORDER BY match_desc, seq_no;
4

4 に答える 4

1

使用する:

   SELECT e.*, clt_add_l1, clt_add_l2, clt_city, clt_prst_cd, clt_pszp_cd, match_desc, seq_no
     FROM Staging.db_&tablename_v._match e 
LEFT JOIN client.clt_add_usg au ON au.clt_ofc_no = e.clt_ofc_no
                               AND au.clt_no = e.clt_no 
                               AND au.clt_add_type = 'PRI' 
LEFT JOIN client.clt_address ca ON ca.clt_ofc_no = au.clt_ofc_no
                               AND ca.clt_add_key = au.clt_add_key 
    WHERE substr(match_desc,1,2) = '00'
    UNION ALL
   SELECT e.*, clt_add_l1, clt_add_l2, clt_city, clt_prst_cd, clt_pszp_cd, match_desc, seq_no
     FROM Staging.db_&tablename_v._match e
LEFT JOIN staging.clt_address_cp au ON au.namadd_no = e.namadd_no
    WHERE substr(match_desc,1,2) IN ('01','02') 
 ORDER BY match_desc, seq_no

派生テーブル/インライン ビューは必要ありません。ただし、並べ替え対象の列が既にクエリ (IE: e.*) に含まれているかどうかは不明であるため、明示的に最後に追加しました。

ANSI-92 結合構文を使用するようにクエリを書き直しました。このクエリでは、外部結合に対して廃止されてから長い間使用されています。

データベースとテーブルがありません。問題を特定する最も簡単な方法は、データが返されるようになるまでクエリを元に戻すことです。次に、条件 (列、テーブル、WHERE/etc 句) を 1 つずつ追加して、問題が発生している場所を確認します。

于 2013-01-16T14:12:27.287 に答える
0

あなたのGUIは置き換えられていないと思います

Staging.db_&tablename_v._match

ちゃんと。これを試して:

select 'Staging.db_&tablename_v._match' from dual;

結果は?テーブル名を次のように残していると推測します

Staging.db_whatever._match

意図したのではなく

Staging.db_whatever_match
于 2013-01-16T14:18:31.493 に答える
0

次のいずれかを使用します。

substr(match_desc,1,2) in ('00') 

また

substr(match_desc,1,2) = '00' 
于 2013-01-16T14:11:03.717 に答える