--解决查询事务无法执行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;
--反写当前序列号,确保每次都是递增 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;
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号更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址