oracle自动生成ID问题

wh_gl 2008-11-05 03:53:49
1、建用户数据表
建立表test,data_id为主键

2、创建自动增长序列
create sequence test_seq minvalue 1 maxvalue 9999999999
increment by 1
start with 1; /*步长为1*/

3、创建触发器
create trigger test_trigger
befor insert on test
for each row;
declare new.data_id number;
begin
select test_deq.nextval into new.data_id from dual;
end test_trigger;
在SQL中到最后一步end test_trigger;的时候始终退不出去是什么原因
界面是这个样子的
SQL>create trigger test_trigger
2 befor insert on test
3 for each row;
4 declare new.data_id number;
5 begin
6 select test_deq.nextval into new.data_id from dual;
7 end test_trigger;
8
9
10
到底是哪错了?
...全文
880 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wh_gl 2008-11-05
  • 打赏
  • 举报
回复
问题解决了
create or replace trigger test_trigger
before insert on test
for each row
begin
select test_seq.nextval into :new.data_id from dual;
end test_trigger;
/
谢谢楼上各位
gdqsh 2008-11-05
  • 打赏
  • 举报
回复
create trigger test_trigger
befor insert on test
for each row;
declare new.data_id number;
begin
select test_deq.nextval into new.data_id from dual;
end test_trigger;
----------------------------------
都是低级错误
wh_gl 2008-11-05
  • 打赏
  • 举报
回复
解决了,刚才是缺少了for each row
又是违规昵称 2008-11-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 linzhangs 的回复:]
综述:1、多了个分号。
2、不需要declare。
3、加冒号
4、befor---before
5、test_deq---test_seq

[/Quote]

服务真到位!

要是我我就不用触发器

wh_gl 2008-11-05
  • 打赏
  • 举报
回复
这个拼写错误还请见谅
我刚才按照你的说法输入了一变,这个是解决了,但是出现了一个错误
ERROR at line 1:
ORA-04082: NEW or OLD references not allowed in table level triggers
怎么回事?
范佩西_11 2008-11-05
  • 打赏
  • 举报
回复
综述:1、多了个分号。
2、不需要declare。
3、加冒号
4、befor---before
5、test_deq---test_seq
范佩西_11 2008-11-05
  • 打赏
  • 举报
回复
老大你错别字太多了见下面
SQL> create or replace trigger test_trigger
2 before insert on test
3 for each row
4 begin
5 select test_seq.nextval into :new.data_id from dual;
6 end test_trigger;
7 /

Trigger created
wh_gl 2008-11-05
  • 打赏
  • 举报
回复
还是不行
wh_gl 2008-11-05
  • 打赏
  • 举报
回复
去掉了,还是不行
YY_MM_DD 2008-11-05
  • 打赏
  • 举报
回复
对,还得去掉LS说的;号
YY_MM_DD 2008-11-05
  • 打赏
  • 举报
回复

create sequence test_seq minvalue 1 maxvalue 9999999999
increment by 1
start with 1;

create trigger test_trigger
before insert on test
for each row;
begin
select test_deq.nextval into test.id from dual;--比如说你的test表有个id字段,设置他自动增长
end test_trigger;

gisinfo 2008-11-05
  • 打赏
  • 举报
回复

for each row;
后面不用分号
end test_trigger;
后面加/执行以下
wh_gl 2008-11-05
  • 打赏
  • 举报
回复
还是不行,同样的情况
zhouxu_hust 2008-11-05
  • 打赏
  • 举报
回复
MARK
wh_gl 2008-11-05
  • 打赏
  • 举报
回复
那个declare不用么?
书上介绍触发器的章节很少,不是很详细
cosio 2008-11-05
  • 打赏
  • 举报
回复
学习一下触发器
oracledbalgtu 2008-11-05
  • 打赏
  • 举报
回复
错误多处,改成如下:
CREATE OR REPLACE TRIGGER TEST_TRIGGER
BEFORE INSERT ON TEST
FOR EACH ROW
BEGIN
SELECT TEST_SEQ.NEXTVAL INTO :NEW.DATA_ID FROM DUAL;
END TEST_TRIGGER;
/


[Quote=引用楼主 wh_gl 的帖子:]
1、建用户数据表
建立表test,data_id为主键

2、创建自动增长序列
create sequence test_seq minvalue 1 maxvalue 9999999999
increment by 1
start with 1; /*步长为1*/

3、创建触发器
create trigger test_trigger
befor insert on test
for each row;
declare new.data_id number;
begin
select test_deq.nextval into new.data_id from dual;
end test_trigger;
在SQL中到最后一步end test_…
[/Quote]

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