求解一个日期判断和重建序列的问题?!?!

xiyiren 2003-10-18 02:52:47
ID字段的格式是sysdate+序列号,如:200310180006,后面的‘0006’是创建序列自动产生的,现在要实现是日期到第二天以后,要作出一个判断,然后插入的ID将是新日期+从1开始的新序列号,如:200310190001,不知道怎么来写判断条件,还有在触发里面写DROP SEQENCE删除序列无法编译,不能在触发里面写删除序列吗?(我的想法是删除序列然后重建一新的同名序列,但不能实现,求解!!
...全文
46 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bzszp 2003-10-20
  • 打赏
  • 举报
回复
817支持这种用法,805以下的不行

触发器中不能使用commit语句
检查一下你执行的语句,
Nickle_Final 2003-10-19
  • 打赏
  • 举报
回复
你可以创建一个job,每天晚上执行一次,让它调用存储过程把序列重置
blackest 2003-10-18
  • 打赏
  • 举报
回复
为什么非要删除呢,
序列是可以重置的阿
alter sequence aaaa MINVALUE
xiyiren 2003-10-18
  • 打赏
  • 举报
回复
不会吧,我晕,:我的是oracle8i817版本的,也不可以吗?那有没有什么别的方法解决啊, beckhambobo兄帮帮忙啊,拜托拜托啦~
robixiao 2003-10-18
  • 打赏
  • 举报
回复
这是因为drop sequence 是一条DDL语句,将自动提交,也就相当于在TRIGGER中有COMMIT.
beckhambobo 2003-10-18
  • 打赏
  • 举报
回复
你的oracle是什么版本,8i以下版本不支持execute immediate str
xiyiren 2003-10-18
  • 打赏
  • 举报
回复
谢谢楼上两位兄弟的回复:不过有一个问题,触发可以编译成功,但是插入更新的时候出现如下错误:
ORA-04092: COMMIT 不能在触发器中
ORA-06512: 在"HOT.TR_TESTID", line 8
ORA-04088: 触发器 'HOT.TR_TESTID' 执行过程中出错
line 8 是:execute immediate str;
这是为什么??!!
beckhambobo 2003-10-18
  • 打赏
  • 举报
回复
create trigger a_tri
before insert or update or delete on a
for each row
declare
str varchar2(100);
v_date varchar2(10);
begin
select max(col_date) into v_date from a;
if to_char(sysdate,'yyyymmdd')>substr(v_date,1,8) then
str:='drop SEQENCE ...';
execute immediate str;
str:='create SEQENCE ...';
execute immediate str;
end if;
select seq_name.nextval into :new.id from a;
end;
/
bzszp 2003-10-18
  • 打赏
  • 举报
回复
用动态sql
str varchar2(200);
str:='drop sequence ...';
execute immediate str;
str:='create sequence ...';
execute immediate str;

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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