存储过程生成编号(游标、GOTO等)
2016-09-21 11:27
309 查看
存储过程生成编号(游标、GOTO等)
create or replace procedure PRO_UPDATE_SE_BNUM (in_T1_ID IN T1.T1_ID%TYPE,in_T2_PNUM IN T2.PRJNUM%TYPE) is --更新编号 BUILDNUM_INDEX NUMBER:=0; BUILDNUM_LEN NUMBER; BUILDNUM_ZERO VARCHAR2(10); BUILDNUM_ROWNUM NUMBER:=0; SID T3.ID%TYPE; TEMPNUM T3.T3_PNUM%TYPE; TEMP_FLAG NUMBER:=0;--标志位 0 1 CURSOR SINGLE_CUR IS SELECT S.ID,S.T3_PNUM FROM T3 S WHERE S.T1_ID = in_T1_ID ORDER BY TO_NUMBER(S.ID); begin OPEN SINGLE_CUR; FETCH SINGLE_CUR INTO SID,TEMPNUM; LOOP EXIT WHEN NOT SINGLE_CUR%FOUND; SELECT (3-LENGTH(TO_CHAR(BUILDNUM_INDEX+1))) INTO BUILDNUM_LEN FROM DUAL; WHILE BUILDNUM_LEN>0 LOOP BUILDNUM_ZERO := BUILDNUM_ZERO || '0'; BUILDNUM_LEN := BUILDNUM_LEN - 1; END LOOP; <<doBUILDNUM>> --循环点 IF TEMP_FLAG = 0 THEN BUILDNUM_INDEX := BUILDNUM_INDEX + 1; SELECT count(1) INTO BUILDNUM_ROWNUM FROM T3 S WHERE S.T3_PNUM = (in_T2_PNUM||'-'||BUILDNUM_ZERO||BUILDNUM_INDEX); IF BUILDNUM_ROWNUM > 0 THEN GOTO doBUILDNUM; ELSE TEMP_FLAG := 1; END IF; END IF; IF LENGTH(TEMPNUM) < 10 OR LENGTH(TEMPNUM) IS NULL THEN TEMP_FLAG := 0; UPDATE T3 SET T3_PNUM=(in_T2_PNUM||'-'||BUILDNUM_ZERO||BUILDNUM_INDEX) WHERE ID = SID; COMMIT; END IF; BUILDNUM_ZERO := ''; BUILDNUM_ROWNUM :=0; FETCH SINGLE_CUR INTO SID,TEMPNUM; END LOOP; CLOSE SINGLE_CUR; Exception When others then Rollback; Dbms_Output.put_line(Sqlerrm); end PRO_UPDATE_SE_BNUM;
相关文章推荐
- 利用SQL存储过程生成程序编号的一种方法(转)
- 利用SQL存储过程生成程序编号的一种方法
- 自动为指定表的指定字段生成编号的存储过程
- 一个MSSql的存储过程---生成编码,形如HEAD20060512000001;(头+日期+6位递增整数)后面为六位,每新的一年编号重新归0
- Oracle生成单据编号存储过程的实例代码
- 自动生成订单编号存储过程
- 自动生成人才编号的存储过程
- 生成唯一编号(序列号)--sql存储过程
- 利用SQL存储过程生成程序编号的一种方法
- Oracle 生成单据编号存储过程
- 好久没来了。共享一个自动生成编号的存储过程
- SQL SERVER 2008存储过程生成编号,JDBC调用
- 存储过程的作用是自动生成编号
- 利用SQL存储过程生成程序编号的一种方法
- 利用SQL存储过程生成程序编号的一种方法
- 简单的生成编号的存储过程
- 存储过程DIY3----游标中可以使用子查询:
- (转)根据表中数据生成insert语句的存储过程(另一种方法)
- 直接从SQL语句问题贴子数据建表并生成建表语句的存储过程
- 使用CodeSmith为一个ORACLE中的表生成存储过程失败