系统单据编号介绍:转载小冯子大神的博客点击打开链接
<1>直接调用系统函数:(模组名,单号,单据日期,单据性质,表名,栏位名……)
- CALL s_auto_assign_no("aco",g_cno.cno01,g_cno.cno02,"14","cno_file","cno01","","","")
- RETURNING li_result,g_cno.cno01
<2>简单的一句SQL语句实现编号,主要单别+日期年月日+时间时分秒毫秒
- SELECT 'E11-'||TO_CHAR(SYSDATE,'YY')||
- (SELECT CASE MONTH(TO_CHAR(SYSDATE))
- WHEN 01 THEN '1' WHEN 02 THEN '2' WHEN 03 THEN '3' WHEN 04 THEN '4'
- WHEN 05 THEN '5' WHEN 06 THEN '6' WHEN 07 THEN '7' WHEN 08 THEN '8'
- WHEN 09 THEN '9' WHEN 10 THEN 'A' WHEN 11 THEN 'B' WHEN 12 THEN 'C'
- END
- FROM DUAL)||TO_CHAR(SYSDATE,'DDHH24MI')||TO_CHAR(SYSTIMESTAMP,'ssff2')
- FROM DUAL
Systimestamp 函数返回本机数据库上当前系统日期和时间(包括微秒和时区).
你也可以选择使用to_char()函数来转换systimestamp()函数.
- 例如:
- 1.SQL> select systimestamp 时间 from dual;
- 时间
- --------------------------------------------------------------------------------
- 22-9月 -12 09.02.21.389797 上午 -04:00
- 2.SQL> select to_char(systimestamp,'SSSS.FF') 格式化 from dual;
- 格式化
- --------------
- 1313.327268
- 3.SQL> select to_char(systimestamp,'YYYY-MM-DD HH24MISSFF9') 格式化后 from dual;
- 格式化后
- --------------------------
- 2012-09-22 090815972656000
<3>单据流水号函数(没加单别)
- #单据编号为l_slip
- FUNCTION s_auno(p_date)
- DEFINE l_slip VARCHAR(8), #单别
- t_slip VARCHAR(8), #单号
- p_date DATE, #日期参数,根据日期得到年月
- l_date VARCHAR(6),
- l_yymm VARCHAR(4),
- l_mxno VARCHAR(8),
- t_mxno VARCHAR(4),
- t_s VARCHAR(4)
- WHENEVER ERROR CONTINUE
- MESSAGE "单据取号中..."
- #--编号前四位(单据年月号)--
- #--如果日期没有输入则以当前日期为准
- IF cl_null(p_date) THEN
- LET l_date = g_today USING 'YYYYMM'
- ELSE
- LET l_date = p_date USING 'YYYYMM'
- END IF
- #--截取年月的后四位--
- LET l_yymm = l_date[3,6]
- LET t_slip[1,4] = l_yymm
- #--编号后四位(单据流水号)--
- LET t_s = t_slip[1,4]
- SELECT MAX(编号) INTO l_mxno FROM 表
- WHERE 编号[1,4] = t_s
- CASE WHEN l_mxno IS NULL LET t_slip[5,8] = '0001'
- WHEN l_mxno IS NOT NULL LET t_slip[5,8] = (t_mxno+1) USING '&&&&'
- OTHERWISE CALL cl_err('',SQLCA.sqlcode,1)
- END CASE
- LET t_mxno = l_mxno[5,8]
- #--编号OK--
- MESSAGE "已经产生单据编号:",t_slip
- LET l_slip = t_slip
- RETURN l_slip
- END FUNCTION