Sql – Inline query to update multiple rows

oracleoracle10gsql

Here is a brief description of the tables I'm working with in Oracle 10g:

Notes:
Table : jnldetail : Single row with data as shown.
There are multiple package id's attached to the same bill_ref_no for an account. Therefore, I'm trying to update "jnldetail " with the multiple package_id's.

Relation between index_bill_ref and bill_ref_no : 1 – 1
Relation between account_no and ( index_bill_ref and bill_ref_no ) : 1 – Many

**Table : jnldetail** :
account_no     bill_ref_no     amount

8594822        74282843        822

I'm adding another column package_id with the following command:

alter table jnldetail add package_id number(10)


**table: bill_invoice**:

account_no    bill_ref_no       index_bill_ref

8594822       74282843          763653495


**table: bill_invoice_detail**:

index_bill_ref      package_id    component_id

763653495           20000077      20000177

763653495           20000250      20000528

763653495           13000019      13000137

**Expected Result:**
**Table : jnldetail** :

account_no     bill_ref_no     amount       package_id

8594822        74282843        822          20000077

8594822        74282843        822          20000250

8594822        74282843        822          13000019 

My Query is:

UPDATE jnldetail tp
SET tp.package_id = (
    select 
         t1.package_id 
    from bill_invoice_detail t1
       , bill_invoice t2
    where 
         t1.index_bill_ref = t2.index_bill_ref 
      and
         t2.account_no = tp.account_no
)

The error message is : ora 01427 : single row subquery returns more than one row

Any inputs will be helpful.

Thanks!

Best Answer

The problem is that you're trying to set tp.package_id to more than one number, because your subquery is returning more than one result, e.g. 20000077 and 13000019. You'll need to alter the subquery so that only one value is returned.