【问题标题】:Creating specific value sequence in oracle在 oracle 中创建特定的值序列
【发布时间】:2018-10-01 13:07:33
【问题描述】:

我需要创建一个具有特定值的预言序列

FOUR0001、FOUR0002、FOUR0003.....

增量必须有序。

【问题讨论】:

  • 创建一个正常的序列,并在应用程序代码中附加带有填充零的“FOUR”
  • 你到底是怎么追加的?
  • 创建序列 "FOUR_SEQ" 从 'FOUR' 开始 += 0209 递增 1 nocache nocycle noorder /
  • 另请参见类似问题的答案。 stackoverflow.com/a/14561364/3061852

标签: sql oracle oracle-apex sequence


【解决方案1】:

首先创建一个简单的序列

create sequence my_seq ; --start with 1 increment by 1 

在您使用序列存储数据的应用程序代码/表中,使用类似这样的内容

INSERT INTO yourtab (col1) VALUES( 'FOUR'||lpad(my_seq.nextval,4,'0'));

【讨论】:

    【解决方案2】:

    你可以创建一个序列:

    create sequence SEQ_NAME ...;
    

    然后创建一个触发器来自动输入字段:

    CREATE OR REPLACE TRIGGER INS_TABLENAME
      before insert on TABLENAME
      for each row
    
    BEGIN
    
      if :new.FIELD_NAME is null then
        :new.FIELD_NAME := 'FOUR'||lpad(SEQ_NAME.nextval,4,'0');
      end if;
    
    END;
    

    【讨论】:

      【解决方案3】:

      我创建了一个以 210 开头的序列(因为我已经有 209 条记录)然后创建了下面的触发器

      CREATE OR REPLACE trigger BIU_FRS  
        before insert or update on FOURNISSEUR             
        for each row 
      begin  
        if :NEW.FRS_NUM is null then
          select ('FOUR'||lpad(four_seq.nextval,4,'0')) into :NEW.FRS_NUM from dual;
        end if;
        if inserting then
              :new.created    := localtimestamp;
              :new.created_by := nvl(wwv_flow.g_user,user);
          end if;
          :new.updated    := localtimestamp;
          :new.updated_by := nvl(wwv_flow.g_user,user);
      end;
      

      谢谢@Kaushik Nayak 和@Diego Souza

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-28
        • 1970-01-01
        • 1970-01-01
        • 2018-08-09
        • 2017-06-15
        • 1970-01-01
        • 1970-01-01
        • 2012-12-10
        相关资源
        最近更新 更多