create sequence seq_name increment by 1 start with 1 maxvalue 99999999 nocycle cache 10--调用: insert into table(id,name) values(seq_name.nextval,'militant(小猪油) ');
两种方法 方法一: 用触发器建一个序列 create sequence a_seq increment by 1 start with 100; 建一个触发器, 自动+1 create or replace trigger t_a before insert on a for each row begin select s_a.nextval into :new.b from dual; end;方法二: 建一个序列 create sequence a_seq increment by 1 start with 100; 在语句中+1 insert into tbl(id,....) values (a_seq.nextval,....)
REM 績效考核系統紀錄表 REM ID //ID號自動加1(primary key) REM YEAR //年度 REM MONTH //月份 REM EMP_ID //被考評人工號 REM KPZX_ID //考評主項ID REM KPXX_ID //考評細項ID REM SCORE //分值(可正可負) REM WH_DATE //維護日期 REM WHR_EMP_ID //維護人ID(存工號) REM KPSM //考評說明 DROP TABLE JXKH_RECORD; CREATE TABLE JXKH_RECORD( ID NUMBER(15) , YEAR NUMBER(4) NOT NULL, MONTH NUMBER(2) NOT NULL, EMP_ID VARCHAR2(16 BYTE) NOT NULL, KPZX_ID NUMBER(2) NOT NULL, KPXX_ID NUMBER(2) NOT NULL, SCORE NUMBER(4,2) NOT NULL, WH_DATE DATE DEFAULT SYSDATE NOT NULL, WHR_EMP_ID VARCHAR2(16 BYTE) NOT NULL, KPSM VARCHAR2(300 BYTE) NOT NULL, PRIMARY KEY(ID) ) TABLESPACE "LOGISTIC" PCTFREE 10 PCTUSED 0 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0) LOGGING ;REM 創建一個自動增1的序列DROP SEQUENCE ID_SEQ; CREATE SEQUENCE ID_SEQ NOCYCLE MAXVALUE 999999999999999 START WITH 1 ORDER INCREMENT BY 1 ; REM 創建執行自動增加主鍵字段的一個触發器 DROP TRIGGER ID_TRIGGER; CREATE OR REPLACE TRIGGER ID_TRIGGER BEFORE INSERT ON JXKH_RECORD FOR EACH ROW DECLARE NEXT_ID NUMBER; BEGIN --GET THE NEXT ID FROM THE SEQUENCE SELECT ID_SEQ.NEXTVAL INTO NEXT_ID FROM DUAL; --USE THE SEQUENCE NUMBER AS PRIMARY KEY --FOR THE RECORE BEING INSERTED :NEW.ID:=NEXT_ID; END ; /REM 創建一個防止ID字段被更新的触發器 DROP TRIGGER ID_UPD; CREATE OR REPLACE TRIGGER ID_UPD BEFORE UPDATE OF ID ON JXKH_RECORD FOR EACH ROW BEGIN RAISE_APPLICATION_ERROR(-2000,'update column ID on table jxkh_record are not allowed.'); END; /
increment by 1
start with 1
maxvalue 99999999
nocycle
cache 10--调用:
insert into table(id,name) values(seq_name.nextval,'militant(小猪油) ');
方法一:
用触发器建一个序列
create sequence a_seq increment by 1 start with 100;
建一个触发器, 自动+1
create or replace trigger t_a
before insert on a
for each row
begin
select s_a.nextval into :new.b from dual;
end;方法二:
建一个序列
create sequence a_seq increment by 1 start with 100;
在语句中+1
insert into tbl(id,....)
values (a_seq.nextval,....)
create sequence FK_ID //创建序列,以后可以自动生成
minvalue 1
maxvalue 999999999999999999999999999
start with 100
increment by 1
cache 20;--create table //关联的表空间
create table TZXINDEX
(
ID NUMBER not null,
TITLE VARCHAR2(30),
CONTENT VARCHAR2(500),
LINKPAGE VARCHAR2(500),
FINDTIMES NUMBER,
SAVEDATE DATE
)
//定义主键
alter table TZXINDEX
add constraint FK_ID primary key (ID)
using index
tablespace DATA555
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 2M
next 2M
minextents 1
maxextents 505
pctincrease 0
);//当要插入一条新记录时,则ID会自动加1
sql语句如下:
insert into tzxindex values(FK_ID.nextval,'标题','内容','......); FK_ID.nextval就是表示ID自动加1后的值
上面说的只是把sequence的名字和TZXINDEX的外主键名字取成一样啊?这样就能实现所需功能?
select rowid,id,name.....from your_table;
2.使用freddy2003() 提供的方法,建议楼主先看一下有关书籍。或搜一下以前的贴子。
另外,我同意楼主的使用无实际意义的值作为主键.其实,我认为,正常情况下,任何表都有一个唯一主键,最好就是数据库系统自己生成,不能让任何用户修改.因为只有这样,才能真正保证数据的一致性.见过了太多不能保证数据一致性的数据库设计.最关键的是我觉得很多程序员根本就不知道这一点.比如,很多程序员建一个学生信息数据库,包括姓名,性别,学号等字段,然后再建一个考试成绩表,包括姓名,成绩2个字段.如果不用没有实际意义的昨晚主键,那么就有可能出现数据不一致的问题.比如,昨天添加的数据,姓名为张三,南,200402030,考试成绩为张三,90.今天发现张三的名字输入错误,应该为张伞,于是用户用程序的修改功能修改学生姓名为张伞.然而,学生成绩表的张三名字并没有改过来,数据不一致了.解决的办法就是使用没有意义的昨晚主键,比如学生信息表,添加ID字段,其值有数据库系统自动生成,然后,在学生成绩里不使用姓名,而使用其ID来存放对应的学生信息.所以无论如何改学生的姓名,对应的ID不会变化,数据就可以保证一致了.
REM ID //ID號自動加1(primary key)
REM YEAR //年度
REM MONTH //月份
REM EMP_ID //被考評人工號
REM KPZX_ID //考評主項ID
REM KPXX_ID //考評細項ID
REM SCORE //分值(可正可負)
REM WH_DATE //維護日期
REM WHR_EMP_ID //維護人ID(存工號)
REM KPSM //考評說明
DROP TABLE JXKH_RECORD;
CREATE TABLE JXKH_RECORD(
ID NUMBER(15) ,
YEAR NUMBER(4) NOT NULL,
MONTH NUMBER(2) NOT NULL,
EMP_ID VARCHAR2(16 BYTE) NOT NULL,
KPZX_ID NUMBER(2) NOT NULL,
KPXX_ID NUMBER(2) NOT NULL,
SCORE NUMBER(4,2) NOT NULL,
WH_DATE DATE DEFAULT SYSDATE NOT NULL,
WHR_EMP_ID VARCHAR2(16 BYTE) NOT NULL,
KPSM VARCHAR2(300 BYTE) NOT NULL,
PRIMARY KEY(ID)
)
TABLESPACE "LOGISTIC" PCTFREE 10 PCTUSED 0 INITRANS 1
MAXTRANS 255
STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0)
LOGGING ;REM 創建一個自動增1的序列DROP SEQUENCE ID_SEQ;
CREATE SEQUENCE ID_SEQ
NOCYCLE
MAXVALUE 999999999999999
START WITH 1
ORDER
INCREMENT BY 1 ;
REM 創建執行自動增加主鍵字段的一個触發器
DROP TRIGGER ID_TRIGGER;
CREATE OR REPLACE TRIGGER ID_TRIGGER
BEFORE INSERT ON JXKH_RECORD
FOR EACH ROW
DECLARE
NEXT_ID NUMBER;
BEGIN
--GET THE NEXT ID FROM THE SEQUENCE
SELECT ID_SEQ.NEXTVAL
INTO NEXT_ID
FROM DUAL; --USE THE SEQUENCE NUMBER AS PRIMARY KEY
--FOR THE RECORE BEING INSERTED
:NEW.ID:=NEXT_ID;
END ;
/REM 創建一個防止ID字段被更新的触發器
DROP TRIGGER ID_UPD;
CREATE OR REPLACE TRIGGER ID_UPD
BEFORE UPDATE OF ID ON JXKH_RECORD
FOR EACH ROW
BEGIN
RAISE_APPLICATION_ERROR(-2000,'update column ID on table jxkh_record are not allowed.');
END;
/