国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

銀企互聯(lián)中對賬文件動態(tài)生成機(jī)制

2014-08-14 18:36彭秋生
電腦知識與技術(shù) 2014年19期
關(guān)鍵詞:動態(tài)生成

彭秋生

摘要:針對銀企互聯(lián)中格式多樣的對賬文件,該文提出了兩種動態(tài)文件生成機(jī)制。一種是基于結(jié)構(gòu)體的動態(tài)文件生成機(jī)制,它利用了C語言中的結(jié)構(gòu)體成員內(nèi)存連續(xù)的原理,適用于對賬明細(xì)數(shù)據(jù)源表固定的情況,但不適合多數(shù)據(jù)表的聯(lián)合處理。另外一種是與動態(tài)SQL結(jié)合的文件生成機(jī)制,該機(jī)制不再局限于同一個數(shù)據(jù)源表,可以多表聯(lián)合查詢處理,同時又具備文件格式靈活配置的優(yōu)點,適應(yīng)范圍更廣,靈活度更高。

關(guān)鍵詞:對賬文件;動態(tài)生成;結(jié)構(gòu)體變更;動態(tài)SQL

中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)19-4368-03

Dynamic Methods of Reconciliation File Generation in Interconnected System between Bank and Company

PENG Qiu-sheng

(Software Development Department,Guangdong Postal Information & Technology Bureau, Guangzhou 510898, China)

Abstract: In the interconnected system between bank and company, there are a variety of formats for reconciliation file. Two dynamic file generation methods were presented to the problem. One is based on the structure variables, whose members have continuous memory address in C language, and is suitable to fixed data source table, but not for the joint processing of multiple data tables. The other is combined with dynamic SQL; this method not only can process multi-table querying, but also have the advantage of flexible configuration of file format. The new method is no longer confined to the fixed data source table, and is suitable to a wider range with more flexibility.

Key words: reconciliation file; dynamic generation; structure variables; dynamic SQL

對賬是指計算機(jī)應(yīng)用系統(tǒng)間對一個清算周期的交易信息進(jìn)行核對,以確認(rèn)交易信息的一致性和正確性的過程。對賬內(nèi)容包括應(yīng)用系統(tǒng)間的總賬核對、總賬與明細(xì)賬核對、明細(xì)賬與明細(xì)賬間的勾對等。通常兩個系統(tǒng)間先進(jìn)行總賬核對,再進(jìn)行明細(xì)賬與明細(xì)賬間的勾對。但是,總賬核對正確并不代表明細(xì)賬核對也正確,反過來,交易明細(xì)如果能一一核對無誤,總賬肯定正確。因此,作為明細(xì)賬核對的基礎(chǔ),對賬明細(xì)文件就顯得重要。

本文主要描述銀企互聯(lián)中的對賬細(xì)細(xì)文件產(chǎn)生機(jī)制。隨著經(jīng)濟(jì)的發(fā)展,越來越多的人傾向于刷卡消費,各類企業(yè)(商戶)收費時也提供了現(xiàn)金、刷卡等多種模式供客戶選擇。刷卡收費時,企業(yè)從收費系統(tǒng)發(fā)起扣款,直接從銀行客戶個人賬戶上扣取應(yīng)收的費用。企業(yè)收費系統(tǒng)與銀行系統(tǒng)之間通過網(wǎng)絡(luò)相連。每天營業(yè)結(jié)束后,銀行系統(tǒng)與企業(yè)收費系統(tǒng)之間通過對賬明細(xì)文件(以下簡稱對賬文件)進(jìn)行賬務(wù)核對。由于客戶賬戶均由銀行管理,銀企互聯(lián)的對賬一般都是以銀行方交易結(jié)果為準(zhǔn)進(jìn)行核對,因此對賬明細(xì)文件也由銀行系統(tǒng)生成。當(dāng)銀行系統(tǒng)互聯(lián)的企業(yè)收費系統(tǒng)逐漸增加,每個收費企業(yè)的對賬文件格式又不一樣時,如何實現(xiàn)對賬明細(xì)文件的統(tǒng)一生成,實現(xiàn)靈活配置化管理,避免重復(fù)開發(fā),是一個值得研究的問題。

