create sequence seq_qx start with 10000 maxvalue 19999 cycle;
create sequence seq_qt start with 10000 maxvalue 19999 cycle;
create sequence seq_lx start with 10000 maxvalue 19999 cycle;
create or replace trigger trigger_on_id before insert on task for each row
begin
if :new.taskattribute='1' then
    select to_char(sysdate,'yyyy')||'QX'||substr(seq_qx.nextval,2,4) :new.TASKID from dual;
elsif :new.TaskAttribute='2' then
    select to_char(sysdate,'yyyy')||'LX'||substr(seq_lx.nextval,2,4) :new.TASKID from dual;
else
    select to_char(sysdate,'yyyy')||'QT'||substr(seq_qt.nextval,2,4) :new.TASKID from dual;
end;

解决方案 »

  1.   

    支持 ORARichard(没钱的日子......) ,又学了一着
      

  2.   

    select to_char(sysdate,'yyyy')||'QX'||substr(seq_qx.nextval,2,4) :new.TASKID from dual;
    以上这种语句行的通吗?
    为什么没有into
      

  3.   

    呵呵 楼上的提醒的对,漏了into
    应该是
    create sequence seq_qx start with 10000 maxvalue 19999 cycle;
    create sequence seq_qt start with 10000 maxvalue 19999 cycle;
    create sequence seq_lx start with 10000 maxvalue 19999 cycle;
    create or replace trigger trigger_on_id before insert on task for each row
    begin
    if :new.taskattribute='1' then
        select to_char(sysdate,'yyyy')||'QX'||substr(seq_qx.nextval,2,4) into :new.TASKID from dual;
    elsif :new.TaskAttribute='2' then
        select to_char(sysdate,'yyyy')||'LX'||substr(seq_lx.nextval,2,4) into :new.TASKID from dual;
    else
        select to_char(sysdate,'yyyy')||'QT'||substr(seq_qt.nextval,2,4) into :new.TASKID from dual;
    end;