create or replace procedure UpdateAIMS(strUser in varchar2,strNum in varchar2,strSql in varchar2)
as
strUserName varchar2(20);
strAssetsNo varchar2(24);
strMpNo     varchar2(13);
strMpType   varchar2(3);
begin
--更新meter_location表开始
execute immediate strSql;
if sql%rowcount=0 then
dbms_output.put_line('更新METET_LOCATIOIN表中用户'||strUser||'的资产号'||strNum||'更新失败!');
end if;
--更新meter_location表结束
--初始化该过程内的四个变量
select t.customer_no,t.mr_assets_no,t.mp_item_no,t.mp_type into strUserName,strAssetsNo,strMpNo,strMpType from meter_location t where t.mr_assets_no=strNum;
--初始化结束
--更新meter表开始
update meter t set t.assets_no=strAssetsNo,t.made_no=strAssetsNo where t.customer_no=strUserName and t.type=strMpType and rownum<=1 and length(t.made_no)>18;
if sql%rowcount=0 then
dbms_output.put_line('更新meter表中用户'||strUserName||'的资产号'||strNum||'失败!');
end if;
--更新meter表结束
--更新meter_running表开始
update meter_running t set t.assets_no=strAssetsNo where t.mp_item_no=strMpNo and t.customer_no=strUserName;
if sql%rowcount=0 then
dbms_output.put_line('更新meter_running表中'||strUserName||'的资产号'||strNum||'失败!');
dbms_output.put_line('');
end if;
--更新meter_running表结束
end;call updateaims('马伟伟','LH1HX1120080600039','UPDATE METER_LOCATION T SET T.MR_ASSETS_NO=''LH1HX1120080600039'' WHERE T.TERM_NO=''001'' AND T.TERM_DCP_NO=''018'' AND T.MR_ITEM_NO=''0021'' AND T.CUSTOMER_NO=''0001010101'' AND T.MP_TYPE=''1''')为什么行  --初始化该过程内的四个变量 以下的内容都不执行呢?

解决方案 »

  1.   

    UPDATE METER_LOCATION 应该commit;或者rollback;
    否则就会锁住,执行select ... from METER_LOCATION等待解锁-------可能是这个原因
      

  2.   

    应该是 no_data_found 异常 
    建议使用 EXCEPTION 
        WHEN OTHERS THEN
              DBMS_OUTPUT.PUT_LINE(SQLERRM);看看是什么异常注: 在plsql dev中执行过程前使用 set serverout on