生成单号 by Oracle proc

1.创建表

create table T_SN

(
  code   CHAR(1),
  type   NUMBER(4),
  years  NUMBER(4),
  org    NUMBER(8),
  val1   NUMBER(4),
  val2   NUMBER(3),
  status NUMBER(1)

)

2.创建proc

CREATE OR REPLACE PROCEDURE find_no
(
  i_code IN char,
  i_type IN number,
  i_years IN number,
  i_org IN number,
  o_no OUT varchar2
)
AS
  current_val1 number;
  current_val2 number;
  is_exists number;
  BEGIN

      IF (i_code != 'P2') THEN

        SELECT COUNT(1) INTO is_exists FROM T_SN WHERE code=i_code AND type=i_type AND years=i_years AND org=i_org;
        IF (is_exists != 0) THEN
          UPDATE T_SN SET VAL1 = VAL1 + 1 WHERE code=i_code AND type=i_type AND years=i_years AND org=i_org;
          SELECT VAL1 INTO current_val1 FROM T_SN WHERE code=i_code AND type=i_type AND years=i_years AND org=i_org;
          o_no := i_code || lpad(i_type,4,'0') || lpad(i_years,4,'0') || lpad(i_org,8,'0') || lpad(current_val1,4,'0');
          dbms_output.put_line('no = ' || o_no);
          COMMIT;

        ELSIF (is_exists = 0) THEN
          INSERT INTO T_SN VALUES(i_code,i_type,i_years,i_org,0001,null,null);
          o_no := i_code || lpad(i_type,4,'0') || lpad(i_years,4,'0') || lpad(i_org,8,'0') || '0001';
          dbms_output.put_line('no = ' || o_no);
          COMMIT;

        END IF;

      ELSE
        SELECT COUNT(1) INTO is_exists FROM T_SN WHERE code='P' AND type=i_type AND years=i_years AND org=i_org AND STATUS=1;
        IF (is_exists != 0) THEN
          UPDATE T_SN SET VAL2 = VAL2 + 1 WHERE code='P' AND type=i_type AND years=i_years AND org=i_org AND STATUS=1;
          SELECT VAL1,VAL2 INTO current_val1,current_val2 FROM T_SN WHERE code='P' AND type=i_type AND years=i_years AND org=i_org AND STATUS=1;
          o_no := i_code || lpad(i_type,4,'0') || lpad(i_years,4,'0') || lpad(i_org,8,'0') || lpad(current_val1,4,'0') || lpad(current_val2,3,'0');
          dbms_output.put_line('no = ' || o_no);
          COMMIT;

        ELSIF (is_exists = 0) THEN
          INSERT INTO T_SN VALUES('P',i_type,i_years,i_org,0001,001,1);
          o_no := i_code || lpad(i_type,4,'0') || lpad(i_years,4,'0') || lpad(i_org,8,'0') || '0001' || '001';
          dbms_output.put_line('no = ' || o_no);
          COMMIT;

        END IF;

      END IF;

  END find_no;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值