不是很清楚oracle的语法
下面是在sql server下写的 就是一个在一个时间段内循环调用存储过程的,在oracle下面应该怎么写?谢谢!这个是sql的
CREATE PROCEDURE EBI_Calbal
@sdate varchar(10),
@edate varchar(10)
aswhile @sdate<=@edate
begin
exec EBI_CalculateBal @sdate
set @sdate=left(convert(varchar,cast(@sdate as datetime)+1,120),10)
end
GO在oracle下的 请指教CREATE OR REPLACE PROCEDURE DS(sdate  in string,edate  in string 
                                            ,n_retcode out number) is
begindeclare 
  
  
 
begin
 
  
  while sdate<=edate loop
sdate:=left(convert(varchar2,cast(sdate as datetime)+1,120),10)
  bfhgcsxf_in(sdate);
  end loop;

解决方案 »

  1.   

    CREATE PROCEDURE EBI_Calbal(
      v_sdate varchar2(10),
      v_edate varchar2(10)
    AS
      WHILE v_sdate <= v_edate LOOP
        exec EBI_CalculateBal v_sdate
        v_sdate := to_char(to_date(v_sdate,'YYYY-MM-DD')+1,'YYYY-MM-DD');
      END LOOP;
    END;
    /
      

  2.   

    SELECT CONVERT(VARCHAR(10),GETDATE(),120)
    --------------------------------
    2010-09-20-- 以上是你在SQL Server中使用的日期格式!,
    -- 所以,类似Oracle中的日期格式:YYYY-MM-DD
    -- YYYY 表示年份,MM表示月份,DD表示具体的哪一天(如:21号)
      

  3.   

    -- 正确代码如下:
    CREATE PROCEDURE EBI_Calbal(
      v_sdate varchar2(10),
      v_edate varchar2(10)
    AS
      WHILE v_sdate <= v_edate LOOP
        exec EBI_CalculateBal(v_sdate);
        v_sdate := to_char(to_date(v_sdate,'YYYY-MM-DD')+1,'YYYY-MM-DD');
      END LOOP;
    END;
    /
      

  4.   

    -- 悲哀,又少了个右括号!
    CREATE PROCEDURE EBI_Calbal(
      v_sdate varchar2(10),
      v_edate varchar2(10)
    )
    AS
      WHILE v_sdate <= v_edate LOOP
        exec EBI_CalculateBal(v_sdate);
        v_sdate := to_char(to_date(v_sdate,'YYYY-MM-DD')+1,'YYYY-MM-DD');
      END LOOP;
    END;
    /
      

  5.   


    --输入时间参数  格式如:20100920
    CREATE PROCEDURE EBI_Calbal(
      v_sdate varchar2(10),
      v_edate varchar2(10))
    AS
      WHILE v_sdate <= v_edate LOOP
         EBI_CalculateBal; 
         v_sdate := to_char(to_date(v_sdate,'yyyymmdd')+1,'yyyymmdd');
      END LOOP;
    END;
      

  6.   

    -- 悲哀,又少了个BEGIN!
    CREATE PROCEDURE EBI_Calbal(
      v_sdate varchar2(10),
      v_edate varchar2(10)
    )
    AS
    BEGIN
      WHILE v_sdate <= v_edate LOOP
        exec EBI_CalculateBal(v_sdate);
        v_sdate := to_char(to_date(v_sdate,'YYYY-MM-DD')+1,'YYYY-MM-DD');
      END LOOP;
    END;
    /
      

  7.   

    CREATE OR REPLACE PROCEDURE EBI_CalculateBal(
    i_sdate VARCHAR2
    )
    AS
    BEGIN
      dbms_output.put_line('日期:'||i_sdate||' 是:'||to_char(to_date(i_sdate,'YYYY-MM-DD'),'Day'));
    END;
    /CREATE OR REPLACE PROCEDURE EBI_Calbal(
      v_sdate varchar2,
      v_edate varchar2
    )
    AS
      i_sdate VARCHAR2(10);
      v_str VARCHAR2(100);
    BEGIN
      i_sdate := v_sdate;
      WHILE i_sdate <= v_edate LOOP
        EBI_CalculateBal(i_sdate);
        dbms_output.put_line(v_str);
        i_sdate := to_char(to_date(i_sdate,'YYYY-MM-DD')+1,'YYYY-MM-DD');
      END LOOP;
    END;
    /
      

  8.   


    scott@SZTYORA> SET SERVEROUTPUT ON;
    scott@SZTYORA>
    scott@SZTYORA> EXEC EBI_Calbal('2010-09-01','2010-09-21');
    日期:2010-09-01 是:星期三
    日期:2010-09-02 是:星期四
    日期:2010-09-03 是:星期五
    日期:2010-09-04 是:星期六
    日期:2010-09-05 是:星期日
    日期:2010-09-06 是:星期一
    日期:2010-09-07 是:星期二
    日期:2010-09-08 是:星期三
    日期:2010-09-09 是:星期四
    日期:2010-09-10 是:星期五
    日期:2010-09-11 是:星期六
    日期:2010-09-12 是:星期日
    日期:2010-09-13 是:星期一
    日期:2010-09-14 是:星期二
    日期:2010-09-15 是:星期三
    日期:2010-09-16 是:星期四
    日期:2010-09-17 是:星期五
    日期:2010-09-18 是:星期六
    日期:2010-09-19 是:星期日
    日期:2010-09-20 是:星期一
    日期:2010-09-21 是:星期二PL/SQL 过程已成功完成。scott@SZTYORA>