1 基于結(jié)構(gòu)體的文件動態(tài)生成機(jī)制

對賬文件中的交易明細(xì)數(shù)據(jù)都保存數(shù)據(jù)庫中,一般情況下,數(shù)據(jù)庫軟件本身不直接進(jìn)行文件操作,需要通過應(yīng)用程序先將數(shù)據(jù)從數(shù)據(jù)庫讀取到出來到內(nèi)存(變量),再從內(nèi)存寫入文件。也就是說,對賬文件的生成主要有兩步:第一步是將對賬文件所需要的數(shù)據(jù)從數(shù)據(jù)庫中讀取出來,第二步是將讀取出來的數(shù)據(jù)按文件要求進(jìn)行格式化?;诮Y(jié)構(gòu)體的動態(tài)配置文件生成機(jī)制就是先將數(shù)據(jù)讀取的結(jié)構(gòu)體變量,再從結(jié)構(gòu)變量將數(shù)據(jù)寫入文件。該機(jī)制實現(xiàn)了從結(jié)構(gòu)體變量寫入文件這一過程的動態(tài)配置。具體文件生成機(jī)制如下:

1) 定義與數(shù)據(jù)庫交易明細(xì)表結(jié)構(gòu)一一對應(yīng)的C語言結(jié)構(gòu)體變量。

2) 從數(shù)據(jù)庫提取對賬文件格式與結(jié)構(gòu)體變量之間對應(yīng)關(guān)系配置。

3) 創(chuàng)建對賬文件,打開文件指針。

4) 從數(shù)據(jù)庫中搜索的交易明細(xì)數(shù)據(jù),循環(huán)對每條明細(xì)進(jìn)行處理:

①將數(shù)據(jù)保存至對應(yīng)的結(jié)構(gòu)體變量;

②根據(jù)文件格式與結(jié)構(gòu)體變量元素對應(yīng)關(guān)系配置,將數(shù)據(jù)從結(jié)構(gòu)體轉(zhuǎn)化成文件格式要求的字符串;

③將轉(zhuǎn)化后的字符串寫入文件。

5) 關(guān)閉保存文件。

由于結(jié)構(gòu)體變量的成員與數(shù)據(jù)庫交易明細(xì)表的字段是一一對應(yīng)的,從數(shù)據(jù)庫中讀取的交易明細(xì)數(shù)據(jù),每個字段的值都會完整地保存到結(jié)構(gòu)體變量中,雖然會有一定的冗余,但至少不會有遺漏,保證了文件生成第一步的實現(xiàn)。接下來是從結(jié)構(gòu)體變量中抽取對賬明細(xì)需要的字段,格式化成字符串。為了解決此問題,考慮從三方面入手,首先,要明確對賬文件需要用到哪些字段,這一點可以通過事先配置好字段名來解決;其次,要把參與對賬的字段對應(yīng)的值準(zhǔn)確地從結(jié)構(gòu)體變量中取出來,這個最困難;最后,將取出來值格式化后拼成字符串,這一點也可以通過配置好格式化串,將取出來的字段值按順序進(jìn)行格式化即可。下面重點分析一下如何把把參與對賬的字段對應(yīng)的值準(zhǔn)確地從結(jié)構(gòu)體變量中取出來。endprint

2 結(jié)構(gòu)體成員的值的通用提取方法

在C語言中,不管是結(jié)構(gòu)體變量還是字符串變量,本質(zhì)上就是系統(tǒng)分配的一小塊內(nèi)存。如果知道內(nèi)存的地址和大小,可以在不知道變量名的情況下,直接將存儲在對應(yīng)內(nèi)存中的變量值取出來。從結(jié)構(gòu)體變量中提取對賬字段的值正是利用這個原理。在C語言中,系統(tǒng)分配給結(jié)構(gòu)體變量的是一塊連續(xù)的內(nèi)存,即變量中各成員的內(nèi)存按順序緊挨在一起。只需要計算出成員的相對地址以及該成員的內(nèi)存長度,就可通過地址將對應(yīng)的字段值取出來,如下列所示:

