Oracle 创建触发器实现自增长
Oracle中没有主键,要实现自增长,需要创建触发器,每次插入数据的时候进行ID赋值。
环境:Oracle11,Navicat工具连接
创建了一个表,字段如下(字段名,表名都需要大写,你小写了还无效。。。):

--如果表中存在记录,先把原来的数据赋值
UPDATE VD_EVENTS_DATA SET ID=ROWNUM;
--创建序列,设置初始值和每次增长值
CREATE SEQUENCE VD_EVENTS_DATA_ID_SEQ MINVALUE 1 NOMAXVALUE INCREMENT BY 1 START WITH 1000 NOCACHE;
--创建触发器,请注意这个格式。。。
CREATE OR REPLACE TRIGGER VD_EVENTS_DATA_INS_TRG BEFORE INSERT ON VD_EVENTS_DATA FOR EACH ROW WHEN(NEW.ID IS NULL OR NEW.ID = 0)
BEGIN
SELECT VD_EVENTS_DATA_ID_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL;
END;
/
如果出现下面错误:
ORA-24344: success with compilation error 成功,但编译出错
你会发现你的触发器创建成功了,但是你添加数据的时候回报错。
原因:我把上面的sql语句美化了。。。就出错了,妈耶,醉了醉了

CREATE
OR REPLACE TRIGGER RB_REFUSECLASSIFY_INS_TRG BEFORE INSERT ON RB_REFUSECLASSIFY FOR EACH ROW WHEN ( NEW.ID IS NULL OR NEW.ID = 0 ) BEGIN
SELECT
RB_REFUSECLASSIFY_ID_SEQ.NEXTVAL INTO : NEW.ID
FROM
DUAL; END;
/
请按照最上面的SQL语句结构来,测试是OK的
Oracle 创建触发器实现自增长的更多相关文章
- Oracle创建触发器实现主键自增
CREATE OR REPLACE TRIGGER "trigger_empl" before insert on extjsTest1.t_empl for each row b ...
- oracle创建触发器及作用举例
--创建触发器及作用举例 create or replace trigger tri before delete on emp --在删除emp表数据之前需要做的事根据自己的业务去写,before是在 ...
- oracle创建表空间自增长和创建用户
/* 步骤: 1.创建表空间 2.创建用户 3.用户授权 */ /*创建表空间*/ create tablespace QCJ_TABLESPACE /*表空间物理文件名称*/ datafile 'Q ...
- oracle创建触发器
create or replace trigger 触发器名字 触发时间 触发事件 after(before) insert or update or delete on 表名 for each r ...
- Oracle - java创建Oracle 的触发器
Oracle - java创建Oracle 的触发器 今天碰到这个问题,遇到点问题,到这来 总结一下解决的办法, 需求,为一个用户当中的表增加一个自动增长列,我还没有学Oracle 的这部分,只是简单 ...
- Oracle创建自增长主键
Oracle主键常用的分为UUID和自增长int两种,下面简单说下各自的优缺点: UUID的优点 1.生成方便,不管是通过sys_guid() 还是java的uuid都能很方便的创建UUID. 2.适 ...
- Oracle数据库——触发器的创建与应用
一.涉及内容 1.理解触发器的概念.作用和类型. 2.练习触发器的创建和使用. 二.具体操作 (实验) 1.利用触发器对在scott.emp表上执行的DML操作进行安全性检查,只有scott用户登录数 ...
- oracle 序列 + 触发器 实现 ID自动增长
1.创建序列 create sequence emp_sequence increment by ----每次增加几个 minvalue ----最小值为1 nomaxvalue----不限制最大值 ...
- Oracle中创建触发器示例及注意事项
1.oracle 中创建触发器示例 CREATE TABLE "CONCEPT"."FREQUENCYMODIFYLOG" ( "FREQUENCYI ...
随机推荐
- 九 ServerSocketChannel
ServerSocketChannel是一个可以监听进来的TCP连接的通道,就像标准IO的ServerSocket一样.ServerSocketChannel类在java.nio.channels包中 ...
- c#之静态构造函数和单例模式
1.静态构造函数:在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类 public class A { ; : private static A instance_; publi ...
- csharp:using Newtonsoft.Json.Net2.0 in .net 2.0 webform
/// <summary> /// http://www.weather.com.cn/data/sk/101280601.html /// {"weatherinfo" ...
- Bzoj1492: [NOI2007]货币兑换Cash(不单调的斜率优化)
题面 传送门 Sol 题目都说了 必然存在一种最优的买卖方案满足: 每次买进操作使用完所有的人民币: 每次卖出操作卖出所有的金券. 设\(f[i]\)表示第\(i\)天可以有的最大钱数 枚举\(j&l ...
- UOJ#288:基础数据结构练习题
题面 UOJ Sol 玄学,不会势能分析 所以 维护区间最大最小值 把开根变成区间减法 如果最大值开根后的变化量和最小值的相等,就直接打个减法\(lazy\) # include <bits/s ...
- makefile 通配符了解% $@ $^ $<
把目录下所有文件都编译的命令. 1 all:$(subst .c,.o,$(wildcard *.c)) 2 3 %.o:%.c 4 gcc -o $@ $< 下面是几个特舒符号的意思: $@: ...
- latex 调整间隔
转自:http://blog.sina.com.cn/s/blog_4a4927c70100phsb.html,感谢分享! 一.LATEX调整公式与正文间距离,调整空白大小: 调整空白命令: \s ...
- SVNKit学习——Setting Up A Subversion Repository 创建仓库(三)
所谓Setting Up A Subversion Repository,就是在Subversion所在的服务器上创建一个仓库,说白了就是在磁盘上建一个特殊的目录,这里我以windows举例. 1.使 ...
- Threading in C# 5
Part 5: Parallel Programming In this section, we cover the multithreading APIs new to Framework 4.0 ...
- shell语句
一.判断目录是否存在:#!/bin/bash#/bin/bash -n filename.sh 判断语句是否正确 DIR=/root/zhjif [ ! -d $DIR ];then mkdir $D ...