我在过程里使用了动态执行DDL语句,删除一个序列再重建,以生成一个可以跟据年份生成的一个主键编号,代码如下:
if v_YYYY <> to_char(sysdate, 'yyyy') or (v_YYYY = ' ' or v_YYYY is null) then
    v_strSQL := 'drop sequence ds2002.SEQUENCE_GSMXB_CB_LS';
    execute immediate v_strSQL;
    v_strSQL := 'create sequence ds2002.SEQUENCE_GSMXB_CB_LS
                 minvalue 1
                 maxvalue 999999999999999999999999999
                 start with 1
                 increment by 1
                 cache 100
                 cycle';
    execute immediate v_strSQL;
    --replace procedure p_gsmxb_cb_ls;
    commit;
    select sequence_GSMXB_CB_LS.nextval into v_num from dual;
    v_YYYY := to_char(sysdate, 'yyyy');
    update gsmxb_idnumber
       set id_year = v_YYYY, xgrq = sysdate
     where id_bh = 1;
    dbms_output.put_line('NO!');
  else
    select sequence_GSMXB_CB_LS.nextval into v_num from dual;
    v_YYYY := to_char(sysdate, 'yyyy');
    dbms_output.put_line('YES!');
  end if;
过程编辑绝对通过,并且通过command测试都没有问题,但是我前端程序(PB)调就有问题,如我前面的年份是2006,现在跨年为2007,过程会删除序更重新创建一个新序列,这一步是成功的,但第二再调就报“无效的描术对象”(过程无效了),郁闷呀!
    我在想是不是重建了序列后过程所关联的对象发生了改变,要重庆编辑才行。可这个重新编辑能在能通SQL语句来执行吗,就是把它写要那个过程里,当我删除了序列后,再执行重新编辑的SQL。有这种方式吗,SQL怎么实现呢。各位大哥哥们,救救我吧!