假設(shè)數(shù)據(jù)庫的對賬明細(xì)表table_tran_dtl有三個字段,其中tran_dt, tran_at 參與對賬:

tran_dt varchar(8), /*交易日期, 8位字符串*/

tran_sq varchar(20), /*交易流水號, 20位字符串*/

tran_at number(15.2) /*交易金額, 15位數(shù)字型,含兩位小數(shù)*/

與該表結(jié)構(gòu)對應(yīng)的結(jié)構(gòu)體變量定義如下:

typedef struct{

char tran_dt[9]; /*相對地址為0,內(nèi)存長度為9個字節(jié)(含結(jié)束符)*/

char tran_sq[21]; /*相對地址為9,內(nèi)存長度為21個字節(jié)*/

double tran_at; /*相對地址為30,內(nèi)存長度為8個字節(jié)*/

}str_table

現(xiàn)在要把參與對賬的tran_dt, tran_at兩個字段的值從結(jié)構(gòu)體變量中取出來,只需要直接通過內(nèi)存拷貝的辦法,即memcpy (存放變量, 變量名+相對地址, 成員占用內(nèi)存長度),如下所示:

memcpy (sTmp, str_table+0, 9); /*取tran_dt*/

memcpy (sTmp, str_table+30, 8); /*取tran_at,取出來后進(jìn)行數(shù)據(jù)類型轉(zhuǎn)化*/

從前面可以看出,提取結(jié)構(gòu)體中成員的值是很簡單的,但前提是要知道成員的相對地址和內(nèi)存大小,而這些都是事先已經(jīng)知道的,可以提前配置在數(shù)據(jù)庫。

3 文件格式與結(jié)構(gòu)體變量映射

從結(jié)構(gòu)體變量中提取對賬文件所需的字段值,需要首先建起結(jié)構(gòu)體成員與對賬字段之間的對應(yīng)的關(guān)系,也就是明確對賬文件需要哪些字段,以及這些字段在C語言內(nèi)存中的相對地址和內(nèi)存大小,具體實現(xiàn)方法如下:

1)定義與數(shù)據(jù)庫交易明細(xì)表結(jié)構(gòu)一一對應(yīng)的C語言結(jié)構(gòu)體變量。

2)計算結(jié)構(gòu)體每個成員在宿主語言中的數(shù)據(jù)類型、相對地址、所占的字節(jié)長度,將計算結(jié)果保存在數(shù)據(jù)庫中。

3)將交易明細(xì)表的字段名與文件域按順序一一對應(yīng),將匹配結(jié)果保存數(shù)據(jù)庫中,作用為對賬文件產(chǎn)生的格式配置信息。

沿用前面的例子,經(jīng)過上面的第1、2步后,數(shù)據(jù)庫會產(chǎn)生如下所示的信息:

表1

[表名\&字段名\&數(shù)據(jù)類型\&長度\&相對地址\&字段說明\&table_tran_dtl\&tran_dt\&char\&9\&0\&交易日期\&table_tran_dtl\&tran_sq\&char\&21\&9\&交易流水\&table_tran_dtl\&tran_at\&double\&8\&30\&交易金額\&]

之所以保存表名是因為產(chǎn)生對賬文件所用的交易明細(xì)表不是固定的,不同的互聯(lián)企業(yè)在銀行系統(tǒng)中可能會對應(yīng)不同的交易明細(xì)表。表中的“長度”是指在縮主語言(C語言)所點的內(nèi)存長度。

由于不是所有的字段都用于產(chǎn)生對賬文件,需要將字段與對賬文件的域建立起映射關(guān)系系,也就是上面所說的第3步,最后產(chǎn)生的格式配置信息如下所示:

表2

[企業(yè)標(biāo)識\&序號\&字段名\&數(shù)據(jù)類型\&長度\&相對地址\&格式化\&字段說明\&M000012\&1\&tran_dt\&char\&9\&0\&%-8s\&交易日期\&M000012\&2\&tran_at\&double\&8\&30\&%015.2f\&交易金額\&]

假設(shè)數(shù)據(jù)庫交易明細(xì)表中的信息如下:

表3

