ORACLE 触发器实现主键自动填充
来源:互联网 发布:报纸数据库 编辑:程序博客网 时间:2024/05/21 19:39
一篇:首先,你要有一张表!
CREATE TABLE example
(
ID Number(4) NOT NULL PRIMARY KEY,
NAME VARCHAR(25),
PHONE VARCHAR(10),
ADDRESS VARCHAR(50)
);
然后,你需要一个自定义的sequence
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
NOCACHE -- 不建缓冲区
以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或Oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!)
你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:
CREATE TRIGGER "触发器名称" BEFORE
INSERT ON example FOR EACH ROW WHEN (new.id is null)
begin
select emp_sequence.nextval into: new.id from dual;
end;
打完收工!下面你就试试插入数据吧!
另一篇:
学oracle不久,在建表时发现这样一个问题,比如我现在创建一个表:student
create table STUDENT
(
ID NUMBER not null,
NAME VARCHAR2(20) default '男',
SEX VARCHAR2(4),
ADDRESS VARCHAR2(40),
MEMO VARCHAR2(60)
)
现在我想实现每插入一条数据,就让id自动增长1.在SQLSERVER中这个很好实现,但在oracle中我搞了半天,查了下资料发现要用到“序列(sequence)”,“触发器”的知识。
首先,创建一个序列:
create sequence STU
minvalue 1
maxvalue 999999999999
start with 21
increment by 1
cache 20;
然后,给表student创建一个触发器:
create or replace trigger stu_tr
before insert on student
for each row
declare
-- local variables here
begin
select stu.nextval into :new.id from dual;
end stu_tr;
*******************************************************************************************************************************
下面用一个例子来说明自增主键的创建:
1、建用户数据表
drop table dectuser;
create table dectuser(
userid integer primary key, /*主键,自动增加*/
name varchar2(20),
sex varchar2(2)
);
2、创建自动增长序列
drop sequence dectuser_tb_seq;
create sequence dectuser_tb_seq
minvalue 1
maxvalue 99999999
increment by 1
start with 1; /*步长为1*/
3、创建触发器
create or replace trigger dectuser_tb_tri
before insert on dectuser /*触发条件:当向表dectuser执行插入操作时触发此触发器*/ for each row /*对每一行都检测是否触发*/
begin /*触发器开始*/
select dectuser_tb_seq.nextval into :new.userid from dual; /*触发器主题内 容,即触发后执行的动作,在此是取得序列dectuser_tb_seq的下一个值插入到表dectuser中的userid字段中*/
end; /*退出sqlplus行编辑*/
4、提交 commit;
现在就完成了自增主键的设定,搞定!可以检测一下。
insert into dectuser(name,sex) values ('wang','女');
****************************************************************************************************
总的来说,通过在insert操作之前,添加一个触发器,将序列的值放到了将要插入的数据的ID中。
所以,需要 建表->建序列->建触发器 这样一个过程。
我觉得有几个要注意的
一是主键类型为 INT型比较好。
二是触发器主题内容中,select...into 后面的冒号不能掉了。
- ORACLE 触发器实现主键自动填充
- Oracle 使用触发器实现主键自动增长
- oracle利用触发器实现主键的自动增加
- oracle使用序列和触发器实现主键的自动增长
- Oracle 实现主键自动增长之序列,触发器
- oracle下触发器实现主键自增
- Oracle主键自增(触发器实现)
- ORACLE下触发器实现主键自增
- oracle实现主键自动增长
- oracle实现主键自动增
- Oracle触发器实现自动编号
- Oracle序列+触发器+主键(实现主键自增)
- 用触发器实现插入时自动填充默认值为序列
- Oracle建表,建序列,建触发器,自动生成唯一主键
- Oracle主键ID设置自动增长(序列+触发器)
- oracle中插入数据时自动生成主键的触发器
- oracle中插入数据时自动生成主键的触发器
- oracle创建表,序列,触发器,自动生成唯一主键
- hdu 1086 You can Solve a Geometry Problem too 线段相交
- 非天然的链接的分析
- Easy Binary Compatible Interfaces Across Compilers in C++
- STL概述
- WPF学习之启动窗体设置
- ORACLE 触发器实现主键自动填充
- POJ 3259 Wormholes
- 黑马程序员—java—IO流
- 实现JavaBean和json之间的相互转换
- android自定义布局中的平滑移动
- Ubuntu 13.04 – Install Jetty 9
- poj 2226 Muddy Fields(二分图)
- Exception:线程间操作无效: 从不是创建控件的线程访问它 解决方案
- ProgressBar自定义漂亮样式样式