假设我已经写好了5个存储过程
P01
P02
P03
P04
P05
但是我每次运行都要运行5次Execute P01;
......
Execute P05;问题一:请问各位老大,Oracle有没有类似 Sequence一样的东西可以按指定的顺序,调用我的过程。问题二:另外请问各位老大,我看书上说存储过程会被编译以后可以提高效率,这个编译是需要我操作的么,还是不需要用户关心?

解决方案 »

  1.   

    问题一
    你可以做个总的p把调用封装起来。通过execute immediate 'execute p0' + 1 这样的形式也可以动态执行。
    问题二 就不清楚了
      

  2.   

    一,写一个存储过程,把五个子存储过程放在一起,如CREATE OR REPLACE PROCEDURE p_all AS
    BEGIN
      p01;
      p02;
      p03;
      p04;
      p05;
    END;
    /以后只要执行这个存储过程就可以了.二,写好存储过程把CREATE PROCEDURE放到SQLPLUS执行一次就是编译了,如上面的p_all,把上面的语句在sqlplus执行即可。如果将存储过程中用到的做了修改,如增加或减少了字段,或修改了字段的类型,那么存储过程会变为无效的(即INVALID,可通过USER_OBJECTS.STATUS看到),这时就要编译存储过程了,可以用语句
    ALTER PROCEDURE 存储过程名 COMPILE;
    来编译,如果不编译调用此存储过程时Oracle会自动编译,多了一个编译过程当然效率要低了,所以最好先编译。
      

  3.   

    存储过程未被编译是不可以直接调用的,存储过程写好后,如在PLSQL Developer按F8即可