2017-12-15 23 views
0

私は、次のエラーを取得しています:次のエラーORA-01427を取得:単一行副問合せは1行01427. 00000以上のものを返します - 「単一行副問合せは、複数行を返す」

私が取得したいです最初のクエリの列値を返し、その値を次のクエリに渡します。

ORA-01427:単一行のサブクエリは、複数の行 01427. 00000を返す - 次のクエリで


"単一行のサブクエリは、複数の行を返す":

with 

deal_XX AS(

SELECT distinct idh.vendor supplier 
        ,idh.deal_id 
        ,mff_report.mff_merch_sql.get_sup_name(idh.vendor) sup_name 


       FROM im_doc_head idh 
        ,mff_report.stage_complex_deal_head_hist scdhh 
        ,im_complex_deal_detail icdd 
        ,mff_report.v_loc vl 
        ,item_master im 
            ,item_master im_parent 
      WHERE ( ( idh.type IN ('DEBMEC','CRDMEC') --Debit and Credit Memos in APPROVED or POSTED 
         AND idh.status IN ('APPRVE','POSTED')) 
        OR ( idh.type = 'CRDNRC'    --Credit Note Requests in APPROVED or MATCHED 
         AND idh.status IN ('APPRVE','MTCH'))) 
       AND idh.deal_type = 'C' 
       AND NVL(:PM_supplier,idh.vendor) = idh.vendor 

       AND idh.deal_id = scdhh.deal_id (+) 
       AND SUBSTR(idh.ext_doc_id,(INSTR(idh.ext_doc_id,'-',1) + 1),INSTR(idh.ext_doc_id,'-',1,2) - (INSTR(idh.ext_doc_id,'-',1) + 1)) = scdhh.deal_detail_id (+) 
       AND idh.doc_date = scdhh.end_invoice_date (+) 
       AND idh.doc_id = icdd.doc_id 
       AND icdd.location = vl.loc 
       AND icdd.item = im.item 
           AND im.item_parent = im_parent.item (+) 
       AND ( :PM_supplier IS NOT NULL 
        OR :PM_doc_date_from IS NOT NULL 
        OR :PM_doc_date_to IS NOT NULL 
        OR :PM_approval_date_from IS NOT NULL 
        OR :PM_approval_date_to IS NOT NULL 
        OR :PM_ext_doc_id IS NOT NULL 
        OR :PM_batch_mode = 'Y') 
        ) 

    select distinct ship.order_no , (select deal_id from deal_XX) hhhh 
    from ordloc_discount od 
    ,shipment ship 
    ,mff_report.stage_complex_deal_head_hist scdhh 
    where od.deal_ID = (select deal_id from deal_XX) 

    and od.deal_id = scdhh.deal_id 
    and ship.status_code = 'R' 
    and od.order_no = ship.order_no 
    and ship.receive_date BETWEEN 
     to_date(scdhh.start_invoice_date , 'YYYY-MM-DD" "HH24:MI:SS') 
     AND 
     to_date(scdhh.end_invoice_date , 'YYYY-MM-DD" "HH24:MI:SS') ; 
+1

「deal_XXからdeal_idを選択しますか?サブクエリを使用するのではなく、そのCTEに参加しますか? –

+0

約180 1つの取引の注文番号は、私が期待しているものです。 –

答えて

0

Q1:select deal_id from deal_XXを実行すると、おそらく複数の行が表示されます。したがって、2つの問題がある:

  1. select *, (subselect) from tableXを有する次いで副選択が常にtableXの行ごとにただ一つの値を返す必要があります。副選択としてQ1があるので、照会は失敗します。

  2. 同じ問題は、select * from tableX X where X.y = (subselect)の場合です。ここでも、クエリー・プロセッサーは、各行に1つの値を返す副選択をTableXとし、Q1が多くの行を戻すことを期待しています。

解決策は、達成しようとしているものによって異なります。 2番目の問題はod.deal_ID IN (select deal_id from deal_XX)を使用して修正される可能性があります。deal_idのリストでdeal_idが見つかる行をdeal_XXで返します。

関連する問題