(一)简单流水号ID自增
FUNCTION Get_Id_ () RETURN VARCHAR2
IS
id_ VARCHAR2(200);
--- 新建游标,查询出表ID最大流水号
CURSOR get_max_no IS
SELECT nvl(max(to_number(id)),0) + 1
FROM test_table;
BEGIN
--- 打开游标
OPEN get_max_no;
--- 将值赋给定义的id变量
FETCH get_max_no INTO id_;
--- 关闭游标
CLOSE get_max_no;
--- 查询id值,如果不满四位则前面已0补齐
id_ := lpad(''||id_,4,'0');
--- 返出值
RETURN id_;
END Get_Id_;
(二)有编码规则拼接成的ID自增
FUNCTION Get_Id_ (
proj_no_ IN VARCHAR2,
commodity_code_locator_ IN VARCHAR2) RETURN VARCHAR2
IS
id_ VARCHAR2(200);
--- 新建游标,根据项目号和定位码查询出表ID最大流水号
CURSOR get_max_no IS
--- 首先通过substr截取到dcf_code最后四位的值,再转换为number,然后+1 。
SELECT nvl(max(to_number(substr(dcf_code,-4))),0) + 1
FROM test_table
WHERE proj_no = proj_no_
AND commodity_code_locator = commodity_code_locator_;
BEGIN
--- 打开游标
OPEN get_max_no;
--- 将值赋给定义的id变量
FETCH get_max_no INTO id_;
--- 关闭游标
CLOSE get_max_no;
--- 查询id数,如果不满四位则前面已0补齐
id_ := lpad(''||id_,4,'0');
--- 返出值
RETURN id_;
END Get_Id_;
写好方法后,在insert之前给id按编码规则重新拼接赋值,列如:
id_ :=Get_Id_();
id := '项目号'||‘-’||‘定位码’||‘-’||id_
(三)按日期生成ID自增
FUNCTION Get_Id_ (
proj_no_ IN VARCHAR2) RETURN VARCHAR2
IS
id_ VARCHAR2(200);
--- 新建游标,根据项目号查询出表ID最大流水号
CURSOR get_max_no IS
--- 首先通过substr截取到rectification_no最后三位的值,然后+1 。
SELECT nvl(max(substr(rectification_no,-3)),0) + 1
FROM test_table
--- rectification_no是不同值拼接而成,现在截取到‘-’后面六位值,判断是否等于当月。
WHERE SUBSTR(rectification_no,INSTR(rectification_no,'-',1,5)+1 ,6) = to_char(sysdate,'YYYYMM')
AND proj_no = proj_no_;
BEGIN
--- 打开游标
OPEN get_max_no;
--- 将值赋给定义的id变量
FETCH get_max_no INTO id_;
--- 关闭游标
CLOSE get_max_no;
--- 查询id数,如果不满三位则前面已0补齐
id_ := lpad(''||id_,3,'0');
RETURN id_;
--- 返出值
END Get_Id_;
写好方法后,在insert之前给id按编码规则重新拼接赋值,列如:
id_ :=Get_Id_(proj_id);
id := '项目号'||‘-’||‘定位码’||‘-’||‘通讯代码’||‘-’||‘A’||‘-’||‘唯一码’||‘-’||to_char(SYSDATE,'YYYYMM')|| id_;