0

こんにちはみんな私はこのようないくつかの行を更新しようとしています:

declare
   cursor c1 is select core_cust_id, ADDRESS_LINE1, ADDRESS_LINE2, ADDRESS_LINE3,CITY_CODE,
   STATE_CODE from crmuser.address where corp_id is not null and 
ADDRESSCATEGORY='Mailing';
   begin
   for i in c1 loop
   update  crmuser.tradefinance set ADDR_1=i.ADDRESS_LINE1,
   ADDR_2=i.ADDRESS_LINE2, ADDR_3=i.ADDRESS_LINE3, CITY_CODE=i.CITY_CODE,
   STATE_CODE=i.STATE_CODE       
   where i.core_cust_id=(select core_cust_id from crmuser.tradefinance where corp_id is not null);
   end loop; 
   end;

エラーが発生します:

ORA-01427: single-row subquery returns more than one row
ORA-06512: at line 7

実行すると

select core_cust_id, ADDRESS_LINE1, ADDRESS_LINE2, ADDRESS_LINE3,CITY_CODE,
   STATE_CODE from crmuser.address where corp_id is not null and 
ADDRESSCATEGORY='Mailing';

Core_cust_idと一致させたい485レコードを取得します。私が実行するとき:

select core_cust_id from crmuser.tradefinance where corp_id is not null;

485のcore_custIDをループ内の他のCore_cust_idと一致させます...クエリが複数のレコードを返すのはなぜですか?何を修正すればよいですか?Oracle10gを使用しています

4

1 に答える 1

1

これを試して

declare
   cursor c1 is select core_cust_id, ADDRESS_LINE1, ADDRESS_LINE2, ADDRESS_LINE3,CITY_CODE,
   STATE_CODE from crmuser.address where corp_id is not null and 
ADDRESSCATEGORY='Mailing';
   begin
   for i in c1 loop
   update  crmuser.tradefinance set ADDR_1=i.ADDRESS_LINE1,
   ADDR_2=i.ADDRESS_LINE2, ADDR_3=i.ADDRESS_LINE3, CITY_CODE=i.CITY_CODE,
   STATE_CODE=i.STATE_CODE       
   where i.core_cust_id=crmuser.tradefinance.core_cust_id 
   and crmuser.corp_id is not null;
   end loop; 
   end;
于 2012-10-10T12:25:24.390 に答える