[交易日期\&交易流水\&交易金額\&20140101\&00000000123\&100.2\&20140101\&00000000789\&60.78\&]

那么產(chǎn)生的對賬明細(xì)文件記錄如下:

201401010000000000100.20

201401010000000000060.78

除了上表所描述的格式配置信息外,還可以配置文件域分隔符、文件行是否定長、是否換行、是否有回車符、數(shù)值型數(shù)據(jù)是否進(jìn)行擴(kuò)大或縮小、默認(rèn)值等信息,可以實現(xiàn)對賬文件格式的靈活定制。

4 基于動態(tài)SQL的文件動態(tài)生成機(jī)制

在交易明細(xì)表不變的情況下,基于結(jié)構(gòu)體的動態(tài)文件生成機(jī)制完全能滿足需求,但是,上述機(jī)制也存在不少的缺點,主要有體現(xiàn)在三個方面:1) 需要定義與數(shù)據(jù)庫字段一一對應(yīng)的結(jié)構(gòu)體變量,不能動態(tài)適應(yīng)表結(jié)構(gòu)變化;2) 只能對應(yīng)一個數(shù)據(jù)庫表,不能多表數(shù)據(jù)聯(lián)合處理;大部分情況下,銀行系統(tǒng)產(chǎn)生對賬明細(xì)文件時,通常都會涉及到一個以上的數(shù)據(jù)表。多表數(shù)據(jù)綜合才能產(chǎn)生完整的對賬明細(xì)文件。這個缺陷最為嚴(yán)重。3) 配置過程過于復(fù)雜。

從上述文件生成機(jī)制的處理流程不難看出,造成其使用不夠靈活、配置復(fù)雜的主要原因在于使用了結(jié)構(gòu)體變量和相對地址的方法來獲取各字段的值。新的文件生成機(jī)制必須去掉結(jié)構(gòu)體變量的限制,采用新的數(shù)據(jù)結(jié)構(gòu)來存儲從數(shù)據(jù)表讀取的數(shù)據(jù),以適合各種隨時變化的數(shù)據(jù)記錄。Pro *C動態(tài)SQL中的查詢描述區(qū)恰好能滿足這種要求。endprint

首先,查詢描述區(qū)是一個動態(tài)內(nèi)存結(jié)構(gòu),它根據(jù)查詢語句中字段個數(shù)、字段長度等情況動態(tài)分配存儲空間,完美地解決了原有機(jī)制中結(jié)構(gòu)體變量無法通用的問題;其次,查詢描述符提供了數(shù)組下標(biāo)來訪問不同的字段值,不需要繁瑣的位移計算來定位字段值的地址,簡化了配置;再次,查詢描述區(qū)動態(tài)內(nèi)存能適應(yīng)各種合法的SQL查詢語句,包括多表聯(lián)合查詢、嵌套查詢等。因此,有時候甚至只需要配置一條合法SQL語句即可產(chǎn)生文件。

使用動態(tài)SQL查詢描述區(qū)進(jìn)行查詢處理的操作步驟主要如下:

1)初始化存儲空間:分配查詢描述區(qū) (sqlda結(jié)構(gòu)),為指示變量、查詢字段值分配內(nèi)存等。

2)使用查詢描述區(qū)解析SQL字符串,獲取字段個數(shù)、字段名、字段名長度、數(shù)據(jù)類型、字段值長度、字段是否為空等信息。

3)對查詢描述區(qū)中的每一個字段進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,將oracle數(shù)據(jù)類型轉(zhuǎn)換到C語言數(shù)據(jù)類型,重新設(shè)置字段長度和重新分配內(nèi)存。

4)讀取數(shù)據(jù)記錄至查詢描述區(qū),對查詢描述區(qū)的每一個字段,進(jìn)行格式化后拼接成字黏符串,寫入文件。

5)釋放空間:釋放查詢描述區(qū)、指示變量等內(nèi)存空間。

新機(jī)制在克服原有文件產(chǎn)生機(jī)制缺點的同時,繼承了原來的文件格式靈活配置優(yōu)點,特別是數(shù)據(jù)格式化處理的優(yōu)點。整合后的新文件生成機(jī)制處理流程如下:

