使用postgre的存储过程生成自定义订单号
CREATE OR REPLACE FUNCTION get_order_no(tname VARCHAR,cname VARCHAR,cprefix VARCHAR)
RETURNS VARCHAR
AS
$$
DECLARE
--当前的订单号
now_order_no VARCHAR;
--存储当前日期
now_day VARCHAR;
--新的订单号
new_order_no VARCHAR;
--旧的时间
old_date VARCHAR;
--旧的订单编号
old_order_no BIGINT;
--新的订单编号
order_no VARCHAR;
BEGIN
EXECUTE 'SELECT MAX ('||cname||') FROM '||tname||' WHERE booking_time > CURRENT_DATE' INTO now_order_no;
--通过截取 获得订单号中的日期
old_date = substr(now_order_no,1,8);
--通过截取获得旧的订单编号
old_order_no = substr(now_order_no,10,5);
--当前日期
now_day = to_char(CURRENT_DATE,'yyyyMMdd');
--如果没有获得大于当前日期的订单 则从新插入
IF now_order_no is NULL THEN
new_order_no = cprefix || now_day || '00001';
RETURN new_order_no;
--如果 查询的时间 等于当前时间
ELSEIF old_date != now_day THEN
new_order_no = cprefix || now_day || '00001';
RETURN new_order_no;
ELSE
order_no= cast(old_order_no+1 as varchar);
order_no = LPAD(order_no,5,'0');
new_order_no = cprefix || now_day || order_no;
RETURN new_order_no;
END IF;
END;
$$
LANGUAGE 'plpgsql' VOLATILE;
CREATE OR REPLACE FUNCTION get_order_no(tname VARCHAR,cname VARCHAR,cprefix VARCHAR)
RETURNS VARCHAR
AS
$$
DECLARE
--当前的订单号
now_order_no VARCHAR;
--存储当前日期
now_day VARCHAR;
--新的订单号
new_order_no VARCHAR;
--旧的时间
old_date VARCHAR;
--旧的订单编号
old_order_no BIGINT;
--新的订单编号
order_no VARCHAR;
BEGIN
EXECUTE 'SELECT MAX ('||cname||') FROM '||tname||' WHERE booking_time > CURRENT_DATE' INTO now_order_no;
--通过截取 获得订单号中的日期
old_date = substr(now_order_no,1,8);
--通过截取获得旧的订单编号
old_order_no = substr(now_order_no,10,5);
--当前日期
now_day = to_char(CURRENT_DATE,'yyyyMMdd');
--如果没有获得大于当前日期的订单 则从新插入
IF now_order_no is NULL THEN
new_order_no = cprefix || now_day || '00001';
RETURN new_order_no;
--如果 查询的时间 等于当前时间
ELSEIF old_date != now_day THEN
new_order_no = cprefix || now_day || '00001';
RETURN new_order_no;
ELSE
order_no= cast(old_order_no+1 as varchar);
order_no = LPAD(order_no,5,'0');
new_order_no = cprefix || now_day || order_no;
RETURN new_order_no;
END IF;
END;
$$
LANGUAGE 'plpgsql' VOLATILE;