create sequence TestIdentity
start with 1
increment by 1
maxvalue 99999
nocycle
cache 20;create or replace trigger TestTrigger
before insert on test for each row
begin
select TestIdentity.nextval into:new.ID from dual;
end;我建了这样一个序列,把他应用到test表上,应该是从1开始,每次增加1,但是现在是从2开始,每次加2,这是为什么呢?
start with 1
increment by 1
maxvalue 99999
nocycle
cache 20;create or replace trigger TestTrigger
before insert on test for each row
begin
select TestIdentity.nextval into:new.ID from dual;
end;我建了这样一个序列,把他应用到test表上,应该是从1开始,每次增加1,但是现在是从2开始,每次加2,这是为什么呢?
解决方案 »
- 删除undo表空间数据库启动报ORA-01157 和ORA-01110
- 新手请教:Oracle服务器隔几天Down一次,怎么分析?
- 问个Case语句
- Oracle 10g 里面能不能取存储过程的参数以及类别.
- 安装ORACLE的服务器,是否可以杀掉联接了服务器但是长时间没有做操作的客户端?
- 查询条件中有2个日期字段的范围,查询结果总为空,这是怎么回事?
- 求助!sql语句优化
- 使用数据库链接出错!
- 关于存储过程的问题
- 急 在线等oracle 截取特殊符号之间的数字
- Oracle查询一定时间段内每一段时间数据问题
- 我又来啦,存储过程中进行了增删改操作,我想在语句后手动添加日志,有哪些方法啊, 满分
2 start with 1
3 increment by 1
4 maxvalue 99999
5 nocycle
6 cache 20;序列已创建。SQL> create or replace trigger TestTrigger
2 before insert on test for each row
3 begin
4 select TestIdentity.nextval into:new.ID from dual;
5 end;
6 /触发器已创建SQL> show error
没有错误。
SQL> insert into test (name) values ('AC米兰');已创建 1 行。SQL> commit;提交完成。SQL> select * from test; ID NAME
---------- ----------------
1 AC米兰SQL> insert into test (name) values ('AC米兰青年队');已创建 1 行。SQL> commit;提交完成。SQL> select * from test; ID NAME
---------- ----------------
1 AC米兰
2 AC米兰青年队SQL> insert into test (name) values ('BRAZIL');已创建 1 行。SQL> commit;提交完成。SQL> select * from test; ID NAME
---------- ----------------
1 AC米兰
2 AC米兰青年队
3 BRAZILSQL>
你触发器里改成这个
select TestIdentity.currval into:new.ID from dual;
试试,满足你的要求?>
你可以试下,drop sequence,再重新创建,再引用nextval看看
insert into语句看看
2 start with 1
3 increment by 1
4 maxvalue 99999
5 nocycle
6 cache 20;序列已创建。SQL> create or replace trigger TestTrigger
2 before insert on test for each row
3 begin
4 select TestIdentity.nextval into:new.ID from dual;
5 end;
6 /触发器已创建SQL> show error
没有错误。
SQL> insert into test (name) values ('AC米兰');已创建 1 行。SQL> select * from test; ID NAME TRANS_DATE
---------- ---------------- --------------
1 AC米兰SQL> insert into test (name,trans_date) values ('AC米兰',sysdate);已创建 1 行。SQL> select * from test; ID NAME TRANS_DATE
---------- ---------------- --------------
1 AC米兰
2 AC米兰 05-3月 -10SQL> insert into sysadmin.test values(TestIdentity.nextval,'abd',to_date('2009-0
6-23','YYYY-MM-DD'));
insert into sysadmin.test values(TestIdentity.nextval,'abd',to_date('2009-06-23'
,'YYYY-MM-DD'))
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> insert into test values(TestIdentity.nextval,'abd',to_date('2009-06-23','YY
YY-MM-DD'));已创建 1 行。SQL> select * from test; ID NAME TRANS_DATE
---------- ---------------- --------------
1 AC米兰
2 AC米兰 05-3月 -10
4 abd 23-6月 -09SQL>
你触发器已经select into用去一个值,但该值你并未使用,而是在insert into里,继续取下一个值。
create or replace trigger TestTrigger
before insert on T3 for each row
begin
select TEST_DUQ_SEQ.nextval into:new.A from dual;
DBMS_OUTPUT.put_line(:NEW.A);
end; SQL> INSERT INTO T3 VALUES(2,2);
6--该值为触发器中打印出来的序列的值。已创建 1 行。向1楼说的那样,查看一下你的其他sql语句中是否调用了该sequence。
触发器里取当前的TestIdentity.currval
TestIdentity.nextval又取了一次值。sequence又加了1.