Oracle流水號生成函式

2021-07-26 15:52:30 字數 1851 閱讀 9212

使用oracle函式在建立表的時候自動加入生成的流水號

生成格式是:字首+年月日+00000

直接上**加注釋

create or replace function fn_no_make(v_type       varchar2,

v_number_col varchar2,

v_table_name varchar2)

/* * 引數說明:

* v_type: 編碼字首

* v_number_col:編碼所在列名

* v_table_name:編碼所在表名

*/return varchar2 is

v_old_no varchar2(50); --原編碼

v_old_num number; -- 原編碼後五位編號

v_new_num varchar2(10); --新編碼後五位編號

v_maked_no varchar2(50); --新編碼

v_date_no varchar2(20); --當前日期編號

v_sql varchar2(4000);

begin

-- 找出其中最大的

v_sql := 'select max(' || v_number_col || ') from ' || v_table_name;

execute immediate v_sql

into v_old_no;

-- 將當前日期取出

v_sql := 'select substr(to_char(sysdate,''yyyymmdd''), 1, 8) as date_no from dual';

execute immediate v_sql

into v_date_no;

-- 擷取日期和新的日期

v_old_num := to_number(substr(v_old_no, 13, 5));

-- 增加流水號數量

v_new_num := to_char(v_old_num + 1);

-- 填充流水號為五位數

while length(v_new_num) < 5

loop

v_new_num := '0' || v_new_num;

endloop;

/** 如果日期相同或者當前表為空

* 執行流水號為第乙個00001

* 否則將上面計算好的流水號加入到新的流水號裡面

*/if v_old_no is

null

or substr(v_old_no, 4, 8) <> v_date_no

then

v_maked_no := v_type || v_date_no || '00001';

else

v_maked_no := v_type || v_date_no || v_new_num;

endif; -- 最後返回新的流水號

return(v_maked_no);

exception

when

others

then

dbms_output.put_line(sqlerrm);

end fn_no_make;

應用測試

-- 插入表主鍵和流水號

insert

into test_a values(sys_guid(),fn_no_make(901,'serial_number','test_a'));

Oracle 生成流水號函式

code sql code create or replace function fn no make v type varchar2,v number col varchar2,v table name varchar2 編碼示例 djjt12090600003 author rock.et cr...

Oracle生成流水號函式

1 日期範圍上 smalldatetime的有效時間範圍1900 1 1 2079 6 6datetime的有效時間範圍1753 1 1 9999 12 312 精準度上 smalldatetime只精準到分,而datetime則可精準到3位的毫秒。3 儲存空間上 smalldatetime占用4個...

Oracle 生成流水號

輔助表 rul sequence 表中資料如圖 輔助儲存過程 proc getseqence create or replace procedure proc getseqence seqcode in varchar2,returnnum out varchar2,messagecode out ...