1、在新增后取得最大流水號并賦值到資料視窗
2、新增記錄保存到資料庫后,更新當前最大流水號
詳情:我創建了個函式:wf_getmaxno() 我需要表現的某個欄位的形式為“BG.10001”(當資料庫中沒記錄時的初始數值)
如果表達意思不清楚的話我再說詳細點,高手指教下啊
uj5u.com熱心網友回復:
沒看明白。。。uj5u.com熱心網友回復:
strig s_dm ,s_maxdm
select max(id) into :s_dm from table ;
if sqlca.sqlcode = 100 then
s_maxdm = left(s_dm,3)+ string(integer(right(s_dm,5))+1)
else
s_maxdm = “BG.10001”
end if
return s_maxdm
uj5u.com熱心網友回復:
寫反了strig s_dm ,s_maxdm
select max(id) into :s_dm from table ;
if sqlca.sqlcode = 100 then //空表
s_maxdm = “BG.10001”
else
s_maxdm = left(s_dm,3)+ string(integer(right(s_dm,5))+1)
end if
return s_maxdm
uj5u.com熱心網友回復:
以前我寫過取得最大值并自動賦值“HT20080708001”string ls_no
string ls_maxno
string ls_like
string ls_3
ls_like = string(wi_nvo_server.uf_servertime(),"yyyymmdd")
ls_like = "HT" + ls_like + "%"
select max(hetonghao) into :ls_maxno
from hetongh where hetonghao like :ls_like;
if isnull(ls_maxno) then ls_maxno = ""
ls_maxno = trim(ls_maxno)
if ls_maxno = "" then
ls_no = left(ls_like,10) + "001"
else
ls_3 = right(ls_maxno,3)
ls_no = left(ls_like,10) + string(integer(ls_3) + 1,"000")
end if
return ls_no
但是要為BG.10001不會咯 呵呵 剛學不久 見諒
uj5u.com熱心網友回復:
你的自定義引數是不是?uj5u.com熱心網友回復:
string ls_nostring ls_maxno
string ls_like
string ls_3
ls_like = "BG.1%"
select max(hetonghao) into :ls_maxno
from hetongh where hetonghao like :ls_like;
if isnull(ls_maxno) then ls_maxno = ""
ls_maxno = trim(ls_maxno)
if ls_maxno = "" then
ls_no = "BG.10001"
else
ls_3 = right(ls_maxno,4)
ls_no = 'BG.1'+string(integer(ls_3) + 1,"0000")
end if
return ls_no
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
如果是主鍵建議直接用類似資料庫的序列來處理就好了,直接去取最大值又不控制資料庫的隔離級別很容易并發導致重號的。
uj5u.com熱心網友回復:
使用序列 是個不錯的選擇uj5u.com熱心網友回復:
一般不會這么做,因為在多用戶模式下,取得流水號和更新流水號之間會有別的操作,可能會造成多個用戶取得相同的流水號。
一般有下面幾種辦法實作id號的生成:
1、sybase的identity欄位,oracle的sequence,能夠自動生成流水號,而且自動增量,而且還是原子操作,不怕重號
2、使用guid,不需要維護最大流水號,支持分布式的環境
3、自建最大流水號表,自定義增量演算法,把流水號增量和回傳做到一個存盤程序里,在資料保存時呼叫,必須在一個事務內完成
uj5u.com熱心網友回復:
string ls_1,ls_nointeger li_1
ls_1='BG.'
select max(id) into :ls_no from table where left(id,3)=:ls_1 using sqlca;
if sqlca.sqlcode <> 0 then
ls_no ='BG.10001'
else
ls_no = ls_1+string(long(right( ls_no,len(ls_no) - pos(ls_no,'.'))) + 1)
end if
return ls_no
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/106245.html
標籤:腳本語言
