Oracle数据库之Oracle中序列(SEQUENCE)的实例
小标 2018-12-28 来源 : 阅读 1842 评论 0

摘要:本文主要向大家介绍了Oracle数据库之Oracle中序列(SEQUENCE)的实例,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

本文主要向大家介绍了Oracle数据库之Oracle中序列(SEQUENCE)的实例,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。


曾经在触发器中使用序列(SEQUENCE):

create or replace trigger TRI_SUPPLIER
  before insert on   SUPPLIER  for each rowbegin
  select seq_supid.NEXTVAL into:new.supcode from dual;  select seq_supid.CURRVAL into:new.supID from dual;end;

显然,忽略了并发,修改后如下:

create or replace trigger TRI_SUPPLIER
  before insert on   SUPPLIER  for each rowdeclare  v_supval number(20);begin
  select  seq_supid.NEXTVAL into v_supval  from dual;  select v_supval  into:new.supcode from dual;  select v_supval  into:new.supID from dual;end;

 再附上一个使用触发器防止重复记录的例子:

CREATE OR REPLACE TRIGGER TRI_ASSETPROJECT
  BEFORE INSERT ON ASSETPROJECT
  FOR EACH ROW
DECLARE V_PROJECTID NUMBER(20) :=0;
 V_TMP VARCHAR2(100) :='';
BEGIN
     SELECT :NEW.PROJECTCODE INTO V_TMP FROM DUAL;
     dbms_output.put_line(V_TMP);
     SELECT PROJECTID INTO V_PROJECTID  FROM ASSETPROJECT WHERE PROJECTCODE = :NEW.PROJECTCODE and rownum=1 ;    
  IF (NVL(V_PROJECTID,0)<=0) THEN ----如果不存在编码记录
      begin
       SELECT SEQ_ASSETPROJECTID.NEXTVAL INTO :NEW.PROJECTID FROM DUAL;
       dbms_output.put_line('New ID ');
      end;
    ELSE --如果已存在编码记录
      begin
       --SELECT :V_PROJECTID INTO:NEW.PROJECTID FROM DUAL;
       RAISE_APPLICATION_ERROR(-20001, '项目编码已存在,不允许重复添加!'); 
       dbms_output.put_line('Old ID ');
      end;
    end if;
END;


本文由职坐标整理并发布,希望对同学们学习Oracle有所帮助,更多内容请关注职坐标数据库Oracle数据库频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程