1)初始化存儲空間:分配查詢描述區(qū) (sqlda結(jié)構(gòu)),為指示變量、查詢字段值分配內(nèi)存等

2)從配置信息表獲取SQL查詢語句。

3)使用查詢描述區(qū)解析SQL字符串,獲取字段個數(shù)、字段名、字段名長度、數(shù)據(jù)類型、字段值長度、是否為空等信息。

4)從文件格式配置表獲取文件格式配置信息

5)對查詢描述區(qū)中的每一個字段進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,將oracle數(shù)據(jù)類型轉(zhuǎn)換到C語言數(shù)據(jù)類型,重新設(shè)置字段長度和重新分配內(nèi)存。

6) 逐條讀取數(shù)據(jù)記錄至查詢描述區(qū),對每一個字段,根據(jù)配置信息進(jìn)行數(shù)據(jù)格式化處理后,拼接成字符串,寫入對賬明細(xì)文件。

7)釋放空間:釋放查詢描述區(qū)、指示變量等空間。

上面的操作步驟可能需要視情況進(jìn)行不同程度地細(xì)化,如SQL語句重組、動態(tài)加入查詢條件、文件域分隔符追加、數(shù)值型數(shù)據(jù)擴(kuò)大或縮小、默認(rèn)值填充等等。

新的文件生成機(jī)制去掉了繁瑣的位移計算及結(jié)構(gòu)體變量的字段對應(yīng)關(guān)系,此因,配置信息較少,配置操作也簡單多了。只需要配置動態(tài)SQL查詢語句和文件格式信息即可。實際上,新機(jī)制使用的配置信息已全部包含在舊機(jī)制的配置信息中,因此原有機(jī)制的配置信息不需要進(jìn)行任何變化就可拿來配置在新機(jī)制中使用,可以有效地避免數(shù)據(jù)移植風(fēng)險。

5 總結(jié)

本文針對現(xiàn)有的銀企互聯(lián)中多種多樣的對賬文件,提出了兩種動態(tài)文件生成機(jī)制,一種是基于結(jié)構(gòu)體的動態(tài)文件生成機(jī)制,它適用于對賬明細(xì)數(shù)據(jù)源表固定的情況,但不適合多數(shù)據(jù)表的聯(lián)合處理,而且配置復(fù)雜。另外一種動態(tài)文件生成機(jī)制是與動態(tài)SQL結(jié)合起來,不再限制于同一個數(shù)據(jù)源表,可以多表聯(lián)合查詢處理,同時又繼承了文件格式靈活配置的優(yōu)點。與基于結(jié)構(gòu)體的文件生成機(jī)制相比,基于動態(tài)SQL文件生成機(jī)制適應(yīng)范圍更廣,配置化程度更高,而且配置簡單便捷,增強(qiáng)了系統(tǒng)的靈活性和適應(yīng)性,節(jié)約了開發(fā)成本,提高了生產(chǎn)效率,具有一定的現(xiàn)實意義。

參考文獻(xiàn):

[1] 蓋國強(qiáng).深入淺出Oracle—DBA入門、進(jìn)階與診斷案例[M]. 北京:人民郵電出版社, 2006:99-101.

[2] (澳)麥克唐納(Mcdonald,C.)等.精通Oracle PL/SQL [M]. 蔡偉毅,譯.北京:人民郵電出版社, 2009:47-53.

[3] (美)阿拉派蒂(Alapati,S.R). Oracle10g數(shù)據(jù)庫管理藝術(shù)[M]. 鐘鳴,等,譯.北京:人民郵電出版社, 2007:92-93.

[4] 譚浩強(qiáng).C語言程序設(shè)計 [M] . 3版.北京: 清華大學(xué)出版社, 2005:99-101.endprint

首先,查詢描述區(qū)是一個動態(tài)內(nèi)存結(jié)構(gòu),它根據(jù)查詢語句中字段個數(shù)、字段長度等情況動態(tài)分配存儲空間,完美地解決了原有機(jī)制中結(jié)構(gòu)體變量無法通用的問題;其次,查詢描述符提供了數(shù)組下標(biāo)來訪問不同的字段值,不需要繁瑣的位移計算來定位字段值的地址,簡化了配置;再次,查詢描述區(qū)動態(tài)內(nèi)存能適應(yīng)各種合法的SQL查詢語句,包括多表聯(lián)合查詢、嵌套查詢等。因此,有時候甚至只需要配置一條合法SQL語句即可產(chǎn)生文件。

