• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

      彭秋生

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

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

      中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      typedef struct{

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

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

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

      }str_table

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

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

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

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

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

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

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

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

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

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

      表1

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

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

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

      表2

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

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

      表3

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

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

      201401010000000000100.20

      201401010000000000060.78

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      5 總結(jié)

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

      參考文獻(xiàn):

      [1] 蓋國(guó)強(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ù)庫(kù)管理藝術(shù)[M]. 鐘鳴,等,譯.北京:人民郵電出版社, 2007:92-93.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      5 總結(jié)

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

      參考文獻(xiàn):

      [1] 蓋國(guó)強(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ù)庫(kù)管理藝術(shù)[M]. 鐘鳴,等,譯.北京:人民郵電出版社, 2007:92-93.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      5 總結(jié)

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

      參考文獻(xiàn):

      [1] 蓋國(guó)強(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ù)庫(kù)管理藝術(shù)[M]. 鐘鳴,等,譯.北京:人民郵電出版社, 2007:92-93.

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

      猜你喜歡
      動(dòng)態(tài)生成
      動(dòng)態(tài)課堂 彰顯智慧
      美麗的“意外”
      珍視動(dòng)態(tài)生成,優(yōu)化科學(xué)課堂教學(xué)設(shè)計(jì)
      高效課堂下小學(xué)數(shù)學(xué)課堂動(dòng)態(tài)生成的研究
      基于新課程理念下的語(yǔ)文教學(xué)策略探微
      動(dòng)態(tài)生成 彰顯活力數(shù)學(xué)課堂
      動(dòng)態(tài)生成,彰顯數(shù)學(xué)課堂活力
      構(gòu)建動(dòng)態(tài)生成課堂,凸顯數(shù)學(xué)生命活力
      品德課堂“動(dòng)態(tài)生成”資源的運(yùn)用策略
      問渠那得清如許,為有源頭活水來(lái)
      栖霞市| 温宿县| 通州市| 泾阳县| 靖州| 双鸭山市| 贺兰县| 临桂县| 海口市| 呼伦贝尔市| 维西| 泾川县| 安龙县| 桓台县| 文化| 柯坪县| 陆丰市| 大城县| 扶余县| 黔江区| 新郑市| 遂宁市| 晋江市| 灵宝市| 涞水县| 广西| 广东省| 乡宁县| 保定市| 襄汾县| 汉阴县| 华蓥市| 开化县| 西吉县| 遂川县| 镶黄旗| 城市| 五家渠市| 白银市| 类乌齐县| 延长县|