oracle主键自增 创建多个触发器
2017-04-26 19:02
260 查看
问题:
最近修改项目的sql脚本,新增几张表,其中三个表需要属性自增,mySql中可以直接用AUTO_INCREMENT,oracle没有做自增功能,需要手动写触发器实现自增功能。在网上找到了解决方案。贴出来供大家参考:
解决方案:1.首先创建表
2.创建sequence
到这里,大多数人的问题可能已经解决,下面是我卡了我两天的问题,因为sql初始化脚本中需要创建三个自增的触发器,下面是总结创建多个触发器的问题:
1.首先对于sequence和触发器到底是一一对应还是一对多的问题,最好还是一一对应,这样同一个表产生的主键是连续,否则是多张表共同使用一个sequence会造成数据不连贯。
2.多个触发器创建语句和一个触发器语法的不同处,在网上百度大家的解释都是在两个触发器末尾加‘/’,脚本中如果不加'/',造成数据库产生三个触发器但是触发器报错,点击编辑看到end后面的';'丢失,造成错误。代码如下
分析得出结论,如果是加'/'后,执行continue,此行忽略,如果不加‘/’,后台处理是将每条creat的字段放在一个数组,但是会去掉‘;’,此时我是想要分号留在数据中保存的,最后处理的代码就是在下一行又加了分号,用处做结束语。代码如下:
最近修改项目的sql脚本,新增几张表,其中三个表需要属性自增,mySql中可以直接用AUTO_INCREMENT,oracle没有做自增功能,需要手动写触发器实现自增功能。在网上找到了解决方案。贴出来供大家参考:
解决方案:1.首先创建表
CREATE TABLE eip_monitor_statistics ( pk INT NOT NULL, system_pk char(36), service_pk char(36), system_name VARCHAR2(300), corppk CHAR(36), PRIMARY KEY (pk) ) ;
2.创建sequence
create sequence monitor_statistics_seq minvalue 1 maxvalue 99999999 increment by 1 start with 1 ;3.创建触发器
create or replace trigger monitor_statistics_tri before insert or update on eip_monitor_statistics for each row WHEN (new.pk is null) begin select monitor_statistics_seq.nextval into :new.pk from dual; end; ;
到这里,大多数人的问题可能已经解决,下面是我卡了我两天的问题,因为sql初始化脚本中需要创建三个自增的触发器,下面是总结创建多个触发器的问题:
1.首先对于sequence和触发器到底是一一对应还是一对多的问题,最好还是一一对应,这样同一个表产生的主键是连续,否则是多张表共同使用一个sequence会造成数据不连贯。
2.多个触发器创建语句和一个触发器语法的不同处,在网上百度大家的解释都是在两个触发器末尾加‘/’,脚本中如果不加'/',造成数据库产生三个触发器但是触发器报错,点击编辑看到end后面的';'丢失,造成错误。代码如下
create or replace trigger comp_invoke_info_bak_tri before insert or update on eip_comp_invoke_info_bak for each row WHEN (new.pk_comp_invoke_info is null) begin select comp_invoke_info_bak_seq.nextval into :new.pk_comp_invoke_info from dual; end; / create or replace trigger monitor_statistics_tri before insert or update on eip_monitor_statistics for each row WHEN (new.pk is null) begin select monitor_statistics_seq.nextval into :new.pk from dual; end; /这样试了一下我的问题还是没有解决,最后跟了项目的代码,执行脚本后对脚本的处理
分析得出结论,如果是加'/'后,执行continue,此行忽略,如果不加‘/’,后台处理是将每条creat的字段放在一个数组,但是会去掉‘;’,此时我是想要分号留在数据中保存的,最后处理的代码就是在下一行又加了分号,用处做结束语。代码如下:
create or replace trigger comp_invoke_info_bak_tri大家还是要根据自己项目的具体情况进行判断,不要意味的百度。
before insert or update on eip_comp_invoke_info_bak
for each row WHEN (new.pk_comp_invoke_info is null)
begin
select comp_invoke_info_bak_seq.nextval into :new.pk_comp_invoke_info from dual;
end;
;
create or replace trigger monitor_statistics_tri before insert or update on eip_monitor_statistics for each row WHEN (new.pk is null) begin select monitor_statistics_seq.nextval into :new.pk from dual; end; ;
相关文章推荐
- Oracle 给表添加主键和使ID自增、触发器、创建结构一样的表
- Oracle创建主键自增表(sql语句实现)及触发器应用
- oracle增加主键列,创建序列,并自动根据序列设值,创建触发器。
- Oracle创建触发器实现主键自增
- oracle创建表,追加备注,添加主键,触发器,自动增长序列
- oracle创建表,序列,触发器,自动生成唯一主键
- oracle创建表主键触发器
- Oracle创建序列,触发器使表自增
- oracle创建序列和触发器使主键ID自增
- 创建Oracle的主键反序索引
- Oracle用触发器实现插入数据主键自增
- oracle 创建自动增加主键的表
- oracle 视图上创建触发器,发生“无法在视图上创建此类型的触发器”错误
- Oracle创建触发器
- Oracle创建自增字段方法
- 为实现表的主键自增长,创建序列和触发器
- oracle创建自动增长列、触发器
- Oracle 警告: 创建的触发器带有编译错误 错误的赋值变量
- [转 逆水行船]Oracle中创建表,创建序列,创建自增字段,添加注释, 添加记录,添加触发器,提交