新建了个插入触发器,在插入的时候出现“通信通道的文件结束”错误

gadaweb 2012-10-11 11:54:42
想实现ID自增,新建了sequence、trigger,如下:
create sequence t_skyquality_seq
minvalue 1
NOMAXVALUE
increment by 1
start with 1
NOCYCLE
cache 20;

CREATE or replace TRIGGER t_skyquality_trigger
BEFORE INSERT ON t_skyquality FOR EACH ROW WHEN (new.id is null)
begin
select t_skyquality_seq.nextval into: new.id from dual;
end;

在随便插入个数据时,就出现了“通信通道的文件结束”错误,最后pl/sql死掉。。
...全文
120 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
软件钢琴师 2012-10-11
  • 打赏
  • 举报
回复
CREATE or replace TRIGGER t_skyquality_trigger
BEFORE INSERT ON t_skyquality FOR EACH ROW)
begin
直接用t_skyquality_seq.nextval 替换new.id 不就可以了么,为什么要 select t_skyquality_seq.nextval into: new.id from dual;呢?
end;

gadaweb 2012-10-11
  • 打赏
  • 举报
回复
哈,还真是。但没改之前也可以编译成功呀。哈,谢了。。
[Quote=引用 7 楼 的回复:]

select t_skyquality_seq.nextval into: new.id from dual;
这句改成
select t_skyquality_seq.nextval into :new.id from dual;
注意冒号位置
[/Quote]
陈字文 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
select t_skyquality_seq.nextval into: new.id from dual;
这句改成
select t_skyquality_seq.nextval into :new.id from dual;
注意冒号位置
[/Quote]

学习.
fw0124 2012-10-11
  • 打赏
  • 举报
回复 1
select t_skyquality_seq.nextval into: new.id from dual;
这句改成
select t_skyquality_seq.nextval into :new.id from dual;
注意冒号位置
gadaweb 2012-10-11
  • 打赏
  • 举报
回复
出现错误“TRIGGER SZCRM.T_SKYQUALITY_TRIGGER 编译错误

错误:PLS-00357: 在此上下文中不允许表, 视图或序列引用 'T_SKYQUALITY_SEQ.NEXTVAL'
行:5
文本::new.id:=t_skyquality_seq.nextval;

错误:PL/SQL: Statement ignored
行:5
文本::new.id:=t_skyquality_seq.nextval;

”,不能这样用。。
[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:
怎么“直接用t_skyquality_seq.nextval 替换new.id”


:new.id:=t_skyquality_seq.nextval;

检查下alert_<SID>.log日志文件中是否存在ORA-07445错误。
[/Quote]
cowboyhn 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
怎么“直接用t_skyquality_seq.nextval 替换new.id”
[/Quote]

:new.id:=t_skyquality_seq.nextval;

检查下alert_<SID>.log日志文件中是否存在ORA-07445错误。
gadaweb 2012-10-11
  • 打赏
  • 举报
回复
怎么“直接用t_skyquality_seq.nextval 替换new.id”
[Quote=引用 1 楼 的回复:]

CREATE or replace TRIGGER t_skyquality_trigger
BEFORE INSERT ON t_skyquality FOR EACH ROW)
begin
直接用t_skyquality_seq.nextval 替换new.id 不就可以了么,为什么要 select t_skyquality_seq.ne……
[/Quote]
gadaweb 2012-10-11
  • 打赏
  • 举报
回复
嗯就是触发器的问题,触发器弄掉,插入没问题
[Quote=引用 2 楼 的回复:]

好像跟触发器没什么关系,你把触发器drop掉,再插入,是不是还有问题?
[/Quote]
fw0124 2012-10-11
  • 打赏
  • 举报
回复
好像跟触发器没什么关系,你把触发器drop掉,再插入,是不是还有问题?

17,377

社区成员

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

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