postgre 數據庫生成有序編號


最近開發,遇到一個比較棘手的問題,就是使用postgre數據庫生成一個以天為單位的有序的編號,最開始看到的時候,上網百度了一堆,但是沒有找到合適的,沒辦法,只能自己動手寫了。

函數如下:

CREATE OR REPLACE FUNCTION "public"."generate_code"("num" varchar)
  RETURNS "pg_catalog"."varchar" AS $BODY$
DECLARE  --聲明變量
curr_max_code VARCHAR; 
new_no VARCHAR;
vmodule varchar;
new_date VARCHAR;
new_code VARCHAR;
curr_max_code_no VARCHAR;
begin
 new_date := to_char(CURRENT_DATE,'yyyyMMdd');  --格式化當前日期為:yyyyMMdd
 vmodule := substr(num,0,3); --根據傳入的參數,進行截取
  EXECUTE 'select max(code) from sys_code where  module = ''' ||  num || '''  ' INTO curr_max_code; --執行
  curr_max_code_no := substr(curr_max_code,11,5); --截取生成的編號

  IF curr_max_code is NULL THEN  
    new_no := '10001';
  else
    new_no := LPAD(cast(cast(curr_max_code_no as bigint)+1 as varchar),5,'0');
	 
  END IF;
  new_code := vmodule || new_date || new_no;
  EXECUTE 'insert into public.sys_code (code,module) values (''' || new_code || ''',''' || num || ''')'; 
  return new_code;
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

上述函數中看到的“sys_code”是創建存儲編號的表

表結構如下

DROP TABLE IF EXISTS "public"."sys_code";
CREATE TABLE "public"."sys_code" (
  "code" varchar(100) COLLATE "pg_catalog"."default" NOT NULL,
  "module" varchar(100) COLLATE "pg_catalog"."default"
);
module存編號前綴,code存當前編號。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM