我是新手,请各位大侠帮忙看一下以下的存储过程:
create or replace procedure IsHaveSequence(SequenceName in varchar2)
as
SequencesCount integer := 0;
SqlStr varchar2(200) := '';
begin
select count(*) into SequencesCount from All_Sequences where Sequence_name=SequenceName;
if SequencesCount=0 then
SqlStr := 'CREATE SEQUENCE '||SequenceName||' INCREMENT BY 1 START WITH 0 NOMAXVALUE NOCYCLE CACHE 10;';
execute immediate SqlStr;
end if;
end IsHaveSequence;
调用如下:
call IsHaveSequence('SYSTEM_ROLEEQUENCE');
调用的过程中出错,请帮忙查找一下,谢谢!

解决方案 »

  1.   

    在哪里调用的?
    oracle里面执行是 exec IsHaveSequence('SYSTEM_ROLEEQUENCE');或者
    begin
    IsHaveSequence('SYSTEM_ROLEEQUENCE');
    end;
    /
      

  2.   

    第八行那里,要加上minvalue 0选项,再把引号里面的分号去掉。
    create or replace procedure IsHaveSequence(SequenceName in varchar2) 
    as 
    SequencesCount integer := 0; 
    SqlStr varchar2(200) := ''; 
    begin 
    select count(*) into SequencesCount from All_Sequences where Sequence_name=SequenceName; 
    if SequencesCount=0 then 
    SqlStr := 'CREATE SEQUENCE '||SequenceName||' INCREMENT BY 1 START WITH 0 NOMAXVALUE minvalue 0 NOCYCLE CACHE 10'; 
    execute immediate SqlStr; 
    end if; 
    end IsHaveSequence; 
      

  3.   


    如果使用exec IsHaveSequence('SYSTEM_ROLEEQUENCE');调用的话,会提示无效语句。
      

  4.   

    动态创建序列需要显式授予create sequence权限:
    grant create sequence to user;