一个Oracle的存储过程生成人员编码,形如200600001;年份+5位递增整数,每新的一年编号重新归0
这个第一次做,不会,能写详细一点吗?
DECLARE
N_SEQ NUMBER := 1;
V_SEQ VARCHAR2(5);
D_START_DATE DATE := DATE'2016-12-25';
D_END_DATE DATE := DATE'2017-01-17';
D_TMP_DATE DATE := D_START_DATE;
BEGIN
WHILE D_TMP_DATE <= D_END_DATE LOOP
V_SEQ := LPAD(N_SEQ, 5, '0');
DBMS_OUTPUT.PUT_LINE(TO_CHAR(D_TMP_DATE, 'YYYY') || V_SEQ);
IF TO_CHAR(D_TMP_DATE, 'YYYY') <> TO_CHAR(D_TMP_DATE + 1, 'YYYY') THEN
N_SEQ := 1;
ELSE
N_SEQ := N_SEQ + 1;
END IF;
D_TMP_DATE := D_TMP_DATE + 1;
END LOOP;
END;
弄了个例子给你
我要显示在表xyjbxx,写在哪里呢
@君九彧: 我这个例子不是生成了员工编号嘛,DBMS_OUTPUT.PUT_LINE(TO_CHAR(D_TMP_DATE, 'YYYY') || V_SEQ);这段代码就是最终的生成结果,你先用代码看看效果,然后再改造为你需要的功能
@Antoni: 就是这个效果,1.但是我需要的是2017年以前的,2.我怎么把它关联到我的表上呢?
谢谢
@Antoni: 我这个时间是人员自带的时间,字段名是tbsj,这里要怎么改呢
@君九彧: 1、第一个问题,看来你是要修复历史数据
2、你的业务表可以根据TBSJ,先进行排序,TBSJ最早的优先处理(用游标),把我的代码移植过去
@Antoni:
CREATE OR REPLACE PROCEDURE LOG_SUCCESS (module in varchar2, dscr in varchar2)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
begin
insert into fs_log_syslog(opid,operatetime,result,month,memo,operatetype,moduleid)
values(seq_fs_log.nextval,sysdate,'1',to_char(sysdate,'MM'),dscr,'',module);
commit;
exception when others then
rollback;
end LOG_SUCCESS;
我的格式类似这样的,你这个我怎么复制?