項(xiàng)目中需要使用到按規(guī)則生成序列號(hào),開(kāi)始的解決辦法是根據(jù)條件取得最大ID號(hào)進(jìn)行分解+1再合并的解決方案,后來(lái)發(fā)現(xiàn)如果兩個(gè)客戶同時(shí)操作的時(shí)候出現(xiàn)問(wèn)題:添加的時(shí)候ID已經(jīng)存在,原因是:A用戶在訪問(wèn)取得第MAX(N)記錄deID,但是還沒(méi)有進(jìn)行增加操作,這時(shí),B用戶也取得第MAX(N)記錄deID,這是A進(jìn)行添加操作同時(shí),B也同時(shí)進(jìn)行添加操作,那么B用戶就會(huì)保存失敗,我們開(kāi)始的時(shí)候采用的解決方案是:(枷鎖)在程序的方法上枷鎖,采用單線程操作,實(shí)施結(jié)果:失敗,客戶等待時(shí)間長(zhǎng),后來(lái)我們采用綁定數(shù)據(jù)庫(kù)的方案:編寫(xiě)存儲(chǔ)過(guò)程,雖然綁定不怎么方便,但是執(zhí)行效率要快很多。由于時(shí)間問(wèn)題,沒(méi)有做序列自動(dòng)創(chuàng)建功能,歡迎各位大蝦進(jìn)行指點(diǎn)和評(píng)論,我們最后的方案如下: 在oracle里面編寫(xiě)了2個(gè)基本做基本處理的自定義函數(shù): create or replace function fun_config_glide_num(p_class varchar2,
p_column varchar2) /** * 流水賬號(hào)配置_oracle * author:ai bo 2010.02.23 * p_table varchar2 表名 * p_website varchar2 自定義開(kāi)頭字符 */ return varchar2 as v_curId integer; -- v_seq varchar2(50); -- v_seq_value number; v_sql varchar2(200); v_ret number(3); v_num varchar2(20); p_table varchar2(30); p_website varchar2(20); p_length varchar2(3); t_class varchar2(20); t_column varchar2(20); begin t_class := p_class; t_column := p_column; v_sql := 'SELECT lszh_tname,lszh_mark,lszh_num FROM lszh_table WHERE lszh_cname = ' 乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9
|