oracle-循环内部,异常处理

写脚本的时候碰到了

Declare
o_name Varchar2(200);
o_code VARCHAR2(50);
begin
for V_ROW in (Select /+ Parallel(4) / r.id,r.orig_org_code
From stl.t_stl_bill_receivable r
Where r.express_dest_org_code Is Not Null
And r.express_orig_org_code Is Null
And r.product_code In (‘PACKAGE’,’RCP’,’EPEP’,’DEAP’)
And r.business_date < Sysdate) loop
SELECT T.PART_CODE AS PART_CODE,
O.NAME AS PART_NAME
into o_code,o_name
FROM BSE.T_BAS_EXPRESS_PART_SALES_DEPT T,BSE.T_BAS_ORG O,BSE.T_BAS_SALES_DEPARTMENT SD
WHERE T.PART_CODE = O.CODE
AND T.SALES_DEPT_CODE = SD.CODE
AND SD.ACTIVE = ‘Y’
AND O.ACTIVE = ‘Y’
AND T.ACTIVE = ‘Y’
AND T.SALES_DEPT_CODE = V_ROW.orig_org_code;
Update stl.t_stl_bill_receivable r Set r.express_orig_org_code = o_code,r.express_orig_org_name = o_name
Where r.id = V_ROW.ID;
commit;
end loop;
end;
经查是因为V_row没有数据。
所以要加入异常处理,但是在循环内加入异常也有错误。

exception是在end前就有效,不能再循环内(不知道为什么),所以多加一个begin end.
Declare
o_name Varchar2(200);
o_code VARCHAR2(50);
begin
for V_ROW in (Select /+ Parallel(4) / r.id,r.orig_org_code
From stl.t_stl_bill_receivable r
Where r.express_dest_org_code Is Not Null
And r.express_orig_org_code Is Null
And r.product_code In (‘PACKAGE’,’RCP’,’EPEP’,’DEAP’)
And r.business_date < Sysdate) loop
begin
SELECT
T.PART_CODE AS PART_CODE,
O.NAME AS PART_NAME
into o_code,o_name
FROM BSE.T_BAS_EXPRESS_PART_SALES_DEPT T,BSE.T_BAS_ORG O,BSE.T_BAS_SALES_DEPARTMENT SD
WHERE T.PART_CODE = O.CODE
AND T.SALES_DEPT_CODE = SD.CODE
AND SD.ACTIVE = ‘Y’
AND O.ACTIVE = ‘Y’
AND T.ACTIVE = ‘Y’
–AND T.PART_CODE = #{expressPartCode,jdbcType=VARCHAR}
AND T.SALES_DEPT_CODE = V_ROW.orig_org_code;
Update stl.t_stl_bill_receivable r Set r.express_orig_org_code = o_code,r.express_orig_org_name = o_name
Where r.id = V_ROW.ID;
commit;
EXCEPTION
WHEN OTHERS THEN
rollback;–DBMS_OUTPUT.PUT_LINE(V_ROW.ID);
end;
end loop;
end;

你可能感兴趣的:(oracle,异常处理)