在存储过程中动态创建序列,使用时老提示序列不存在。部分代码如下:

select count(*) into amount from user_sequences where sequence_name='WZ_SEQ';
if(amount>0) then
execute immediate 'drop sequence WZ_SEQ';
end if;
execute immediate 'create sequence WZ_SEQ start with 1 increment by 1 nominvalue nomaxvalue  nocache';  insert into a(id) select WZ_SEQ .nextval from ...
...在执行上述代码前,如果WZ_SEQ存在就不报错,
如果不存在,执行到insert into 语句就报序列不存在。请高手指点,谢谢!

解决方案 »

  1.   

    因为在
    execute immediate 'create sequence WZ_SEQ start with 1 increment by 1 nominvalue nomaxvalue nocache';
    执行之前,序列还没有建立,因此在编译到
    insert into a(id) select WZ_SEQ .nextval from ... 的时候,当然就报错了。解决方法 2种:
    1、提前把序列建好。
    2、把下面用到序列的地方,通通改成 execute immediate 动态sql。
      

  2.   

    楼上误解我的意思了。
    我的意思是说,如果开始WZ_SEQ不存在,执行如下代码:
    execute immediate 'create sequence WZ_SEQ start with 1 increment by 1 nominvalue nomaxvalue nocache';
    insert into a(id) select WZ_SEQ .nextval from ... 就会提示序列不存在。你们可以在plsql里试一下。
      

  3.   

    把insert语句改成动态sql执行就可以了:
    execute immediate 'insert into a(id) select WZ_SEQ .nextval from ...  ';