Oracle中实现自增长列

    技术2022-05-20  61

    在使用Oracle数据的过程中,经常会用到自增长列,但Oracle并没有提供直接实现自增长的方法,下面我们来看看如何自己实现此功能。

     

    步骤一:创建序列

    Sql代码 -- CREATE SEQUENCE    CREATE SEQUENCE INNERID   MINVALUE 1   MAXVALUE 99999999999999   START WITH 1   INCREMENT BY 1   CACHE 20   ORDER;   -- CREATE SEQUENCE CREATE SEQUENCE INNERID MINVALUE 1 MAXVALUE 99999999999999 START WITH 1 INCREMENT BY 1 CACHE 20 ORDER;

     步骤二:创建表

    Sql代码 CREATE TABLE ADMIN2   (ID VARCHAR2(20),NAME VARCHAR2(10));   CREATE TABLE ADMIN2 (ID VARCHAR2(20),NAME VARCHAR2(10));

     

    步骤三:使用INNERID的属性插入值:

    --INNERID.currval 指当前序列

    --INNERID.nextval 指下一个序列

    --不断的插入序列的下一个值.

    Sql代码 INSERT INTO ADMIN2 VALUES (INNERID.NEXTVAL,'A');   INSERT INTO ADMIN2 VALUES (INNERID.NEXTVAL,'B');   INSERT INTO ADMIN2 VALUES (INNERID.NEXTVAL,'C');   INSERT INTO ADMIN2 VALUES (INNERID.NEXTVAL,'D');   INSERT INTO ADMIN2 VALUES (INNERID.NEXTVAL,'A'); INSERT INTO ADMIN2 VALUES (INNERID.NEXTVAL,'B'); INSERT INTO ADMIN2 VALUES (INNERID.NEXTVAL,'C'); INSERT INTO ADMIN2 VALUES (INNERID.NEXTVAL,'D');

     得到的结果:

    Java代码     ID  NAME       1   A      2   B      3   C      4   D   ID NAME 1 A 2 B 3 C 4 D

     虽然通过上面的方式我们可以实现自增长列,但是还可以通过触发器实现更简单的操作。

     

    步骤四:在ADMIN2表上创建触发器

    Sql代码 --ADMIN2 ID 的触发器   CREATE OR REPLACE TRIGGER ADMIN_TG   BEFORE INSERT ON ADMIN2 FOR EACH ROW   BEGIN  SELECT INNERID.NEXTVAL INTO :NEW.ID FROM DUAL;   END;   --ADMIN2 ID 的触发器 CREATE OR REPLACE TRIGGER ADMIN_TG BEFORE INSERT ON ADMIN2 FOR EACH ROW BEGIN SELECT INNERID.NEXTVAL INTO :NEW.ID FROM DUAL; END;

     步骤五:通过简单的方式插入记录:

    Sql代码 INSERT INTO ADMIN2 (NAMEVALUES ( 'ZDZ2');   INSERT INTO ADMIN2 (NAMEVALUES ( 'ZDZ3');   INSERT INTO ADMIN2 (NAMEVALUES ( 'ZDZ4');   INSERT INTO ADMIN2 (NAMEVALUES ( 'ZDZ5');   INSERT INTO ADMIN2 (NAME) VALUES ( 'ZDZ2'); INSERT INTO ADMIN2 (NAME) VALUES ( 'ZDZ3'); INSERT INTO ADMIN2 (NAME) VALUES ( 'ZDZ4'); INSERT INTO ADMIN2 (NAME) VALUES ( 'ZDZ5');

     查询结果:

    Java代码 ID  NAME           5   ZDZ2           6   ZDZ3       7   ZDZ4           8   ZDZ5   ID NAME 5 ZDZ2 6 ZDZ3 7 ZDZ4 8 ZDZ5

     


    最新回复(0)