create or replace produce  a is  start_time date;
  end_time date;begin  start_time:=to_date('2012-01-01','yyyy-mm-dd');
  end_time :=to_date('2012-05-01','yyyy-mm-dd');  exit when start_time>end_time
  loop
   b(start_time);
   start_time:=start_time+1;
  end loop
end a;创建一个JOB,会不会 每天都执行这个语句,还是说一旦退出就永远不会再执行?
如果我想这个存储过程只执行一次,怎么板?
  

解决方案 »

  1.   

    你这个连语法都不对,写Oracle的存储过程需要开头应该是:
    CREATE OR REPLACE PROCEDURE PRO_A 
    IS
    ...还有exit when start_time>end_time判断是写在游标LOOP里面的,start_time是时间类型如何进行+1操作, b(start_time);是什么东西,看不懂。
      

  2.   

    我只是写错了 过程这个单词create or replace PROCEDURE a_exe is  start_time date;
      end_time date;begin  start_time:=to_date('2012-01-01','yyyy-mm-dd');
      end_time :=to_date('2012-05-01','yyyy-mm-dd');  exit when start_time>end_time
      loop
      a(start_time);
      start_time:=start_time+1;
      end loop
    end a_exe;
    a_exe 是执行过程名,  a(start_time) 是一个过程函数,输入参数是个日期型的
      

  3.   

    start_time是时间类型如何进行+1操作,你得用TO_NUMBER将start_time转换成数字类型才能+1
      

  4.   

    date类型+1表示时间前进一天。不是很明白楼主的意思,如果每天要执行,搞个job,如果只要一次,直接执行不就好了?begin
      a_exe();
    end;
    另外,loop ... exit when ... end loop写法有问题,还少了几个分号,
    我改了下,不知道是不是你要的
    create or replace
    PROCEDURE a_exe is
      start_time date :=to_date('2012-01-01','yyyy-mm-dd');
      end_time date :=to_date('2012-05-01','yyyy-mm-dd');
    begin
      loop
        --dbms_output.put_line(start_time);
        a(start_time);
        start_time:=start_time+1;
        exit when start_time>end_time;
      end loop;
    end a_exe;
      

  5.   

    loop
    exit when start_time>end_time
     
      

  6.   

    定成job的话如果是一天执行一次的,应该还是会每天都执行的,这个不会变的
      

  7.   

    有一个存储过程函数 a(date param);
    我要调用该函数 计算2010-01-01到2010-02-02的数据
    就写了一个执行函数a_exe
    在创建一个Job调用a_exe 
    我希望只是执行一次得出结果就可以了,而不是每天都执行,重复的操作。
      

  8.   

    为什么要把exit when start_time>end_time;
    放到loop里面?begin
      a_exe();
    end;这段话放到哪里?[Quote=引用 4 楼  的回复:]