使用動態(tài)SQL查詢描述區(qū)進(jìn)行查詢處理的操作步驟主要如下:

1)初始化存儲空間:分配查詢描述區(qū) (sqlda結(jié)構(gòu)),為指示變量、查詢字段值分配內(nèi)存等。

2)使用查詢描述區(qū)解析SQL字符串,獲取字段個數(shù)、字段名、字段名長度、數(shù)據(jù)類型、字段值長度、字段是否為空等信息。

3)對查詢描述區(qū)中的每一個字段進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,將oracle數(shù)據(jù)類型轉(zhuǎn)換到C語言數(shù)據(jù)類型,重新設(shè)置字段長度和重新分配內(nèi)存。

4)讀取數(shù)據(jù)記錄至查詢描述區(qū),對查詢描述區(qū)的每一個字段,進(jìn)行格式化后拼接成字黏符串,寫入文件。

5)釋放空間:釋放查詢描述區(qū)、指示變量等內(nèi)存空間。

新機(jī)制在克服原有文件產(chǎn)生機(jī)制缺點的同時,繼承了原來的文件格式靈活配置優(yōu)點,特別是數(shù)據(jù)格式化處理的優(yōu)點。整合后的新文件生成機(jī)制處理流程如下:

1)初始化存儲空間:分配查詢描述區(qū) (sqlda結(jié)構(gòu)),為指示變量、查詢字段值分配內(nèi)存等

2)從配置信息表獲取SQL查詢語句。

3)使用查詢描述區(qū)解析SQL字符串,獲取字段個數(shù)、字段名、字段名長度、數(shù)據(jù)類型、字段值長度、是否為空等信息。

4)從文件格式配置表獲取文件格式配置信息

5)對查詢描述區(qū)中的每一個字段進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,將oracle數(shù)據(jù)類型轉(zhuǎn)換到C語言數(shù)據(jù)類型,重新設(shè)置字段長度和重新分配內(nèi)存。

6) 逐條讀取數(shù)據(jù)記錄至查詢描述區(qū),對每一個字段,根據(jù)配置信息進(jìn)行數(shù)據(jù)格式化處理后,拼接成字符串,寫入對賬明細(xì)文件。

7)釋放空間:釋放查詢描述區(qū)、指示變量等空間。

上面的操作步驟可能需要視情況進(jìn)行不同程度地細(xì)化,如SQL語句重組、動態(tài)加入查詢條件、文件域分隔符追加、數(shù)值型數(shù)據(jù)擴(kuò)大或縮小、默認(rèn)值填充等等。

新的文件生成機(jī)制去掉了繁瑣的位移計算及結(jié)構(gòu)體變量的字段對應(yīng)關(guān)系,此因,配置信息較少,配置操作也簡單多了。只需要配置動態(tài)SQL查詢語句和文件格式信息即可。實際上,新機(jī)制使用的配置信息已全部包含在舊機(jī)制的配置信息中,因此原有機(jī)制的配置信息不需要進(jìn)行任何變化就可拿來配置在新機(jī)制中使用,可以有效地避免數(shù)據(jù)移植風(fēng)險。

5 總結(jié)

本文針對現(xiàn)有的銀企互聯(lián)中多種多樣的對賬文件,提出了兩種動態(tài)文件生成機(jī)制,一種是基于結(jié)構(gòu)體的動態(tài)文件生成機(jī)制,它適用于對賬明細(xì)數(shù)據(jù)源表固定的情況,但不適合多數(shù)據(jù)表的聯(lián)合處理,而且配置復(fù)雜。另外一種動態(tài)文件生成機(jī)制是與動態(tài)SQL結(jié)合起來,不再限制于同一個數(shù)據(jù)源表,可以多表聯(lián)合查詢處理,同時又繼承了文件格式靈活配置的優(yōu)點。與基于結(jié)構(gòu)體的文件生成機(jī)制相比,基于動態(tài)SQL文件生成機(jī)制適應(yīng)范圍更廣,配置化程度更高,而且配置簡單便捷,增強(qiáng)了系統(tǒng)的靈活性和適應(yīng)性,節(jié)約了開發(fā)成本,提高了生產(chǎn)效率,具有一定的現(xiàn)實意義。

