create or replace package body pa_zdcs isPROCEDURE SP1
  AS
  V1 VARCHAR2(20);
  V2 NUMBER(4);
  BEGIN
    pa_zdcs.SP_DY;
    SELECT ENAME,EMPNO INTO V1,V2 from emp WHERE ENAME='sunny';
    dbms_output.put_line(v1||' '||v2);
  end;PROCEDURE SP_DY
  as
  begin
     UPDATE EMP SET EMPNO=1314 WHERE ENAME='sunny';
     commit;
  end;
end pa_zdcs;这是写的测试码,执行的时候特别慢,还没出来结果呢~~~问问大家,这样写可以嘛?为什么速度特别慢呢,也没结果?~~~~

解决方案 »

  1.   

    很可能是你的PROCEDURE SP_DY里的update语句没有执行成功
    导致emp表被锁定
      

  2.   

    create or replace package body pa_zdcs isPROCEDURE SP1
      AS
      V1 VARCHAR2(20);
      V2 NUMBER(4);
      BEGIN
      pa_zdcs.SP_DY;
      SELECT ENAME,EMPNO INTO V1,V2 from emp WHERE ENAME='sunny';
      dbms_output.put_line(v1||' '||v2);
      end;PROCEDURE SP_DY
      as
      begin
      UPDATE EMP SET EMPNO=1314 WHERE ENAME='sunny';
      commit;
      end;
    end pa_zdcs;
    /--最后要加个/,表示执行上面的代码
      

  3.   


    --看了你的意思 写了下 很快的SQL> set timing on
    SQL> create or replace package body pa_zdcs
      2  is
      3  PROCEDURE SP1
      4  is
      5  v_name emp.empname%type;
      6  v_no emp.empno%type;
      7  begin
      8  pa_zdcs.SP_DY;
      9  select empno,empname into v_no,v_name from emp
     10  where empname='wkc168';
     11  dbms_output.put_line(v_no||'  '||v_name);
     12  end SP1;
     13  PROCEDURE SP_DY
     14  as
     15  begin
     16  update emp set empno=168 where empname='wkc168';
     17  commit;
     18  end SP_DY;
     19  end pa_zdcs;
     20  /程序包体已创建。已用时间:  00: 00: 00.01
    SQL> begin
      2  pa_zdcs.SP1;
      3  end;
      4  /
    168  wkc168PL/SQL 过程已成功完成。已用时间:  00: 00: 00.00
      

  4.   

    --检查下还有谁在更新此表
    select c.sid,c.serial#, a.oracle_username,a.os_user_name,
    b.object_name,a.locked_mode
    from v$locked_object a,dba_objects b,v$session c
    where b.object_id = a.object_id
    and a.session_id = c.sid
    -- 解锁
    alter system kill session 'sid,serial#';