执行后似乎不能立刻生效,例如执行XTYHQD_DELETE后,select用户表,发现删除的记录仍然在,请问是否存储过程 设计有问题?错在哪呢?    存储过程 :
     create or replace procedure XTYHQD_DELETE(DMS in varchar,
                                          ZDR in varchar,
                                          FHZ out number) as  -----------------------------------------------------------------------
  --------------存储过程功能:删除一条用户记录---------------------------
  --------------参数1DMS    :要删除用户的的代码-------------------------
  --------------参数2ZDR    :执行此操作的制单人代码---------------------
  --------------参数3FHZ    :返回值-------------------------------------
  -------------------1      : 删除用户记录成功---------------------------
  -------------------2      :该用户关联系统日志表(xtrz)制单人代码-------
  -------------------3      :该用户关联系统权限表(xtqxqd)制单人代码-----
  -------------------4      :该用户关联系统角色表(xtjsqd)制单人代码-----
  -------------------5      :该用户关联系统用户表(xtyhqd)制单人代码-------
  -------------------999    :表中无此记录-------------------------------
  --------------版本        : VER 0000.0000.0001-------------------------
  -----------------------------------------------------------------------  flag number(8);
  yhmc varchar2(64);  ---
begin  ---验证是否有用户关联  select count(*) into flag from XTRZ where ZDR = DMS; ---验证是否关联系统日志表(xtrz)制单人代码
  if flag > 0 then
    FHZ := 2;
    dbms_output.put_line('该用户关联系统日志表(xtrz)制单人代码!');
    return;
  end if;  select count(*) into flag from XTQXQD where ZDR = DMS; ---验证是否关联系统权限表(xtqxqd)制单人代码
  if flag > 0 then
    FHZ := 3;
    dbms_output.put_line('该用户关联系统权限表(xtqxqd)制单人代码!');
    return;
  end if;  select count(*) into flag from XTJSQD where ZDR = DMS; ---验证是否关联系统角色表(xtjsqd)制单人代码
  if flag > 0 then
    FHZ := 4;
    dbms_output.put_line('该用户关联系统角色表(xtjsqd)制单人代码!');
    return;
  end if;  select count(*) into flag from XTYHQD where ZDR = DMS; ---验证是否关联系统用户表(xtyhqd)制单人代码
  if flag > 0 then
    FHZ := 5;
    dbms_output.put_line('该用户关联系统用户表(xtyhqd)制单人代码!');
    return;
  end if;  ---(预留位..................)  ---验证清单中是否有此记录?
  select count(*) into flag from XTYHQD where DM = DMS;
  if flag = 0 then
    FHZ := 999;
    dbms_output.put_line('表中无此记录!');
    return;
  end if;  ---开始删除记录
  select mc
    into yhmc
    from XTYHQD
   where DM = DMS
     and rownum = 1;
  delete from XTYHQD where DM = DMS;  ---删除成功,记录日志信息
  insert into XTRZ
    (RZLX, XTMK, XW, RQ, ZDR)
  values
    ('Soft Type',
     '系统用户',
     '删除了一条用户记录,用户代码:' || DMS || ',用户名称:' || yhmc,
     sysdate,
     ZDR);  FHZ := 1;
  dbms_output.put_line('删除用户记录成功!');end XTYHQD_DELETE;

解决方案 »

  1.   

    没有commit;
    在delete 和insert 后面都加个commit;
      

  2.   

    对于产品化的存储过程每一个begin end块之间最好加上异常处理,成功提交,异常回滚。
    BEGIN
      --其它语句
      COMMIT;
    EXCEPTION
      WHEN 异常1 THEN
        --异常处理1
      WHEN 异常2 THEN
        --异常处理2
      WHEN OTHERS THEN
        ROLLBACK;
    END;
    /
      

  3.   

    補充:Commit時也要注意事務的完整性.
      

  4.   

    只是把数据写入数据缓存 没有写入磁盘  所以你要么在过程里面加commit或者调用的时候提交