理论上是可以的,但是要注意出口问题,否则会进入死循环。SQL> set serveroutput on
SQL> create procedure selfcall is
  2  begin
  3    dbms_output.put_line('selfcall');
  4    selfcall;
  5  end;
  6  /
Procedure created.SQL> begin
  2    selfcall;
  3  end;
  4  /
selfcall
selfcall
selfcall
selfcall
...
selfcall
begin
*
ERROR at line 1:
ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes

解决方案 »

  1.   

    当然可以,我曾经作个好几个这样的东东。
    SQL> set serveroutput on
    SQL> create or replace procedure sy (var_num number) is
      2  begin
      3    if var_num > 0 then
      4      dbms_output.put_line('number is ' || to_char(var_num));
      5      sy(var_num -1);
      6    end if;
      7  end;
      8  /过程已创建。SQL> begin
      2    sy(5);
      3  end;
      4  /
    number is 5
    number is 4
    number is 3
    number is 2
    number is 1PL/SQL 过程已成功完成。SQL> drop procedure sy;过程已丢弃。SQL>