create or replace procedure "proc_colushengshi"(@tablename in varchar2(50),@begintime in varchar2(6),@endtime in varchar2(6))
as
begin
declare @begin_yy integer(4);
declare @begin_mm integer(2);
@begin_yy:=to_number(substr(@begintime,0,4));
@begin_mm:=to_number(substr(@begintime,5,2));
loop
begin
@tablename:=@tablename||to_char(@begin_yy)||(decode(length(@begin_mm),1,'0'||to_char(@begin_mm),2,to_char(@begin_mm)));
ALTER TABLE @tablename ADD SHENG VARCHAR(50) NULL add SHI VARCHAR(50) NULL;
update @tablname set sheng='吉林省',shi='长春市'
@begin_yy:=@begin_yy+1;
@begin_mm:=@begin_mm+1;
if @begin_yy>to_number(substr(@endtime,0,4)) then
begin
exit loop;
end;
end if;
if @begin_mm=12 then
begin
@begin_mm:=1;
end;
end if;
end;
end loop;
commit;
end proc_colushengshi;
整不明白了,一编译就提示这个信息。

解决方案 »

  1.   

    oracle的procedure中定义变量不用@
      

  2.   

    给楼主改造了一下,不过可能不对,这要对SQL SERVER和ORACLE的存储过程都熟悉才行,如果有什么错楼主自己修改一下吧create or replace procedure proc_colushengshi(tablename in varchar2,begintime in varchar2,endtime in varchar2)
    as
    begin_yy number(4);
    begin_mm number(2);
    begin
    begin_yy:=to_number(substr(begintime,0,4));
    begin_mm:=to_number(substr(begintime,5,2));
    loop
    begin
    tablename:=tablename||to_char(begin_yy)||(decode(length(begin_mm),1,'0'||to_char(begin_mm),2,to_char(begin_mm)));
    --ALTER TABLE @tablename ADD SHENG VARCHAR(50) NULL add SHI VARCHAR(50) NULL;
    update tablname set sheng='吉林省',shi='长春市';
    begin_yy:=begin_yy+1;
    begin_mm:=begin_mm+1;
    if begin_yy>to_number(substr(endtime,0,4)) then
    begin
    exit loop;
    end;
    end if;
    if begin_mm=12 then
    begin
    begin_mm:=1;
    end;
    end if;
    end;
    end loop;
    commit;
    end proc_colushengshi;