¶ÈÁ¿¿ìËÙ¿ª·¢Æ½Ì¨-רҵ¡¢¿ìËÙµÄÈí¼þ¶¨Öƿ쿪ƽ̨

±êÌâ: ORACLEʵÏÖ×Ô¶¨ÒåÐòÁкÅÉú³ÉµÄ·½·¨ [´òÓ¡±¾Ò³]

×÷Õß: ³ÂÏþÁú    ʱ¼ä: 2020-5-16 13:47
±êÌâ: ORACLEʵÏÖ×Ô¶¨ÒåÐòÁкÅÉú³ÉµÄ·½·¨
ÕâƪÎÄÕÂÖ÷ҪΪ´ó¼ÒÏêϸ½éÉÜÁËORACLEʵÏÖ×Ô¶¨ÒåÐòÁкÅÉú³ÉµÄ·½·¨,¾ßÓÐÒ»¶¨µÄ²Î¿¼¼ÛÖµ£¬¸ÐÐËȤµÄС»ï°éÃÇ¿ÉÒԲο¼Ò»ÏÂ




ʵ¼Ê¹¤×÷ÖУ¬ÄÑÃâ»áÓöµ½ÐòÁкÅÉú³ÉÎÊÌ⣬ÏÂÃæ¾ÍÊÇÒ»¸ö¼òµ¥µÄÐòÁкÅÉú³Éº¯Êý
£¨1£©´´½¨×Ô¶¨ÒåÐòÁкÅÅäÖñíÈçÏ£º
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
--×Ô¶¨ÒåÐòÁÐ
create table S_AUTOCODE
(
pk1   VARCHAR2(32) primary key,
atype   VARCHAR2(20) not null,
owner   VARCHAR2(10) not null,
initcycle  CHAR(1) not null,
cur_sernum VARCHAR2(50) not null,
zero_flg  VARCHAR(2) not null,
sequencestyle VARCHAR2(50),
memo   VARCHAR2(60)
);
-- Add comments to the columns
comment on column S_AUTOCODE.pk1 is 'Ö÷¼ü';
comment on column S_AUTOCODE.atype is 'ÐòÁкÅÀàÐÍ';
comment on column S_AUTOCODE.owner is 'ÐòÁкÅËùÓÐÕß';
comment on column S_AUTOCODE.initcycle is 'ÐòÁкŵÝÔö';
comment on column S_AUTOCODE.cur_sernum is 'ÐòÁкÅ';
comment on column S_AUTOCODE.zero_flg is 'ÐòÁкų¤¶È';
comment on column S_AUTOCODE.sequencestyle is 'ÐòÁкÅÑùʽ';
comment on column S_AUTOCODE.memo is '±¸×¢';
-- Create/Recreate indexes
create index PK_S_AUTOCODE on S_AUTOCODE (ATYPE, OWNER);



£¨2£©³õʼ»¯ÅäÖÃ±í£¬ÀýÈ磺

´úÂëÈçÏÂ:
insert into s_autocode (PK1, ATYPE, OWNER, INITCYCLE, CUR_SERNUM, ZERO_FLG, SEQUENCESTYLE, MEMO)
values ('0A772AEDFBED4FEEA46442003CE1C6A6', 'ZDBCONTCN', '012805', '1', '200000', '7', '$YEAR$Äê$ORGAPP$ÖÊ×ÖµÚ$SER$ºÅ', 'ÖÊѺºÏͬÖÐÎıàºÅ');



£¨3£©×Ô¶¨ÒåÐòÁкÅÉú³Éº¯Êý£º
´´½¨º¯Êý£ºSF_SYS_GEN_AUTOCODE


?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
CREATE OR REPLACE FUNCTION SF_SYS_GEN_AUTOCODE(
   I_ATYPE IN VARCHAR2, /*ÐòÁÐÀà±ð*/
   I_OWNER IN VARCHAR2 /*ÐòÁÐËùÓÐÕß*/
) RETURN VARCHAR2 IS
  /**************************************************************************************************/
  /* PROCEDURE NAME : SF_SYS_GEN_AUTOCODE               */
  /* DEVELOPED BY : WANGXF                  */
  /* DESCRIPTION : Ö÷ÒªÓÃÀ´Éú³É×Ô¶¨ÒåµÄÐòÁкŠ            */     
  /* DEVELOPED DATE : 2016-10-08                 */
  /* CHECKED BY  :                    */
  /* LOAD METHOD : F1-DELETE INSERT                */
  /**************************************************************************************************/

  O_AUTOCODE VARCHAR2(100);      /*Êä³öµÄÐòÁкÅ*/
  V_INITCYCLE S_AUTOCODE.INITCYCLE%TYPE;  /*ÐòÁкŵÝÔö*/
  V_CUR_SERNUM S_AUTOCODE.CUR_SERNUM%TYPE;  /*ÐòÁкÅ*/
  V_ZERO_FLAG S_AUTOCODE.ZERO_FLG%TYPE;  /*ÐòÁкų¤¶È*/
  V_SEQUENCESTYLE S_AUTOCODE.SEQUENCESTYLE%TYPE;/*ÐòÁкÅÑùʽ*/
  V_SEQ_NUM VARCHAR2(100);      /*±¾´ÎÐòÁкÅ*/
  V_DATE_YEAR CHAR(4);       /*Äê·Ý£¬Èç2016*/
  V_DATE_YEAR_MONTH CHAR(6);     /*Äê·ÝÔ·ݣ¬Èç201610*/
  V_DATE_DATE CHAR(8);       /*Äê·ÝÔ·ÝÈÕ£¬Èç20161008*/
  V_DATE_DATE_ALL CHAR(14);     /*ÍêÕûÄê·ÝÐòÁУ¬Èç20161008155732*/
   
  /*
   Ö§³ÖµÄ²ÎÊýÐòÁУº
   $YEAR$ --> Äê·Ý
   $YEAR_MONTH$ --> Äê·Ý+Ô·ݣ¬²»º¬ºº×Ó
   $DATE$ --> Äê·Ý+Ô·Ý+ÈÕÆÚ£¬²»º¬ºº×Ó
   $DATE_ALL$ --> ÍêÕûÈÕÆÚ£¬²»º¬ºº×Ó
   $ORGAPP$ --> ËùÓÐÕß
   $SER$ --> µ±Ç°ÐòÁкÅ
  */
   
  --½â¾ö²éѯÊÂÎñÎÞ·¨Ö´ÐÐDMLµÄÎÊÌâ
  Pragma Autonomous_Transaction;
