重写发下,刚才可能没描述清楚。另外这次在触发器中加入了自治事务声明,但是还是报错,实在找不到原因,希望大神帮忙
首先贴出触发器代码;
create or replace trigger GET_ORD_ID --触发器,插入数据时候生产订单号,订单号由系统时间+自动增长列组成
before insert on POINFO
declare
PRAGMA AUTONOMOUS_TRANSACTION;--声明触发器为自治事务
for each row
begin
UserSUPP_ORDID();--调用存储过程
:new.order_id:=to_char(sysdate,'yyyymmdd')||'&'||SUPP_ORDID.nextval;--给ord_id赋值
commit;--提交事务
end;
下面是存储过程的代码
create or replace procedure UserSUPP_ORDID--根据日期来决定是否更新自动增长序列,假如日期更新,重写建立自动增长列
Authid Current_User--授予权限,不加这句会提示权限不足
is
num number;
begin
select count(*) into num FROM poinfo where to_char(sysdate,'yyyymmdd')=to_char(order_date,'yyyymmdd');--查询系统中是否有这个日期
if(num=0) then--假如没有这个日期
EXECUTE IMMEDIATE 'drop sequence SUPP_ORDID' ;--删除原有自动增长列,--创建新自动增长列
EXECUTE IMMEDIATE 'create sequence SUPP_ORDID
start with 1
increment by 1
maxvalue 100000
nocycle
nocache';
end if;
end;
测试语句
insert into poinfo (SUP_COMID,ORDER_DATE,LINKNAME,TEL) values(1,sysdate,'小二','13512345689');
大家也可以看图;