create or replace procedure modi_data 
as
  o_date date;
  
  declare     
  l_name varchar2(100);
  l_date  date;
  cursor new_cur is
    select t2,t3 from t_testnew; begin
  open new_cur;
  fetch new_cur
    into l_name,l_date;
  while new_cur%found loop
    select t_test.t3 into o_date from t_test where t_test.t2 = l_name;
    if o_date < l_date then
      update t_test set t_test.t3 = o_date where t_test.t2 = l_name;
      commit;
    end if;
    if o_date > l_date then
      null;
    else
      insert into t_test
        (select * from t_testnew where t_testnew.t3 = l_name);
      commit;
    end if;
  
  end loop;
    close new_cur;
end;
创建这个存储过程时,系统报
Compilation errors for PROCEDURE USERNAME.MODI_DATAError: PLS-00103: 出现符号 "DECLARE"在需要下列之一时:
        begin function package
          pragma procedure subtype type use <an identifier>
          <a double-quoted delimited-identifier> form current cursor
       符号 "begin" 被替换为 "DECLARE" 后继续。
Line: 5
Text: declareError: PLS-00103: 出现符号 "end-of-file"在需要下列之一时:
        begin case declare
          end exception exit for goto if loop mod null pragma raise
          return select update while with <an identifier>
          <a double-quoted delimited-identifier> <a bind variable> <<
          close current delete fetch lock insert open rollback
          savepoint set sql execute commit forall merge
          <a single-quoted SQL string> pipe
Line: 32Error: Hint: Variable 'declare' is declared but never used in 'modi_data'
Line: 5
Text: declare
大家帮忙看看哪里错了,我是菜鸟,才学的oracle如有低级错误不要笑话呀,^_^

解决方案 »

  1.   

    create or replace procedure modi_data 
    as
      o_date date;
      l_name varchar2(100);
      l_date  date;
      cursor new_cur is
        select t2,t3 from t_testnew; begin
      open new_cur;
      fetch new_cur
        into l_name,l_date;
      while new_cur%found loop
        select t_test.t3 into o_date from t_test where t_test.t2 = l_name;
        if o_date < l_date then
          update t_test set t_test.t3 = o_date where t_test.t2 = l_name;
          commit;
        end if;
        if o_date > l_date then
          null;
        else
          insert into t_test
            (select * from t_testnew where t_testnew.t3 = l_name);
          commit;
        end if;
      
      end loop;
        close new_cur;
    end;
      

  2.   

    Error: Hint: Variable 'declare' is declared but never used in 'modi_data'
    Line: 5
    Text: declare错误信息已经提示的很清楚了。