BEGIN
  -- ²éѯ¸´ºËÌõ¼þµÄÐòÁкÅÅäÖÃ
  SELECT T.INITCYCLE,
    T.CUR_SERNUM,
    T.ZERO_FLG,
    T.SEQUENCESTYLE
    INTO V_INITCYCLE,V_CUR_SERNUM,V_ZERO_FLAG,V_SEQUENCESTYLE
  FROM S_AUTOCODE T WHERE T.ATYPE=I_ATYPE AND T.OWNER=I_OWNER ;
   
  --¸ñʽ»¯µ±Ç°ÈÕÆÚ
  SELECT
   TO_CHAR(SYSDATE,'yyyy'),
   TO_CHAR(SYSDATE,'yyyyMM'),
   TO_CHAR(SYSDATE,'yyyyMMdd'),
   TO_CHAR(SYSDATE,'yyyyMMddHH24MISS')
   INTO V_DATE_YEAR,V_DATE_YEAR_MONTH,V_DATE_DATE,V_DATE_DATE_ALL
  FROM DUAL;
   
  -- ÈÕÆÚ´¦Àí
  O_AUTOCODE := REPLACE(V_SEQUENCESTYLE,'$YEAR$',V_DATE_YEAR);
  O_AUTOCODE := REPLACE(O_AUTOCODE,'$YEAR_MONTH$',V_DATE_YEAR_MONTH);
  O_AUTOCODE := REPLACE(O_AUTOCODE,'$DATE$',V_DATE_DATE);
  O_AUTOCODE := REPLACE(O_AUTOCODE,'$DATE_ALL$',V_DATE_DATE_ALL);
   
  --ËùÓÐÕß´¦Àí
  O_AUTOCODE := REPLACE(O_AUTOCODE,'$ORGAPP$',I_OWNER);
   
  --ÐòºÅ´¦Àí
  V_SEQ_NUM := TO_CHAR(TO_NUMBER(V_CUR_SERNUM)+TO_NUMBER(V_INITCYCLE));
   
  --·´Ð´µ±Ç°ÐòÁкţ¬È·±£Ã¿´Î¶¼ÊǵÝÔö
  UPDATE S_AUTOCODE T SET T.CUR_SERNUM=V_SEQ_NUM WHERE T.ATYPE=I_ATYPE AND T.OWNER=I_OWNER ;
   
  --²»Âú×㳤¶ÈµÄÇ°Ãæ²¹0
  IF LENGTH(V_SEQ_NUM) < TO_NUMBER(V_ZERO_FLAG)
   THEN
¡¡¡¡¡¡¡¡¡¡¡¡/*
   LOOP
    V_SEQ_NUM := '0'||V_SEQ_NUM;
   EXIT WHEN LENGTH(V_SEQ_NUM) = TO_NUMBER(V_ZERO_FLAG);
   END LOOP;
¡¡¡¡¡¡¡¡¡¡¡¡*/
¡¡¡¡¡¡¡¡¡¡¡¡V_SEQ_NUM := LPAD(V_SEQ_NUM,TO_NUMBER(V_ZERO_FLAG),'0');
  END IF;
   
  O_AUTOCODE := REPLACE(O_AUTOCODE,'$SER$',V_SEQ_NUM);
   
  COMMIT;
  RETURN O_AUTOCODE;
EXCEPTION
  --Èç¹ûûÓжÔÓ¦µÄÅäÖÃÏÔò·µ»ØERRORÖµ
  WHEN NO_DATA_FOUND THEN
   ROLLBACK;
   DBMS_OUTPUT.put_line('there is no config as you need...');
   RETURN 'ERROR';
END SF_SYS_GEN_AUTOCODE;



£¨4£©²âÊÔ£º
ÅäÖÃÏ$YEAR$Äê$ORGAPP$ÖÊ×ÖµÚ$SER$ºÅ

´úÂëÈçÏÂ:
SELECT SF_SYS_GEN_AUTOCODE('ZDBCONTCN','012805') FROM DUAL;


£¨5£© ½á¹û
2016Äê012805ÖÊ×ÖµÚ0200001ºÅ
ÒÔÉϾÍÊDZ¾ÎĵÄÈ«²¿ÄÚÈÝ£¬Ï£Íû¶Ô´ó¼ÒµÄѧϰÓÐËù°ïÖú.






»¶Ó­¹âÁÙ ¶ÈÁ¿¿ìËÙ¿ª·¢Æ½Ì¨-רҵ¡¢¿ìËÙµÄÈí¼þ¶¨Öƿ쿪ƽ̨ (http://bbs.delit.cn/) Powered by Discuz! X3.2