先建立序列,再建立触发器,下面的语句建立触发器 CREATE OR REPLACE TRIGGER T_TB_AA BEFORE INSERT ON TB_AAA FOR EACH ROW Begin SELECT S_TB_AA.NEXTVAL INTO :NEW.ID FROM DUAL; end; 就能实现你要的效果。
就 INSERT INTO your_table (id,other) VALUES(BSWXWMSEQ.nextval,'liulif'); 可以解决问题了哈或是再加个触发器CREATE OR REPLACE TRIGGER trg_your_table BEFORE INSERT ON your_table FOR EACH ROW BEGIN SELECT BSWXWMSEQ.nextval.nextval INTO :new.id FROM dual; END;插入数据 INSERT INTO your_table (other) VALUES('liulif');
不用建序列也可以 INSERT INTO test (id,name) values ((select max(id) from test)+1,'a') ; name 为char(1) id为number
拜托人家可能都不知道pl/sql,你叫人家用触发器!楼主我不是贬低你,而是从你角度出发
对 用INSERT INTO test (id,name) values ((select max(id) from test)+1,'a') ; 比较好 或用序列
建序列: CREATE SEQUENCE 序列名
INSERT INTO test (id,name) values ((select max(id) from test)+1,'a') ;对调用该sql语句的方法前面加synchronized关键字解决并发问题
1、先建一个序列
CREATE SEQUENCE BSWXWMS.BSWXWMSEQ
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 1000000
NOCACHE
NOCYCLE
NOORDER 2、建一个测试用表
CREATE TABLE TEST
(
ID INTEGER,
NAME VARCHAR2(50 BYTE)
)3、查找表中的数据,现在应该是空的
Select * From Test;4、插入数据。
insert into test(ID,Name) values (BSWXWMSEQ.nextval,'liulif');5、查找数据,现在的ID应该是1
Select * From Test;6、再次插入数据
insert into test(ID,Name) values (BSWXWMSEQ.nextval,'liulif');7、查找数据,现在的ID应该是2
Select * From Test;........
这个ID应该就是你要实现的效果吧?
CREATE OR REPLACE TRIGGER T_TB_AA
BEFORE INSERT ON TB_AAA
FOR EACH ROW
Begin
SELECT S_TB_AA.NEXTVAL INTO :NEW.ID FROM DUAL;
end;
就能实现你要的效果。
BEFORE INSERT ON your_table FOR EACH ROW
BEGIN
SELECT BSWXWMSEQ.nextval.nextval INTO :new.id FROM dual;
END;插入数据 INSERT INTO your_table (other) VALUES('liulif');
INSERT INTO test (id,name) values ((select max(id) from test)+1,'a') ;
name 为char(1) id为number
比较好 或用序列
CREATE SEQUENCE 序列名