declare --类型定义 strsql string(500); type prizeinfo is record( prizecode VARCHAR2(200), prizetypeid number, prizename VARCHAR2(200), description VARCHAR2(500), packageid number, campaignid number ); type prizecode is record( prizecode VARCHAR2(200), rowcounts number ); info prizeinfo; codeinfo prizecode; rows_data VARCHAR2(200); v_ErrorCode NUMBER; -- Variable to hold the error message code v_ErrorText VARCHAR2(200); -- Variable to hold the error message text cursor c_eventstate is Select CampaignId,phonenumber,PolicyNumber,packageid from mkt_eventstate a where synstate =0 and packagestate = 2 and errorcode = 6 and rownum<10000 ; --定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型 c_row c_eventstate%rowtype; begin for c_row in c_eventstate loop begin -- strsql:='select a.prizecode,a.prizetypeid,b.prizename,b.description,c.packageid,c.campaignid from mkt_CampaignPrize a join mkt_prizeType b on a.prizetypeid=b.prizetypeid -- join mkt_UserPrizeInfo c on a.CampaignPrizeId=c.CampaignPrizeId and c.campaignid='||c_row.CampaignId||' and c.userid='||c_row.phonenumber||' and c.PolicyNumber='''||c_row.PolicyNumber||''' -- join mkt_packageprize e on e.packageid='||c_row.packageid||' and a.prizetypeid=e.prizetypeid and rownum=1 and b.PROVIDER=''生活服务商城''' ; -- execute immediate strsql into info ; -- dbms_output.put_line(info.prizecode||'-'||info.prizename||'-'||info.packageid||'-'||info.campaignid); strsql:='select a.prizecode, count(1) from mkt_CampaignPrize a join mkt_prizeType b on a.prizetypeid=b.prizetypeid join mkt_UserPrizeInfo c on a.CampaignPrizeId=c.CampaignPrizeId and c.campaignid='||c_row.CampaignId||' and c.userid='||c_row.phonenumber||' and c.PolicyNumber='''||c_row.PolicyNumber||''' join mkt_packageprize e on e.packageid='||c_row.packageid||' and a.prizetypeid=e.prizetypeid and b.PROVIDER=''生活服务商城'' group by a.prizecode, a.prizetypeid having count(1)>1' ; execute immediate strsql into codeinfo ; dbms_output.put_line(codeinfo.prizecode||'-'||codeinfo.rowcounts); -- dbms_output.put_line(c_row.CampaignId||'-'||c_row.phonenumber||'-'||c_row.PolicyNumber); -- RAISE_APPLICATION_ERROR(-20001,'数值不能为0'); EXCEPTION --捕捉异常 WHEN others THEN begin v_ErrorCode := SQLCODE; v_ErrorText := SUBSTR(SQLERRM, 1, 200); DBMS_OUTPUT.put_line('捕获了错误begin'); dbms_output.put_line(c_row.CampaignId||'-'||c_row.phonenumber||'-'||c_row.PolicyNumber||'-'||v_ErrorCode || '::'||v_ErrorText); DBMS_OUTPUT.put_line('捕获了错误end'); end; end; end loop; end;