
一般在写代码时,先取出序列的nextval,放到insert语句中去;
比如:
ida := seq_a.nextval
insert into taba(id,value,...) values(ida,'abc',...)
或者在insert语句中直接使用序列的nextval:
insert into taba(id,value,...) values(seq_a.nextval,'abc',...)
或者用触发器实现自增长:
比如表名:tab,主键为:id
1. 增加一个序列号: create sequence seq_tab
2. 增加一个触发器,如果是insert,则取序列号值,赋予主键列
CREATE OR REPLACE TRIGGER TRI_tab
BEFORE INSERT ON tab FOR EACH ROW
DECLARE
-- LOCAL VARIABLES HERE
BEGIN
IF :NEW.id IS NULL THEN
SELECT SEQ_tab.NEXTVAL INTO :NEW.id FROM DUAL
END IF
END TRI_tab
两个方法:1,重新创建一个表,然后创建一个序列,把老数据导入新表,删除老表,修改新表名字为老表
2,直接在原来表上增加一个字段,创建一个序列,通过更新的方式修改老数据的这个字段。
具体 *** 作主要是2点,首先是创建一个序列名sequence;
然后是,insert语句的时候:将自增的字段的位置,写成序列名.nextval。
从创建表开始,然后创建sequence,到insert语句
1.首先创建表
CREATE TABLE "FLOWCAL"."T_USERINFO"
( "C_ID" NUMBER(*,0),
"C_USER" VARCHAR2(20 BYTE),
"C_PASSWORD" VARCHAR2(20 BYTE),
"C_ROLE" VARCHAR2(20 BYTE),
"C_COMMENT1" VARCHAR2(20 BYTE),
"C_COMMENT2" VARCHAR2(20 BYTE)
)
现在想让C_ID自增一。
2.首先创建一个oracle的sequence,sql语句如下:
create sequence 序列名
increment by 1
start with 1
maxvalue 999999999
cycle
建立一个最小为1,最大为999999999的一个序列号会自动循环的序列
下面的sequence,如下:
CREATE SEQUENCE "FLOWCAL"."SEQ_USERINFO"
MINVALUE 0
MAXVALUE 9999999999999999999999999999
INCREMENT BY 1
START WITH 24
CACHE 20
ORDER
CYCLE
3.通过序列名.nextval实现插入时,字段的自增一
当向表中插入数据时,SQL语句写法如下:
SQL>insert into 表名 values(,列1值,列2值,....)
"序列名"可以替换为自己需要的名字.
下面insert语句:
insert into T_USERINFO values(SEQ_USERINFO.NEXTVAL,'111','11','11','11','11')
INSERT时如果要用到从1开始自动增长的数字做唯一关键字, 应该先建立一个序列号.CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 NOCYCLE NOCACHE其中最大的值按字段的长度来定,比如定义的自动增长的序列NUMBER(6) , 最大值为999999INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL例子: SQL>insert into s_dept(id, name, region_id) values (s_dept_id.nextval, ‘finance’, 2)1 row created.只有运行了序列号的名称. nextval后序列号的名称. currval 才有效才有值.欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)