create or replace procedure ry_JBXXSH
(
v_rybh in ry_jbxx.rybh%type, v_sfbs  out ry_jbxx.sfbs%type,v_shjg out ry_jbxx.shjg%type,v_shrqz out ry_jbxx.shrqz%type,v_shzh out ry_jbxx.shzh%type) 
as
v_rybh ry_jbxx.rybh%type;
begin
  select
 update ry_jbxx
    set 
        sfbs = v_sfbs,
        shjg = v_shjg,
        shrqz = v_shrqz,
        shzh = v_shzh,
    
  where rybh = v_rybh; 
  select sfbs,shjg,shrqz,shzh into v_sfbs,v_shjg,v_shrqz,v_shzh from ry_jbxx where  rybh = v_rybh;
 exception
   when no_data_found then
     raise_application_error(-20001,'人员编号不存在');
end ry_JBXXSH;

解决方案 »

  1.   


    ----try it
    create or replace procedure ry_JBXXSH(v_rybh  in out ry_jbxx.rybh%type,
                                          v_sfbs  in out ry_jbxx.sfbs%type, ---首先这里应该是参数类型为in,out,因为你既做为了入参,也做为了出参
                                          v_shjg  in out ry_jbxx.shjg%type,
                                          v_shrqz in out ry_jbxx.shrqz%type,
                                          v_shzh  in out ry_jbxx.shzh%type) as
      v_rybh ry_jbxx.rybh%type;
    begin
      update ry_jbxx
         set (sfbs, shjg, shrqz, shzh) = (v_sfbs, v_shjg, v_shrqz, v_shzh) -----这里应该是这样
       where rybh = v_rybh;
      select sfbs, shjg, shrqz, shzh
        into v_sfbs, v_shjg, v_shrqz, v_shzh
        from ry_jbxx
       where rybh = v_rybh;
    exception
      when no_data_found then
        raise_application_error(-20001, '人员编号不存在');
      when others then
        raise_application_error(-20001, '其他作物');
    end ry_JBXXSH;
      

  2.   

     set (sfbs, shjg, shrqz, shzh) = (v_sfbs, v_shjg, v_shrqz, v_shzh) -----这里应该是这样
     错误提示 UPDATE....SET 表达式必须是子查询 是什么意思啊
      

  3.   

      set sfbs = v_sfbs,
          shjg =v_shjg,
           shrqz=v_shrqz,
            shzh=v_shzh    这么写 就不会报错了  谢谢你了
      

  4.   

    create or replace procedure ry_JBXXSH
    (v_rybh in ry_jbxx.rybh%type, v_sfbs out ry_jbxx.sfbs%type,v_shjg out ry_jbxx.shjg%type,v_shrqz out ry_jbxx.shrqz%type,v_shzh out ry_jbxx.shzh%type)  
    as
    v_rybh ry_jbxx.rybh%type;
    begin
    select sfbs,shjg,shrqz,shzh into v_sfbs,v_shjg,v_shrqz,v_shzh from ry_jbxx where rybh = v_rybh;
    update ry_jbxx set  sfbs = v_sfbs,shjg = v_shjg,shrqz = v_shrqz,shzh = v_shzh,
    where rybh = v_rybh;  
    exception
      when no_data_found then
      raise_application_error(-20001,'人员编号不存在');
    end ry_JBXXSH;
    --orcreate or replace procedure ry_JBXXSH
    (v_rybh in ry_jbxx.rybh%type, v_sfbs in out ry_jbxx.sfbs%type,v_shjg in out ry_jbxx.shjg%type,v_shrqz in out ry_jbxx.shrqz%type,v_shzh in out ry_jbxx.shzh%type)  
    as
    v_rybh ry_jbxx.rybh%type;
    beginupdate ry_jbxx set  sfbs = v_sfbs,shjg = v_shjg,shrqz = v_shrqz,shzh = v_shzh,
    where rybh = v_rybh;  
    select sfbs,shjg,shrqz,shzh into v_sfbs,v_shjg,v_shrqz,v_shzh from ry_jbxx where rybh = v_rybh;
    exception
      when no_data_found then
      raise_application_error(-20001,'人员编号不存在');
    end ry_JBXXSH;