问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle使用触发器返回id和使用序列返回id有什么不同吗,都可以使用序列返回id的方法吗?请大神说的详细点

发布网友 发布时间:2022-04-30 08:09

我来回答

2个回答

懂视网 时间:2022-04-30 12:30

/ MINVALUE n | NOMAXVALUE}] //n序列的最大值或最小值 [{CYCLE | NOCYCLE}] //序列达到最大值时是否循环 [{CACHE n | NOCACHE}]; //定义序列内存块大小

   INCREMENT BY       用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的。

   START WITH          定义序列的初始值(即产生的第一个值),默认为1。

   MAXVALUE             定义序列的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,对于递增序列,系统最大值是10的27次方;对于递减序列,最大值是-1。

   MINVALUE              定义序列的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,对于递减序列,系统最小值是10的26次方;对于递增序列,最小值是1。

   CYCLE和NOCYCLE   表示当序列值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果不循环,达到限制值后,继续产生新值就会发生错误。

   CACHE和NOCACHE  定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能

建名为"SEQ_IP"的序列实例:
create sequence SEQ_IP
increment by 1
start with 1
minvalue 1 nomaxvalue
nocycle;

 

    2,删除序列

删除序列的语法是:
DROP SEQUENCE name //name为序列名

  

二、触发器

     触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,触发器与存储过程 的区别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。

触发器语法格式为:

CREATE [OR REPLACE] TIGGER 触发器名
 触发时间
 触发事件
ON 表名
[FOR EACH ROW]
BEGIN
 pl/sql语句
END

     触发器名:触发器对象的名称,由于触发器是自动执行的,因此该名称只是一个名称,没有实质的用途。

     触发时间:指明触发器何时执行,该值可取:

                   before---表示在数据库动作之前触发器执行;

                    after---表示在数据库动作之后出发器执行。

     触发事件:指明哪些数据库动作会触发此触发器:                        

                   例如:insert:数据库插入会触发此触发器; 

创建触发器实例:

create or replace trigger TGR_TABLE_IP  //TGR_TABLE_IP为触发器名
 before insert     //指插入表前启动触发器
 on tIP      //tIP为表名
 for each row     //每行执行此操作
begin
 if inserting and :new.FID is null then
 :new.FID := SEQ_IP.nextval;  //SEQ_IP为序列名
 end if; 
end TGR_TABLE_IP;

 注:当连续创建多个触发器时,使用 / 分隔

Oracle序列和触发器的使用

标签:

热心网友 时间:2022-04-30 09:38

有两种方法可以设置主键,一种是自增长主键,另一种就是生成唯一序列。
一、自增长主键
--首先建一个表TEST
create table TEST
(
NID int PRIMARY KEY,
test1 varchar2(20),
test2 varchar2(20),
test3 varchar2(20),
test4 varchar2(20),
test5 varchar2(20)
)
-- 再建一个序列SEQ_TEST
create sequence SEQ_TEST
minvalue 1 --最小值
nomaxvalue --不设置最大值
start with 1 --从1开始计数
increment by 1 --每次加1个
nocycle --一直累加,不循环
nocache; --不建缓冲区
以上代码完成了一个序列(sequence)的建立过程,名称为SEQ_TEST,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或Oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!)
你只有了表和序列还不够,最好再建一个触发器来执行它!代码如下:
CREATE OR REPLACE TRIGGER tg_test
BEFORE INSERT ON test FOR EACH ROW WHEN (new.nid is null)
begin
select seq_test.nextval into:new.nid from al;
end;

下面是测试
select * from test
insert into test(nid,test1) values(6,'aaa')
insert into test(test1) values('bbb')
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
word文档怎么设置页码word怎么从中间开始设置页码 《祖宗模拟器》如何长寿长寿技巧分享 祖宗模拟器答案大全,你知道吗。 祖宗模拟器答案大全,哪位有? 宝石种类分为哪几类? 表格怎么自动排序号excel表格中自动生成序号技巧 表格如何自动排序仅需4步让Excel表格自动排序的方法 1.5匹富士空调电脑板开机就烧保险丝 为什么 修空调只是把拆了个压敏电阻,虽然可以运行,但这样没问题吗? 1.5富士空调电脑板一通电就烧保险丝为什么 40篇短文搞定3500词音频 《清平乐·村居》中词人为什么说是青青草而不是青草? 辛弃疾的 清平乐 村居》中 “溪上青青草”为什么不用“溪边青青草” y450杜比音效快捷键失效 庭前青青草这句话是什么意思? 天气丹乳液和面霜同时用吗 app软件为什么打开就闪退 天率丹的乳液什么味道 天气丹水乳是按压的吗 pdf编辑软件是什么? ST昌鱼股票的其他特别处理指哪些?已经是ST了,取消退市预警后的特备处理一般有哪些? 大家好,我最近买了一个京东方A,网上突然有消息说这股票要退市,不是说先进入ST吗?会不会突然退市呢? 沃易玩的定向流量怎么使用? 通过流量派平台购买的流量卡如何使用? 想咨询一下嘛联通一起沃流量怎么用 沃易玩定向流量怎么用 沃易玩定向流量怎么用? 我现在有一个高流量的平台,请问一下如何用这些流量变现! 联通一起沃流量如何用 沃易玩的流量怎么用 福尔德系统怎样调怠速 摩托车怠速不稳,时高时低,是什么原因? 力帆320p0505故障码 p0505故障码清除不掉 征信上显示以前被别人起诉过,银行要求开结清证明,应该怎么办 联通无限流量20g后限速怎么解除 银行征信不良记录怎么抹掉,起诉银行可以吗? 贷款未还银行先起诉还是先上征信 自动更新怎么开启自动更新怎么开启 银行恢复了我的征信不良我还能起诉信用社吗 银行贷款没还上,银行没有起诉,银行征信能查到不良信息吗? 如何开启苹果自动更新 被银行起诉在征信显示几年后消除 华为手机自动更新怎么开启 礼品进行验货和签收时应该注意什么? 关于快递验货签收的问题 得物物流显示到达收方仓库,正排队验货签收,怎么回事? 魅族MX4后盖怎么打开? 快递验货签收问题 快递可以先拆开验货,再签收吗?