參考文獻(xiàn):

[1] 蓋國強(qiáng).深入淺出Oracle—DBA入門、進(jìn)階與診斷案例[M]. 北京:人民郵電出版社, 2006:99-101.

[2] (澳)麥克唐納(Mcdonald,C.)等.精通Oracle PL/SQL [M]. 蔡偉毅,譯.北京:人民郵電出版社, 2009:47-53.

[3] (美)阿拉派蒂(Alapati,S.R). Oracle10g數(shù)據(jù)庫管理藝術(shù)[M]. 鐘鳴,等,譯.北京:人民郵電出版社, 2007:92-93.

[4] 譚浩強(qiáng).C語言程序設(shè)計 [M] . 3版.北京: 清華大學(xué)出版社, 2005:99-101.endprint

首先,查詢描述區(qū)是一個動態(tài)內(nèi)存結(jié)構(gòu),它根據(jù)查詢語句中字段個數(shù)、字段長度等情況動態(tài)分配存儲空間,完美地解決了原有機(jī)制中結(jié)構(gòu)體變量無法通用的問題;其次,查詢描述符提供了數(shù)組下標(biāo)來訪問不同的字段值,不需要繁瑣的位移計算來定位字段值的地址,簡化了配置;再次,查詢描述區(qū)動態(tài)內(nèi)存能適應(yīng)各種合法的SQL查詢語句,包括多表聯(lián)合查詢、嵌套查詢等。因此,有時候甚至只需要配置一條合法SQL語句即可產(chǎn)生文件。

使用動態(tài)SQL查詢描述區(qū)進(jìn)行查詢處理的操作步驟主要如下:

1)初始化存儲空間:分配查詢描述區(qū) (sqlda結(jié)構(gòu)),為指示變量、查詢字段值分配內(nèi)存等。

2)使用查詢描述區(qū)解析SQL字符串,獲取字段個數(shù)、字段名、字段名長度、數(shù)據(jù)類型、字段值長度、字段是否為空等信息。

3)對查詢描述區(qū)中的每一個字段進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,將oracle數(shù)據(jù)類型轉(zhuǎn)換到C語言數(shù)據(jù)類型,重新設(shè)置字段長度和重新分配內(nèi)存。

4)讀取數(shù)據(jù)記錄至查詢描述區(qū),對查詢描述區(qū)的每一個字段,進(jìn)行格式化后拼接成字黏符串,寫入文件。

5)釋放空間:釋放查詢描述區(qū)、指示變量等內(nèi)存空間。

新機(jī)制在克服原有文件產(chǎn)生機(jī)制缺點的同時,繼承了原來的文件格式靈活配置優(yōu)點,特別是數(shù)據(jù)格式化處理的優(yōu)點。整合后的新文件生成機(jī)制處理流程如下:

1)初始化存儲空間:分配查詢描述區(qū) (sqlda結(jié)構(gòu)),為指示變量、查詢字段值分配內(nèi)存等

2)從配置信息表獲取SQL查詢語句。

3)使用查詢描述區(qū)解析SQL字符串,獲取字段個數(shù)、字段名、字段名長度、數(shù)據(jù)類型、字段值長度、是否為空等信息。

4)從文件格式配置表獲取文件格式配置信息

5)對查詢描述區(qū)中的每一個字段進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,將oracle數(shù)據(jù)類型轉(zhuǎn)換到C語言數(shù)據(jù)類型,重新設(shè)置字段長度和重新分配內(nèi)存。

6) 逐條讀取數(shù)據(jù)記錄至查詢描述區(qū),對每一個字段,根據(jù)配置信息進(jìn)行數(shù)據(jù)格式化處理后,拼接成字符串,寫入對賬明細(xì)文件。

7)釋放空間:釋放查詢描述區(qū)、指示變量等空間。

