当前位置: 代码迷 >> Oracle管理 >> PL/SQL程序实现,该如何解决
  详细解决方案

PL/SQL程序实现,该如何解决

热度:276   发布时间:2016-04-24 04:22:30.0
PL/SQL程序实现
有订单表ORDER,单号字段OrderNo VARCHAR(10),OrderName VARCHAR(100)。需要实现自动编号,格式为YYYYMMXXXX,其中XXXX为序号,如:2014030001,2014030002.。。。。。。等。
不使用Oracle的SEQUENCE实现,而是自己定义一个管理序列的表,存放序号。使用PL/SQL程序,向订单表中增加数据,订单编号能自动生成。这个语句怎么写?
------解决方案--------------------
可以定义一个触发器,在触发器中实现学号自动生成:
create   trigger tri_ol_order
before insert on t_order
for each row
declare
   v_order varchar2(10);
   v_date varchar2(6);
   v_num number(4);
begin
 select odaerno into v_order from 
   (select odaerno from 
         (select odaerno from t_order order by odaerno desc)
      where rownum<2);                       --查询上次插入的最后一条记录的序列号
    v_date :=to_char(sysdate,'yyyymm');   --当前日期字段
    v_num :=substr(v_order,7,10);              --后面自增字段
    v_order :=v_date
------解决方案--------------------
lpad(v_num+1,4,'0');   --要插入的字段
    :new.odaerno :=v_order;
 exception                                               --表为空,第一次插入数据
   when no_data_found then
   :new.odaerno :=to_char(sysdate,'yyyymm')
------解决方案--------------------
'0001';
end;
截图:


------解决方案--------------------
引用:
有订单表ORDER,单号字段OrderNo VARCHAR(10),OrderName VARCHAR(100)。需要实现自动编号,格式为YYYYMMXXXX,其中XXXX为序号,如:2014030001,2014030002.。。。。。。等。
不使用Oracle的SEQUENCE实现,而是自己定义一个管理序列的表,存放序号。使用PL/SQL程序,向订单表中增加数据,订单编号能自动生成。这个语句怎么写?
这样的function应该适用吧:
create or replace function f_f  return varchar2 is
  v_OrderNo  varchar2(20);
  v_maxNo varchar2(20);
  select max(OrderNo) into v_maxNo from ORDER where OrderNo like to_char(sysdate,'yyyymm')
------解决方案--------------------
'%';
  if v_maxNo is null then
    v_OrderNo := to_char(sysdate,'yyyymm')
------解决方案--------------------
'00001';
    else
      v_OrderNo := to_char(v_maxNo+1);
    end if;
    return v_OrderNo;
  end f_f;
  相关解决方案