逻辑是这样的:
if  dbVersion < '9.3.350',直接输出1####
else 拿REFDESIG_ID_SEQ的nextval ,并做相应的操作,输出2####我现在无论怎么写,都会报 [ PL/SQL: ORA-02289: sequence does not exist  ],即使  dbVersion < '9.3.350'代码如下:
declare
    maxid   number;
    nextid number;
    agileid number; 
    v_date  date;
    dbVersion varchar(8):=0; begin
  select substr(value,1,7) into dbVersion from propertytable where parentid = 5001 and propertyid=37;
        DBMS_OUTPUT.PUT_LINE(dbVersion);
        if (dbVersion < '9.3.350') then
    DBMS_OUTPUT.PUT_LINE('1####');
        
        else
    DBMS_OUTPUT.PUT_LINE('2####');
    select REFDESIG_ID_SEQ.nextval into agileid from dual;
        end if;end;
/
请教各位大神,怎么破???

解决方案 »

  1.   

    提示sequence不存在,你有REFDESIG_ID_SEQ这个sequence吗,名字错了没有呢。
    单独执行这句:select REFDESIG_ID_SEQ.nextval from dual;能执行吗?
      

  2.   


    是这样的,当dbVersion < '9.3.350', 是没有REFDESIG_ID_SEQ 这个sequence 的,
    只有当dbVersion >= '9.3.350'时候,数据库里才有,我才会去拿这个sequence 的值。
    现在我已经确保dbVersion < '9.3.350',这时候还是会报编译错误的。即使逻辑不走下面那块。
      

  3.   

    其实原因是 PL/SQL 是预编译的,这个我也知道,但是这段逻辑我怎么写呢?感谢~
      

  4.   

    因为没有sequence,是编译不过去的,可以使用动态sql。
    execute immediate 'select REFDESIG_ID_SEQ.nextval from dual' into agileid;