上面的操作步驟可能需要視情況進(jìn)行不同程度地細(xì)化,如SQL語句重組、動態(tài)加入查詢條件、文件域分隔符追加、數(shù)值型數(shù)據(jù)擴(kuò)大或縮小、默認(rèn)值填充等等。

新的文件生成機(jī)制去掉了繁瑣的位移計算及結(jié)構(gòu)體變量的字段對應(yīng)關(guān)系,此因,配置信息較少,配置操作也簡單多了。只需要配置動態(tài)SQL查詢語句和文件格式信息即可。實際上,新機(jī)制使用的配置信息已全部包含在舊機(jī)制的配置信息中,因此原有機(jī)制的配置信息不需要進(jìn)行任何變化就可拿來配置在新機(jī)制中使用,可以有效地避免數(shù)據(jù)移植風(fēng)險。

5 總結(jié)

本文針對現(xiàn)有的銀企互聯(lián)中多種多樣的對賬文件,提出了兩種動態(tài)文件生成機(jī)制,一種是基于結(jié)構(gòu)體的動態(tài)文件生成機(jī)制,它適用于對賬明細(xì)數(shù)據(jù)源表固定的情況,但不適合多數(shù)據(jù)表的聯(lián)合處理,而且配置復(fù)雜。另外一種動態(tài)文件生成機(jī)制是與動態(tài)SQL結(jié)合起來,不再限制于同一個數(shù)據(jù)源表,可以多表聯(lián)合查詢處理,同時又繼承了文件格式靈活配置的優(yōu)點。與基于結(jié)構(gòu)體的文件生成機(jī)制相比,基于動態(tài)SQL文件生成機(jī)制適應(yīng)范圍更廣,配置化程度更高,而且配置簡單便捷,增強(qiáng)了系統(tǒng)的靈活性和適應(yīng)性,節(jié)約了開發(fā)成本,提高了生產(chǎn)效率,具有一定的現(xiàn)實意義。

參考文獻(xiàn):

[1] 蓋國強(qiáng).深入淺出Oracle—DBA入門、進(jìn)階與診斷案例[M]. 北京:人民郵電出版社, 2006:99-101.

[2] (澳)麥克唐納(Mcdonald,C.)等.精通Oracle PL/SQL [M]. 蔡偉毅,譯.北京:人民郵電出版社, 2009:47-53.

[3] (美)阿拉派蒂(Alapati,S.R). Oracle10g數(shù)據(jù)庫管理藝術(shù)[M]. 鐘鳴,等,譯.北京:人民郵電出版社, 2007:92-93.

[4] 譚浩強(qiáng).C語言程序設(shè)計 [M] . 3版.北京: 清華大學(xué)出版社, 2005:99-101.endprint

猜你喜歡
動態(tài)生成
動態(tài)課堂 彰顯智慧
美麗的“意外”
珍視動態(tài)生成,優(yōu)化科學(xué)課堂教學(xué)設(shè)計
高效課堂下小學(xué)數(shù)學(xué)課堂動態(tài)生成的研究
基于新課程理念下的語文教學(xué)策略探微
動態(tài)生成 彰顯活力數(shù)學(xué)課堂
動態(tài)生成,彰顯數(shù)學(xué)課堂活力
構(gòu)建動態(tài)生成課堂,凸顯數(shù)學(xué)生命活力
品德課堂“動態(tài)生成”資源的運用策略
問渠那得清如許,為有源頭活水來
连平县| 社会| 锡林郭勒盟| 桃江县| 三门峡市| 乐陵市| 静宁县| 景德镇市| 宝坻区| 东明县| 来凤县| 广南县| 庆城县| 临潭县| 阳原县| 家居| 搜索| 扎鲁特旗| 莆田市| 大洼县| 宿松县| 新巴尔虎右旗| 浏阳市| 瓦房店市| 太原市| 申扎县| 建瓯市| 罗城| 乐至县| 阿鲁科尔沁旗| 聂荣县| 牡丹江市| 福贡县| 高清| 新巴尔虎右旗| 岐山县| 紫云| 云林县| 洱源县| 溆浦县| 广德县|