--存储过程实现流水号 create or replace procedure cux_get_serial_number(p_model_name in varchar2, --模块 参数1 p_start_no in varchar2, --前缀 参数2 p_length in number, --得到流水号长度 参数3 p_y_n in varchar2, --是否显示模块 p_separator in varchar2 DEFAULT null, --分隔符 x_serial_no out varchar2) is v_result varchar2(100) := ''; --结果 变量1 v_current_no varchar2(100) := ''; --当前值 变量2 v_num number := 0; --补值 变量3 v_start_no varchar2(100); --前缀 变量4 v_rowid varchar2(100); --要更新行的rowid 变量4 v_yyyy varchar2(100); --年 v_mm varchar2(100); --月 v_dd varchar2(100); --日 v_serial_num number; --流水号 v_curr_num varchar2(100); begin v_yyyy := to_char(sysdate, 'yyyy'); v_mm := to_char(sysdate, 'mm'); v_dd := to_char(sysdate, 'dd'); --获取流水号前缀 v_start_no := p_start_no; --参数值赋给变量 select max(ces.current_no) into v_serial_num from cux.cux_ebs_system_no ces where ces.module_name = p_model_name and ces.start_no = p_start_no --得到类型与前缀相同值的数量,主要用于判断是否产生过流水号 and ces.yyyy = v_yyyy and ces.mm = v_mm and ces.dd = v_dd; --判断是否有资料 没有则产生初始值插入库中 --没有产生过 if v_serial_num is null then --得到当前日期起始流水号 --得到p_length长的0001流水号 v_current_no := lpad('1', p_length, '0'); v_curr_num := v_current_no; insert into cux.cux_ebs_system_no (module_name, start_no, yyyy, mm, dd, current_no, create_date) values (p_model_name, p_start_no, v_yyyy, v_mm, v_dd, v_current_no, sysdate); else --当前日期已经产生过流水号,取最大流水号+1 --v_curr_num := v_serial_num + 1; v_curr_num := lpad(v_serial_num + 1, p_length, '0'); update cux.cux_ebs_system_no ces set ces.current_no = v_curr_num, ces.last_update_date = sysdate where ces.module_name = p_model_name and ces.start_no = p_start_no and ces.yyyy = v_yyyy and ces.mm = v_mm and ces.dd = v_dd; end if; commit; if p_y_n = 'Y' then if p_separator is null then x_serial_no := p_model_name || p_start_no || v_yyyy || v_mm || v_dd || v_curr_num; else x_serial_no := p_model_name || p_start_no || p_separator || v_yyyy || v_mm || v_dd || v_curr_num; end if; elsif p_y_n = 'N' then if p_separator is null then x_serial_no := p_start_no || v_yyyy || v_mm || v_dd || v_curr_num; else x_serial_no := p_start_no || p_separator || v_yyyy || v_mm || v_dd || v_curr_num; end if; end if; end; -----表结构 -- Create table create table CUX.CUX_EBS_SYSTEM_NO ( module_name VARCHAR2(100), start_no VARCHAR2(100), yyyy VARCHAR2(100), mm VARCHAR2(100), dd VARCHAR2(100), current_no NUMBER, create_date DATE, last_update_date DATE ) tablespace APPS_TS_TX_DATA pctfree 10 initrans 1 maxtrans 255 storage ( initial 128K next 128K minextents 1 maxextents unlimited pctincrease 0 ); -- Add comments to the table comment on table CUX.CUX_EBS_SYSTEM_NO is 'EBS模块对应生成的流水号'; -- Add comments to the columns comment on column CUX.CUX_EBS_SYSTEM_NO.module_name is '模块例如(PO,WIP)'; comment on column CUX.CUX_EBS_SYSTEM_NO.start_no is '流水号开始前缀'; comment on column CUX.CUX_EBS_SYSTEM_NO.yyyy is '年'; comment on column CUX.CUX_EBS_SYSTEM_NO.mm is '月'; comment on column CUX.CUX_EBS_SYSTEM_NO.dd is '日'; comment on column CUX.CUX_EBS_SYSTEM_NO.current_no is '流水号'; -----end--- ----function 方式实现 create or replace function cux_get_serial_number_function(p_model_name in varchar2, --模块 参数1 p_start_no in varchar2, --前缀 参数2 p_length in number, --得到流水号长度 参数3 p_y_n in varchar2, --是否显示模块 p_separator in varchar2 DEFAULT null --分隔符 ) return varchar2 is x_result varchar2(200); pragma autonomous_transaction; begin cux_get_serial_number(p_model_name, p_start_no, p_length, p_y_n, p_separator, x_result); return x_result; end;
标签:no,--,生成,流水号,varchar2,后台,CUX,start From: https://www.cnblogs.com/ivenlin/p/18081569