專利名稱::帶有前處理和后處理的數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng)及方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及數(shù)據(jù)庫(kù)技術(shù),更具體地涉及帶有前處理和后處理的數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng)及方法。
背景技術(shù):
:企業(yè)才艮表的lt據(jù)來(lái)源與業(yè)務(wù)邏輯日益復(fù)雜,^爭(zhēng)業(yè)務(wù)系統(tǒng)的查詢需求已經(jīng)十分普遍,而中國(guó)式報(bào)表由于國(guó)企監(jiān)管機(jī)制的要求以及長(zhǎng)年使用紙質(zhì)報(bào)表沿襲下來(lái)的特點(diǎn),數(shù)據(jù)難以通過(guò)單個(gè)的數(shù)據(jù)庫(kù)查詢SQL(StructuredQueryLanguage,結(jié)構(gòu)4匕查詢i吾言)解決,甚至4艮多情況沒(méi)有業(yè)務(wù)算法的介入根本組織不出用戶要求的數(shù)據(jù)。在大量項(xiàng)目中,上述查詢需求已經(jīng)遠(yuǎn)遠(yuǎn)超出了報(bào)表實(shí)施人員的數(shù)據(jù)庫(kù)技術(shù)能力。本方案所述復(fù)合查詢技術(shù),是基于已建立好的數(shù)據(jù)庫(kù)查詢模型繼續(xù)建立新查詢模型、直至"模型執(zhí)行后的查詢結(jié)果集"充分接近需求的一種技術(shù),其模型內(nèi)容包含但不限于數(shù)據(jù)庫(kù)的查詢SQL?,F(xiàn)有同類技術(shù)方案主要存在的問(wèn)題包括利用大量嵌套的子查詢實(shí)現(xiàn)復(fù)合查詢,編寫(xiě)纟支術(shù)難度大,可讀性、可維護(hù)性都纟艮低;4吏用^爭(zhēng)態(tài)查詢或硬—代碼解決,不能滿足用戶查詢凄t據(jù)的靈活交互及個(gè)性化需求,實(shí)施難以變更代碼;完全依賴SQL、存儲(chǔ)過(guò)程以及臨時(shí)表等數(shù)據(jù)庫(kù)手,殳,無(wú)法調(diào)用禾呈序級(jí)加工算法;難以解決一個(gè)報(bào)表入口展現(xiàn)多張不同報(bào)表的要求;脫離建模思路,可復(fù)用性和可移植性差;缺少臨時(shí)數(shù)據(jù)庫(kù)結(jié)構(gòu)的生命周期管理,執(zhí)行效率低,數(shù)據(jù)庫(kù)壓力大。因此,存在著對(duì)^:據(jù)庫(kù)復(fù)合查詢系統(tǒng)及方法的需求。
發(fā)明內(nèi)容為了解決上述技術(shù)問(wèn)題至少之一,本發(fā)明提供了一種數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng),包括查詢模型建立裝置,用于建立查詢模型,其中所述查詢一莫型包括查詢參ft;查詢參#:處理裝置,用于將所述查詢參凄史i殳置到主查詢的引用處,并分發(fā)《會(huì)所述主查詢引用的中間查詢;結(jié)構(gòu)化查詢語(yǔ)句生成與臨時(shí)結(jié)構(gòu)處理裝置,用于構(gòu)造實(shí)際的結(jié)構(gòu)4t查詢語(yǔ)句,生成與所述實(shí)際的結(jié)構(gòu)化查詢語(yǔ)句相應(yīng)的^t據(jù)庫(kù)臨時(shí)結(jié)構(gòu),將所述數(shù)據(jù)庫(kù)臨時(shí)結(jié)構(gòu)上傳給所述主查詢引用的所述中間查詢,這一過(guò)程自底向上延續(xù)直至上傳纟合所述主查詢;結(jié)構(gòu)化查詢語(yǔ)句與腳本^Vf亍裝置,構(gòu)造對(duì)應(yīng)于所述主查詢的結(jié)構(gòu)4匕查詢i吾句,并發(fā)送給所述凄t據(jù)庫(kù)進(jìn)行查詢,4吏用所述查詢才莫型中的后處理才莫塊對(duì)查詢結(jié)果集進(jìn)行處理,獲得最終的結(jié)果集。在上述凝:據(jù)庫(kù)復(fù)合查詢系統(tǒng)中,所述查詢才莫型進(jìn)一步包4舌以下至少之一查詢基本定義,用于查詢所述結(jié)構(gòu)4匕查詢{吾句的結(jié)構(gòu)4匕描述;前處理模塊,用于在查詢執(zhí)行之前,對(duì)所述查詢基本定義進(jìn)4亍調(diào)整;所述后處理一莫塊,用于在查詢執(zhí)4于之后,查詢結(jié)果集進(jìn)4亍力口工。所述查詢模型建立裝置包括設(shè)計(jì)向?qū)аb置,用于引導(dǎo)用戶建立所述查詢模型;模型持久化裝置,用于保存通過(guò)校驗(yàn)的所述查詢模型。所述查詢參數(shù)處理裝置包括參數(shù)接收裝置,用于設(shè)置所述查詢模型中的所述查詢參數(shù);引用查詢定位與參數(shù)分發(fā)裝置,才艮據(jù)所述查詢模型所引用的子查詢ID快速定位到相關(guān)查詢模型的定義,并將傳入的查詢參數(shù)分發(fā)給相關(guān)模型的參數(shù)接收裝置。所述結(jié)構(gòu)化查詢語(yǔ)句生成與臨時(shí)結(jié)構(gòu)處理裝置包4舌所述結(jié)構(gòu)化查詢語(yǔ)句生成與臨時(shí)結(jié)構(gòu)替換裝置,用于將查詢基本定義或前處理模塊調(diào)整后的查詢定義轉(zhuǎn)變?yōu)榻Y(jié)構(gòu)化查詢語(yǔ)句,并在所有引用子查詢的位置進(jìn)^f亍臨時(shí)結(jié)構(gòu)^^換;臨時(shí)結(jié)構(gòu)生成裝置,用于適配不同的凄史據(jù)庫(kù)方言,通過(guò)所述結(jié)構(gòu)化查詢語(yǔ)句創(chuàng)建ft才居庫(kù)臨時(shí)結(jié)構(gòu)。上述數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng)進(jìn)一步包括合法性校驗(yàn)裝置,用于校驗(yàn)所述查詢模型是否合法,并用于預(yù)評(píng)估整個(gè)復(fù)合查詢生成樹(shù)的執(zhí)行合法性;臨時(shí)結(jié)構(gòu)生命周期管理裝置,用于實(shí)時(shí)和定時(shí)地清理或維護(hù)前述生成裝置創(chuàng)建的臨時(shí)結(jié)構(gòu);以及腳本熱編i奪裝置,用于支持所述前處理纟莫塊和所述后處理;模塊的腳本實(shí)時(shí)編i奪。本發(fā)明還提供了一種數(shù)據(jù)庫(kù)復(fù)合查詢方法,包括步驟702,建立查詢模型,其中所述查詢模型包括查詢參數(shù),所述查詢才莫型還包4舌以下至少之一查詢基本定義,用于查詢所述結(jié)構(gòu)4匕查詢i吾句的結(jié)構(gòu)化描述;前處理才莫塊,用于在查詢扭J亍之前,對(duì)所述查詢基本定義進(jìn)行調(diào)整;后處理模塊用于在查詢執(zhí)行之后,查詢結(jié)果集進(jìn)行力o工;步驟704,將所述查詢參數(shù)設(shè)置到主查詢的引用處,并分發(fā)給所述主查詢引用的中間查詢;步驟706,構(gòu)造實(shí)際的結(jié)構(gòu)化查詢語(yǔ)句,生成與所述實(shí)際的結(jié)構(gòu)化查詢語(yǔ)句相應(yīng)的凝:據(jù)庫(kù)臨時(shí)結(jié)構(gòu),將所述數(shù)據(jù)庫(kù)臨時(shí)結(jié)構(gòu)上傳給所述主查詢引用的所述中間查詢,這一過(guò)程自底向上延續(xù)直至上傳全合所述主查詢;步-驟708,構(gòu)造對(duì)應(yīng)于所述主查詢的結(jié)構(gòu)化查詢語(yǔ)句,并發(fā)送纟合所述凄t據(jù)庫(kù)進(jìn)4亍查詢,使用所述查詢模型中的后處理模塊對(duì)查詢結(jié)果集進(jìn)行處理,獲得最終的結(jié)果集。在上述數(shù)據(jù)庫(kù)復(fù)合查詢方法中,所述步-驟702包4舌引導(dǎo)用戶建立所述查詢模型;保存通過(guò)校驗(yàn)的所述查詢模型。所述步驟704包括設(shè)置所述查詢^^莫型中的所述查詢參數(shù);4艮據(jù)所述查詢模型所引用的子查詢ID快速定位到相關(guān)查詢模型的定義,并將傳入的查詢參數(shù)分發(fā)給相關(guān)模型的參數(shù)接收裝置。所述步驟706包括將查詢基本定義或前處理一莫塊調(diào)整后的查詢定義轉(zhuǎn)變?yōu)榻Y(jié)構(gòu)化查詢語(yǔ)句,并在所有引用子查詢的位置進(jìn)4亍臨時(shí)結(jié)構(gòu)^H灸;通過(guò)所述結(jié)構(gòu)化查詢i吾句創(chuàng)建ft據(jù)庫(kù)臨時(shí)結(jié)構(gòu)。上述的數(shù)據(jù)庫(kù)復(fù)合查詢方法,進(jìn)一步包括使用合法性校驗(yàn)裝置校驗(yàn)所述查詢模型是否合法,預(yù)評(píng)估整個(gè)復(fù)合查詢生成樹(shù)的執(zhí)行合法性;-使用臨時(shí)結(jié)構(gòu)生命周期管理裝置實(shí)時(shí)和定時(shí)地清理或維護(hù)前述生成裝置創(chuàng)建的臨時(shí)結(jié)構(gòu);以及使用腳本熱編譯裝置支持所述前處理才莫塊和所述后處理才莫塊的腳本實(shí)時(shí)編i奪。通過(guò)上述沖支術(shù)方案,實(shí)現(xiàn)了以下^支術(shù)效果至少之一4吏得基本查詢、中間復(fù)合查詢、主復(fù)合查詢的結(jié)構(gòu)清晰易維護(hù),可以同時(shí)面向數(shù)據(jù)庫(kù)查詢專業(yè)能力較強(qiáng)(如開(kāi)發(fā))和較弱(如顧問(wèn)和用戶)的人員4吏用;大幅度提升了業(yè)務(wù)查詢模型的可復(fù)用性,這是因?yàn)榛静樵兩踔林虚g復(fù)合查詢都可以^皮不同的頂層復(fù)合查詢所引用,而無(wú)須重復(fù)建立;使用者可以根據(jù)實(shí)際數(shù)據(jù)表的數(shù)據(jù)量來(lái)規(guī)劃復(fù)合查詢的設(shè)計(jì),將篩選性強(qiáng)的主要數(shù)據(jù)先查詢出來(lái)再關(guān)聯(lián)其它數(shù)據(jù),從而優(yōu)化查詢的效率;f1入動(dòng)態(tài)參數(shù),通過(guò)參數(shù)分發(fā)機(jī)制使得入口參數(shù)被整棵復(fù)合查詢生成樹(shù)共享,支持靈活的數(shù)據(jù)控制;通過(guò)前處理和后處理才莫塊,對(duì)查詢l丸行前的SQL和查詢4丸4亍后的結(jié)果集再提供個(gè)性化加工的環(huán)節(jié),充分提升取數(shù)可滿足的復(fù)雜邏輯要求;通過(guò)多個(gè)功能裝置優(yōu)化復(fù)合查詢的運(yùn)行性能和控制整體流程。通過(guò)下面結(jié)合附圖的具體描述可以更清楚地理解本發(fā)明的上述和其^也方面、特^正以及其^f也優(yōu)點(diǎn)。圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施例的數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng)的框圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的數(shù)據(jù)庫(kù)復(fù)合查詢方法的流程圖3是圖l和圖2示出的數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng)和方法中使用的查詢才莫型的示意圖4示出了在本發(fā)明中使用的復(fù)合查詢樹(shù)模型的示意圖5示出了根據(jù)本發(fā)明的另一實(shí)施例的數(shù)據(jù)庫(kù)復(fù)合查詢方法的流程圖6示出了才艮據(jù)本發(fā)明的復(fù)合查詢生成樹(shù)的示意圖7示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的構(gòu)造結(jié)構(gòu)的示意圖8示出了圖6和圖7結(jié)合的整體圖9示出了數(shù)據(jù)庫(kù)中基于臨時(shí)表(或視圖)作為中間結(jié)構(gòu)進(jìn)行查詢的原理圖IO示出了時(shí)間點(diǎn)。具體實(shí)施例方式下面將參考附圖具體描述本發(fā)明的示例性實(shí)施例。圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施例的數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng)的框圖。凄t據(jù)庫(kù)復(fù)合查詢系統(tǒng)10包括查詢才莫型建立裝置12,用于建立查詢才莫型,其中所述查詢纟莫型包括查詢參H;查詢參lt處理裝置14,用于將所述查詢參數(shù)設(shè)置到主查詢的引用處,并分發(fā)纟會(huì)所述主查詢引用的中間查詢;結(jié)構(gòu)4匕查詢i吾句生成與臨時(shí)結(jié)構(gòu)處玉里裝置16,用于構(gòu)造實(shí)際的結(jié)構(gòu)4b查詢i吾句,生成與所述實(shí)際的結(jié)構(gòu)4b查詢語(yǔ)句相應(yīng)的數(shù)據(jù)庫(kù)臨時(shí)結(jié)構(gòu),將所述凄t據(jù)庫(kù)臨時(shí)結(jié)構(gòu)上傳《會(huì)所述主查詢引用的所述中間查詢,這一過(guò)考呈自底向上延續(xù)直至上傳全會(huì)所述主查詢;結(jié)構(gòu)化查詢語(yǔ)句與腳本執(zhí)行裝置18,用于構(gòu)造對(duì)應(yīng)于所述主查詢的結(jié)構(gòu)化查詢語(yǔ)句,并發(fā)送纟合所述^U居庫(kù)進(jìn)4亍查詢,?使用所述查詢^^莫型的后處理^t塊對(duì)查詢結(jié)果集進(jìn)行處理,獲得最終的結(jié)果集。該結(jié)構(gòu)4匕查詢i吾句也可以在查詢基本定義的基礎(chǔ)上由前處玉里模塊描述的邏輯所生成。在上述凄t據(jù)庫(kù)復(fù)合查詢系統(tǒng)10中,所述查詢才莫型進(jìn)一步包4舌以下至少之一查詢基本定義,用于查詢所述結(jié)構(gòu)4匕查詢i吾句的結(jié)構(gòu)化描述;前處理模塊,用于在查詢執(zhí)行之前,對(duì)所述查詢基本定義進(jìn)行調(diào)整;后處理一莫塊用于在查詢執(zhí)行之后,查詢結(jié)果集進(jìn)行加工。查詢模型是用于描述從關(guān)系數(shù)據(jù)庫(kù)執(zhí)行數(shù)據(jù)查詢的一種設(shè)計(jì)才莫型,包含參數(shù)、元數(shù)據(jù)描述、查詢基本定義、前處理、后處理等一莫塊。如圖3所示(其中,基本定義、前處理才莫塊和后處理才莫塊可全部i殳置,也可至少i殳置其中的一項(xiàng),這是因?yàn)樗鼈兌季邆洫?dú)立描述查詢模型執(zhí)行后產(chǎn)生何種結(jié)果集的能力)。其各部件用途為參凄t(附圖中又標(biāo)注為Param):用于動(dòng)態(tài)控制查詢的結(jié)果,由參數(shù)名、參數(shù)值、參數(shù)類型等屬性構(gòu)成;元數(shù)據(jù)描述查詢結(jié)果的列結(jié)構(gòu)描述,由列別名、列顯示名、數(shù)據(jù)類型等屬性構(gòu)成,可用從引用查詢中提取查詢字段信息;查詢基本定義(附圖中又標(biāo)注為QBD):可理解為查詢SQL的結(jié)構(gòu)化描述;前處理才莫塊描述查詢執(zhí)行之前系統(tǒng)(可才艮據(jù)參數(shù)取值)對(duì)查詢定義進(jìn)行調(diào)整的邏輯,可調(diào)用程序級(jí)的業(yè)務(wù)算法或4^口,以腳本方式描述,支持運(yùn)行時(shí)熱編譯執(zhí)行;后處理模塊描述查詢執(zhí)行之后系統(tǒng)(可才艮據(jù)參lt取值)對(duì)查詢結(jié)果集進(jìn)行凄t據(jù)加工的邏輯,可調(diào)用程序級(jí)的業(yè)務(wù)算法或接口,以腳本方式描述,支持運(yùn)行時(shí)熱編譯執(zhí)行。查詢模型建立裝置12包括設(shè)計(jì)向?qū)аb置122,用于引導(dǎo)用戶建立所述查詢才莫型;才莫型^寺久化裝置124,用于保存通過(guò)^交—險(xiǎn)的所述查詢模型。所述查詢參數(shù)處理裝置14包括參數(shù)接收裝置142,用于設(shè)置所述查詢模型中的所述查詢參數(shù);引用查詢定位與參數(shù)分發(fā)裝置144,才艮據(jù)所述查詢才莫型所引用的子查詢ID快速定4立到相關(guān)查詢才莫型的定義,并將傳入的查詢參數(shù)分發(fā)給相關(guān)模型的參數(shù)接收裝置。所述結(jié)構(gòu)化查詢語(yǔ)句生成與臨時(shí)結(jié)構(gòu)處理裝置16包4舌所述結(jié)構(gòu)化查詢語(yǔ)句生成與臨時(shí)結(jié)構(gòu)^,換裝置162,用于將查詢基本定義或前處理才莫塊調(diào)整后的查詢定義轉(zhuǎn)變?yōu)榻Y(jié)構(gòu)化查詢語(yǔ)句,并在所有引用子查詢的位置進(jìn)行臨時(shí)結(jié)構(gòu)替換;臨時(shí)結(jié)構(gòu)生成裝置164,用于適配不同的凝:據(jù)庫(kù)方言,通過(guò)所述結(jié)構(gòu)4匕查詢i吾句創(chuàng)建凄t據(jù)庫(kù)臨時(shí)結(jié)構(gòu)。上述數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng)進(jìn)一步包括合法性校驗(yàn)裝置20,用于校驗(yàn)所述查詢模型是否合法,并用于預(yù)評(píng)估整個(gè)復(fù)合查詢生成樹(shù)的執(zhí)行合法性;臨時(shí)結(jié)構(gòu)生命周期管理裝置22,用于實(shí)時(shí)和定時(shí)地清理或維護(hù)前述生成裝置創(chuàng)建的臨時(shí)結(jié)構(gòu);以及腳本熱編i斧裝置24,用于支持所述前處理才莫塊和所述后處理才莫塊的腳本實(shí)時(shí)編-澤。圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的數(shù)據(jù)庫(kù)復(fù)合查詢方法的流程圖。數(shù)據(jù)庫(kù)復(fù)合查詢方法包括步驟702,建立查詢才莫型,其中所述查詢才莫型包纟舌查詢參H所述查詢;f莫型還包纟舌以下至少之一查詢基本定義,用于查詢所述結(jié)構(gòu)化查詢語(yǔ)句的結(jié)構(gòu)化描述;前處理模塊,用于在查詢執(zhí)行之前,對(duì)所述查詢基本定義進(jìn)行調(diào)整;后處理模塊用于在查詢執(zhí)行之后,查詢結(jié)果集進(jìn)行加工;步驟704,將所述查詢參數(shù)i殳置到主查詢的引用處,并分發(fā)全會(huì)所述主查詢引用的中間查詢;步-驟706,構(gòu)造實(shí)際的結(jié)構(gòu)4匕查詢i吾句,生成與所述實(shí)際的結(jié)構(gòu)化查詢語(yǔ)句相應(yīng)的凄t據(jù)庫(kù)臨時(shí)結(jié)構(gòu),將所述lt才居庫(kù)臨時(shí)結(jié)構(gòu)上傳癥會(huì)所述主查詢引用的所述中間查詢,這一過(guò)禾呈自底向上延續(xù)直至上傳給所述主查詢;步驟708,構(gòu)造對(duì)應(yīng)于所述主查詢的結(jié)構(gòu)化查詢語(yǔ)句,并發(fā)送《會(huì)所述凄t才居庫(kù)進(jìn)4亍查詢,Y吏用所述后處理才莫塊對(duì)查詢結(jié)果集進(jìn)行處理,獲得最終的結(jié)果集。在上述數(shù)據(jù)庫(kù)復(fù)合查詢方法中,所述步驟702包括引導(dǎo)用戶建立所述查詢模型;保存通過(guò)校驗(yàn)的所述查詢模型。所述步驟704包括-沒(méi)置所述查詢才莫型中的所述查詢參凄t;4艮據(jù)所述查詢才莫型所引用的子查詢ID快速定位到相關(guān)查詢才莫型的定義,并將傳入的查詢參數(shù)分發(fā)給相關(guān)模型的參數(shù)接收裝置。所述步驟706包括將查詢基本定義或前處理一莫塊調(diào)整后的查詢定義轉(zhuǎn)變?yōu)榻Y(jié)構(gòu)化查詢i吾句,并在所有引用子查詢的4立置進(jìn)4亍臨時(shí)結(jié)構(gòu)替換;通過(guò)所述結(jié)構(gòu)化查詢語(yǔ)句創(chuàng)建ft據(jù)庫(kù)臨時(shí)結(jié)構(gòu)。上述的數(shù)據(jù)庫(kù)復(fù)合查詢方法,進(jìn)一步包括使用合法性校驗(yàn)裝置校驗(yàn)所述查詢才莫型是否合法,預(yù)評(píng)估整個(gè)復(fù)合查詢生成樹(shù)的執(zhí)行合法性;使用臨時(shí)結(jié)構(gòu)生命周期管理裝置實(shí)時(shí)和定時(shí)地清理或維護(hù)前述生成裝置創(chuàng)建的臨時(shí)結(jié)構(gòu);以及〗吏用腳本熱編-澤裝置支持所述前處理才莫塊和所述后處理才莫塊的扭卩本實(shí)時(shí)編i奪。圖4示出了在本發(fā)明中使用的復(fù)合查詢樹(shù)模型的示意圖。復(fù)合查詢指基于已建立好的數(shù)據(jù)庫(kù)查詢才莫型繼續(xù)建立新查詢才莫型的可持續(xù)行為。復(fù)合查詢及其引用的子查詢可構(gòu)成一個(gè)樹(shù)形結(jié)構(gòu),稱為復(fù)合查詢生成樹(shù),其中根節(jié)點(diǎn)稱主查詢,末級(jí)葉子節(jié)點(diǎn)稱為基礎(chǔ)查詢。以下圖為例,復(fù)合查詢il為生成沖對(duì)的主查詢,復(fù)合查詢11、12........lj為中間查詢,原子查詢1、2........n為基石出查詢?;A(chǔ)查詢模型可基于數(shù)據(jù)庫(kù)(或數(shù)據(jù)字典)直接建立,所引用的查詢表都是數(shù)據(jù)庫(kù)中物理存在的表或視圖。復(fù)合查詢模型可基于數(shù)據(jù)庫(kù)(或數(shù)據(jù)字典)和已創(chuàng)建查詢模型建立,所引用的查詢表為物5里表、物5里S見(jiàn)圖或已建立查詢;查詢間復(fù)合的方式可通過(guò)查詢表之間的內(nèi)連4妄、外連4妻或耳關(guān)合等關(guān)系建立。圖5示出了根據(jù)本發(fā)明的另一實(shí)施例的數(shù)據(jù)庫(kù)復(fù)合查詢方法的流程圖。設(shè)計(jì)態(tài)是復(fù)合查詢模型的定義過(guò)程,通過(guò)設(shè)計(jì)向?qū)аb置51導(dǎo)使用者完成參lt、查詢基本定義、前/后處理才莫塊和元lt據(jù)描述等部分的定義,最終保存模型定義時(shí),通過(guò)合法性校驗(yàn)裝置做模型的預(yù)執(zhí)行操作以檢驗(yàn)其合法性,通過(guò)校驗(yàn)后由模型持久化裝置進(jìn)行保存。查詢基本定義環(huán)節(jié)中,可以引用婆j居庫(kù)物理表(或一見(jiàn)圖),也可以引用已創(chuàng)建的查詢模型,如果只引用前者,則就是基礎(chǔ)查詢。運(yùn)行態(tài)是復(fù)合查詢才莫型的批J亍過(guò)程,用戶i殳置參數(shù)后,系統(tǒng)通過(guò)參數(shù)接收裝置、引用查詢定位與參數(shù)分發(fā)裝置將參數(shù)設(shè)置到主查詢(入口查詢)的引用處并分發(fā)給主查詢引用的中間查詢,這一過(guò)程自頂向下延續(xù)直至基礎(chǔ)查詢。此后,系統(tǒng)利用SQL生成與臨時(shí)結(jié)構(gòu)替換裝置和參數(shù)值替換裝置,根據(jù)基礎(chǔ)查詢的基本定義、前處理模塊及參數(shù)構(gòu)造出實(shí)際的查詢SQL以及相應(yīng)的數(shù)據(jù)庫(kù)臨時(shí)結(jié)構(gòu),并通過(guò)臨時(shí)結(jié)構(gòu)生成裝置生成相應(yīng)的臨時(shí)結(jié)構(gòu),再上傳給引用基礎(chǔ)查詢的中間查詢,這一過(guò)禾呈自底向上延續(xù)直至主查i句。主查詢最后通過(guò)SQL執(zhí)行裝置產(chǎn)生查詢結(jié)果,并在結(jié)果集接收后處理4喿作后輸出纟會(huì)執(zhí)4亍復(fù)合查詢的調(diào)用者。上述過(guò)禾呈中,肚卩本熱編i奪裝置用于前處理和后處理模塊邏輯腳本的即時(shí)編譯與執(zhí)行,臨時(shí)結(jié)構(gòu)生命周期管理裝置用于所生成臨時(shí)結(jié)構(gòu)的維護(hù)和清理。相關(guān)功能裝置的用途i兌明如下參數(shù)接收裝置以參數(shù)同名為依據(jù)接收傳入的參數(shù)名值對(duì);參數(shù)值替換裝置在本查詢模型中所有引用參數(shù)的位置,進(jìn)行參數(shù)名到參數(shù)值的替換;模型持久化裝置將模型持久化到數(shù)據(jù)庫(kù)或文件中以便永久保存的裝置;引用查詢定位與參數(shù)分發(fā)裝置根據(jù)本查詢模型所引用的子查詢ID快速定位到相關(guān)查詢模型的定義,并將傳入的參數(shù)分發(fā)給相關(guān)沖莫型的參l"妄收裝置。顯然此裝置可4全測(cè)是否已達(dá)到生成樹(shù)的末級(jí)節(jié)點(diǎn)(基礎(chǔ)查詢);合法性校驗(yàn)裝置在保證效率的前提下,預(yù)評(píng)估整棵復(fù)合查詢生成樹(shù)的執(zhí)行合法性;SQL生成與臨時(shí)結(jié)構(gòu)替換裝置將查詢基本定義或前處理才莫塊調(diào)整后的查詢定義轉(zhuǎn)變?yōu)椴樵僑QL,并在所有引用子查詢的位置進(jìn)行臨時(shí)結(jié)構(gòu)替換;臨時(shí)結(jié)構(gòu)生成裝置適配不同數(shù)據(jù)庫(kù)方言,通過(guò)查詢SQL創(chuàng)建ft據(jù)庫(kù)臨時(shí)結(jié)構(gòu);SQL執(zhí)行裝置通過(guò)SQL(在搭建起來(lái)的數(shù)據(jù)庫(kù)臨時(shí)結(jié)構(gòu)上)獲得查詢結(jié)果集;設(shè)計(jì)向?qū)аb置引導(dǎo)用戶按照合理的步驟快速完成整個(gè)查詢模型構(gòu)建;臨時(shí)結(jié)構(gòu)生命周期管理裝置實(shí)時(shí)和定時(shí)地清理或維護(hù)前述生成裝置創(chuàng)建的臨時(shí)結(jié)構(gòu),避免纟會(huì)^t據(jù)庫(kù)帶來(lái)運(yùn)ff時(shí)壓力以及垃掘Jt據(jù);15腳本熱編譯裝置支持將前/后處理腳本實(shí)時(shí)編譯為可執(zhí)行文件并加載到運(yùn)行時(shí)環(huán)境。圖6示出了根據(jù)本發(fā)明的復(fù)合查詢生成樹(shù)的示意圖。復(fù)合查詢執(zhí)行時(shí),生成樹(shù)的根節(jié)點(diǎn)(主查詢)會(huì)遞歸地查找所引用的子查詢,同時(shí)系統(tǒng)會(huì)自頂向下i也分發(fā)查詢參^t,才對(duì)上的各節(jié)點(diǎn)(中間查詢或基礎(chǔ)查詢)以參tt同名為依據(jù)確定是否共享參凄K直。如圖6所示。也就是說(shuō),參數(shù)傳入主查詢以后,會(huì)在該查詢的所有參數(shù)引用處進(jìn)行值替換,同時(shí)被分發(fā)到該查詢所引用的所有子查詢那里,而子查詢也繼續(xù)進(jìn)4于類4以的工作,直到到達(dá)基礎(chǔ)查詢。參#:的流向如圖所示。圖7示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的構(gòu)造結(jié)構(gòu)的示意圖。遞歸算法找到所有樹(shù)節(jié)點(diǎn)之后,系統(tǒng)會(huì)自底向上地構(gòu)造臨時(shí)結(jié)構(gòu)。在夾省失見(jiàn)則為所有基石出查詢和中間查詢只扭^亍查詢基本定義和前處理部分,只有主查詢既扭J于查詢基本定義和前處理部分又扭J亍后處理部分,這主要是〗呆i正整個(gè)沖支術(shù)方案能夠更好地利用凄t據(jù)庫(kù)的臨時(shí)結(jié)構(gòu)(如一見(jiàn)圖);如圖7所示。也就是說(shuō),基礎(chǔ)查詢構(gòu)造好查詢SQL之后,會(huì)通過(guò)臨時(shí)結(jié)構(gòu)生成裝置生成臨時(shí)結(jié)構(gòu)并上才艮《會(huì)引用它的復(fù)合查詢,復(fù)合查詢將自身生成的SQL中對(duì)基礎(chǔ)查詢的引用處進(jìn)行臨時(shí)結(jié)構(gòu)替換,再繼續(xù)進(jìn)行類似的工作,直到到達(dá)主查詢。構(gòu)造臨時(shí)結(jié)構(gòu)的方向如圖所示。圖8示出了圖6和圖7結(jié)合的整體圖。整體展5見(jiàn)了自頂向下:l也分發(fā)查詢參數(shù),自底向上地構(gòu)造臨時(shí)結(jié)構(gòu)的步驟,并增加了關(guān)于主查詢所估文后處理以及對(duì)外lt出的描述。圖9示出了數(shù)據(jù)庫(kù)中基于臨時(shí)表(或視圖)作為中間結(jié)構(gòu)進(jìn)行查詢的原J里圖。普通的數(shù)據(jù)庫(kù)中基于臨時(shí)表(或視圖)作為中間結(jié)構(gòu)進(jìn)行查詢的技術(shù),原理通常如下圖所示(其中所有SQL均代表關(guān)系數(shù)據(jù)庫(kù)的查詢SQL)。也就是i兌,SQL1、SQL2的結(jié)果可用臨時(shí)結(jié)構(gòu)描述如下createviewtemp—table—1as(SQL1)createviewtemp」able—2as(SQL1)而對(duì)基于SQL1、SQL2連接后的結(jié)果進(jìn)行查詢的SQL12,可描述如下createviewtemp—table—12as(select...fromtemp—table—1jointemp—table_2on...whereSQL12=select...fromtemp—table—12這個(gè)過(guò)程可一直纟寺續(xù)下去,直到頂層節(jié)點(diǎn)SQLil。根據(jù)本發(fā)明的技術(shù)方案在上述應(yīng)用的基礎(chǔ)上,將每個(gè)中間SQL建立為查詢模型,實(shí)現(xiàn)了這些中間結(jié)果的可描述性、可擴(kuò)展性、和可移才直性。查詢才莫型中除SQL相關(guān)內(nèi)容外增加了參#:和前/后處理模塊,支持了查詢的動(dòng)態(tài)性、交互靈活性、邏輯靈活性和可編碼性,此外還增加了設(shè)計(jì)向?qū)?、合法性?!€、臨時(shí)結(jié)構(gòu)生命周期管理、熱編譯等功能裝置,增強(qiáng)了應(yīng)用的易用性、性能和操作可控性。以下是一個(gè)利用本4支術(shù)方案解決典型企業(yè)統(tǒng)計(jì)才艮表的實(shí)例。企業(yè)統(tǒng)計(jì)報(bào)表中常見(jiàn)以時(shí)間段為查詢條件、基礎(chǔ)數(shù)據(jù)維度為匯總依據(jù)的指標(biāo)匯總查詢,其中最具代表性的就是各類余額查詢,表樣如下所示饔…拿業(yè)務(wù)系統(tǒng)1業(yè)務(wù)系統(tǒng)k期孑刀囊………期初套囊業(yè)務(wù)邏輯分析如下假定時(shí)間點(diǎn)的描述如圖10所示各時(shí)間點(diǎn)對(duì)應(yīng)的余額分別為b。、b"b2、bn。我們-沒(méi)定發(fā)生額關(guān)于時(shí)間的函數(shù)為f(t),則針對(duì)[U2時(shí)間段而言,有以下等式成立期初余額&=6。+=6K—f/②^期末余額&2=6。+["/(OA=、—f'7②A本期發(fā)生額/12=f'1/(,-&2-^(其中已記帳的bo、bn可從余額表中獲得,或通過(guò)邊界時(shí)間條件匯總計(jì)算求得)如果我們約定發(fā)生額-現(xiàn)圖為V,其中的發(fā)生額字^a為F,時(shí)間維度字^:為T(mén)當(dāng)前余額表為Vn,其中的余額字段為B基礎(chǔ)數(shù)據(jù)維度字段為<Dim>i。那么可以依次建立以下查詢1、當(dāng)前余額查詢Qn=select<Dim>i,sum(B)asBfromVngroupby<Dim>i182、[tl,tn]時(shí)間^L發(fā)生吝頁(yè)查詢Qln(tl)=select<Dim>i,sum(F)asFlfromVwhereT>=tlgroupby<Dim>i3、[t2,tn]時(shí)間4爻發(fā)生虐頁(yè)查詢Q2n(t2)=select<Dim>i,sum(F)asF2fromVwhereT>=t2groupby<Dim>i貝'J,獲得所需結(jié)果的復(fù)合查詢?yōu)镼(tl,t2)=selectQn.<Dim>i,(Qn.B-Qln.Fl)as其月^7余額,(Qn.B-Q2n.F2)as期末余額,(Q2n.F2—Qln.Fl)as本期發(fā)生fromQnleftjoinQlnonQn.<Dim>i=Qln.<Dim>ileftjoinQ2nonQn.<Dim>i=Q2n.<Dim>i其中的連4妄方式和主連4妻表才艮據(jù)實(shí)際業(yè)務(wù)決定。通過(guò)上述纟支術(shù)方案,實(shí)現(xiàn)了以下纟支術(shù)效果至少之一使得基本查詢、中間復(fù)合查詢、主復(fù)合查詢的結(jié)構(gòu)清晰易維護(hù),可以同時(shí)面向^:據(jù)庫(kù)查詢專業(yè)能力舉交強(qiáng)(如開(kāi)發(fā))和4交弱(如顧問(wèn)和用戶)的人員4吏用;大幅度提升了業(yè)務(wù)查詢模型的可復(fù)用性,這是因?yàn)榛静樵兩踔林虚g復(fù)合查詢都可以-故不同的頂層復(fù)合查詢所引用,而無(wú)須重復(fù)建立;使用者可以根據(jù)實(shí)際數(shù)據(jù)表的數(shù)據(jù)量來(lái)規(guī)劃復(fù)合查詢的設(shè)計(jì),將篩選性強(qiáng)的主要數(shù)據(jù)先查詢出來(lái)再關(guān)聯(lián)其它數(shù)據(jù),從而優(yōu)化查詢的歲文率;引入動(dòng)態(tài)參數(shù),通過(guò)參數(shù)分發(fā)機(jī)制使得入口參數(shù)被整棵復(fù)合查詢生成樹(shù)共享,支持靈活的數(shù)據(jù)控制;通過(guò)前處理和后處理才莫塊,對(duì)查詢扭^f亍前的SQL和查詢扭j亍后的結(jié)果集再提供個(gè)性化加工的環(huán)節(jié),充分提升取數(shù)可滿足的復(fù)雜邏輯要求;通過(guò)多個(gè)功能裝置優(yōu)化復(fù)合查詢的運(yùn)行性能和控制整體流程。以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。權(quán)利要求1.一種數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng),其特征在于,包括查詢模型建立裝置,用于建立查詢模型,其中所述查詢模型包括查詢參數(shù);查詢參數(shù)處理裝置,用于將所述查詢參數(shù)設(shè)置到主查詢的引用處,并分發(fā)給所述主查詢引用的中間查詢或基本查詢;結(jié)構(gòu)化查詢語(yǔ)句生成與臨時(shí)結(jié)構(gòu)處理裝置,用于構(gòu)造實(shí)際的結(jié)構(gòu)化查詢語(yǔ)句,生成與所述實(shí)際的結(jié)構(gòu)化查詢語(yǔ)句相應(yīng)的數(shù)據(jù)庫(kù)臨時(shí)結(jié)構(gòu),將所述數(shù)據(jù)庫(kù)臨時(shí)結(jié)構(gòu)上傳給所述主查詢引用的所述中間查詢或所述基本查詢,這一過(guò)程自底向上延續(xù)直至上傳給所述主查詢;結(jié)構(gòu)化查詢語(yǔ)句與腳本執(zhí)行裝置,用于構(gòu)造對(duì)應(yīng)于所述主查詢的結(jié)構(gòu)化查詢語(yǔ)句,并發(fā)送給所述數(shù)據(jù)庫(kù)進(jìn)行查詢,使用所述查詢模型的后處理模塊對(duì)查詢結(jié)果集進(jìn)行處理,獲得最終的結(jié)果集。2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng),其特征在于,所述查詢一莫型進(jìn)一步包括查詢基本定義,用于查詢所述結(jié)構(gòu)化查詢語(yǔ)句的結(jié)構(gòu)化描述;前處理才莫塊,用于在查詢扭j亍之前,對(duì)所述查詢基本定義進(jìn)行調(diào)整;所述后處理一莫塊,用于在查詢執(zhí)行之后,對(duì)查詢結(jié)果集進(jìn)行數(shù)據(jù)加工。3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng),其特征在于,所述查詢模型建立裝置包括設(shè)計(jì)向?qū)аb置,用于引導(dǎo)用戶建立所述查詢^t型;模型持久化裝置,用于保存通過(guò)校驗(yàn)的所述查詢才莫型。4.根據(jù)權(quán)利要求2所述的數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng),其特征在于,所述查詢參lt處理裝置包4舌參數(shù)4妄收裝置,用于設(shè)置所述查詢才莫型中的所述查詢參數(shù);引用查詢定位與參數(shù)分發(fā)裝置,根據(jù)所述查詢模型所引用的子查詢ID快速定4立到相關(guān)查詢一莫型的定義,并將傳入的查詢參數(shù)分發(fā)給相關(guān)模型的參數(shù)接收裝置。5.根據(jù)權(quán)利要求2所述的數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng),其特征在于,所述結(jié)構(gòu)化查詢i吾句生成與臨時(shí)結(jié)構(gòu)處理裝置包4舌所述結(jié)構(gòu)化查詢語(yǔ)句生成與臨時(shí)結(jié)構(gòu)替換裝置,用于將查詢基本定義或前處理一莫塊調(diào)整后的查詢定義轉(zhuǎn)變?yōu)榻Y(jié)構(gòu)化查詢語(yǔ)句,并在所有引用子查詢的位置進(jìn)行臨時(shí)結(jié)構(gòu)替換;臨時(shí)結(jié)構(gòu)生成裝置,用于適配不同的凄t據(jù)庫(kù)方言,通過(guò)所述結(jié)構(gòu)化查詢語(yǔ)句創(chuàng)建彰:據(jù)庫(kù)臨時(shí)結(jié)構(gòu)。6.根據(jù)權(quán)利要求1至5中任一項(xiàng)所述的數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng),其特4i在于,進(jìn)一步包4舌合法性校驗(yàn)裝置,用于校-驗(yàn)所述查詢才莫型是否合法,并用于預(yù)評(píng)估整個(gè)復(fù)合查詢生成樹(shù)的執(zhí)行合法性;臨時(shí)結(jié)構(gòu)生命周期管理裝置,用于實(shí)時(shí)和定時(shí)i也清理或維護(hù)前述生成裝置創(chuàng)建的臨時(shí)結(jié)構(gòu);以及腳本熱編i奪裝置,用于支持所述前處理才莫塊和所述后處理模塊的腳本實(shí)時(shí)編i奪。7.—種數(shù)據(jù)庫(kù)復(fù)合查詢方法,其特征在于,包括步驟702,建立查詢一莫型,其中所述查詢^^莫型包括查詢參數(shù),所述查詢模型還包括以下至少之一查詢基本定義,用于查詢所述結(jié)構(gòu)化查詢語(yǔ)句的結(jié)構(gòu)化描述;前處理才莫塊,用于在查詢執(zhí)行之前,對(duì)所述查詢基本定義進(jìn)行調(diào)整;后處理模塊用于在查詢抽^于之后,^"查詢結(jié)果集進(jìn)^f于^^居加工;步艱《704,將所述查詢參凄t沒(méi)置到主查詢的引用處,并分發(fā)纟合所述主查詢引用的中間查詢;步驟706,構(gòu)造實(shí)際的結(jié)構(gòu)化查詢語(yǔ)句,生成與所述實(shí)際的結(jié)構(gòu)化查詢語(yǔ)句相應(yīng)的數(shù)據(jù)庫(kù)臨時(shí)結(jié)構(gòu),將所述數(shù)據(jù)庫(kù)臨時(shí)結(jié)構(gòu)上傳癥會(huì)所述主查詢引用的所述中間查詢,這一過(guò)禾呈自底向上延續(xù)直至上傳給所述主查詢;步驟708,構(gòu)造對(duì)應(yīng)于所述主查詢的結(jié)構(gòu)化查詢語(yǔ)句,并發(fā)送給所述數(shù)據(jù)庫(kù)進(jìn)行查詢,<吏用所述后處理一莫塊對(duì)查詢結(jié)果集進(jìn)行處理,獲得最終的結(jié)果集。8.沖艮據(jù)權(quán)利要求7所迷的數(shù)據(jù)庫(kù)復(fù)合查詢方法,其特征在于,所述步驟702包括引導(dǎo)用戶建立所述查詢模型;保存通過(guò)校驗(yàn)的所述查詢一莫型。9.根據(jù)權(quán)利要求7所述的數(shù)據(jù)庫(kù)復(fù)合查詢方法,其特征在于,所述步駛《704包4舌i殳置所述查詢才莫型中的所述查詢參凄t;才艮據(jù)所述查詢才莫型所引用的子查詢ID快速定位到相關(guān)查詢模型的定義,并將傳入的查詢參數(shù)分發(fā)給相關(guān)模型的參數(shù)接收裝置。10.根據(jù)權(quán)利要求7所述的數(shù)據(jù)庫(kù)復(fù)合查詢方法,其特征在于,所述步驟706包括將查詢基本定義或前處理一莫塊調(diào)整后的查詢定義轉(zhuǎn)變?yōu)榻Y(jié)構(gòu)化查詢語(yǔ)句,并在所有引用子查詢的位置進(jìn)4亍臨時(shí)結(jié)構(gòu)^辦換;通過(guò)所述結(jié)構(gòu)化查詢語(yǔ)句創(chuàng)建凄t據(jù)庫(kù)臨時(shí)結(jié)構(gòu)。11.根據(jù)權(quán)利要求7至10中任一項(xiàng)所述的數(shù)據(jù)庫(kù)復(fù)合查詢方法,其特4i在于,進(jìn)一步包4舌使用合法性校驗(yàn)裝置校驗(yàn)所述查詢模型是否合法,預(yù)評(píng)估整個(gè)復(fù)合查詢生成樹(shù)的執(zhí)行合法性;^使用臨時(shí)結(jié)構(gòu)生命周期管理裝置實(shí)時(shí)和定時(shí):t也清理或維護(hù)前述生成裝置創(chuàng)建的臨時(shí)結(jié)構(gòu);以及4吏用腳本熱編i奪裝置支4寺所述前處理一莫塊和所述后處理才莫塊的腳本實(shí)時(shí)編-澤。全文摘要本發(fā)明提供數(shù)據(jù)庫(kù)復(fù)合查詢系統(tǒng),包括查詢模型建立裝置,建立查詢模型,查詢模型包括查詢參數(shù);查詢參數(shù)處理裝置,將查詢參數(shù)設(shè)置到主查詢的引用處,分發(fā)給主查詢引用的中間查詢或基本查詢;結(jié)構(gòu)化查詢語(yǔ)句生成與臨時(shí)結(jié)構(gòu)處理裝置,構(gòu)造實(shí)際的結(jié)構(gòu)化查詢語(yǔ)句,生成與實(shí)際的結(jié)構(gòu)化查詢語(yǔ)句相應(yīng)的數(shù)據(jù)庫(kù)臨時(shí)結(jié)構(gòu),將數(shù)據(jù)庫(kù)臨時(shí)結(jié)構(gòu)上傳給主查詢引用的中間查詢;結(jié)構(gòu)化查詢語(yǔ)句與腳本執(zhí)行裝置,構(gòu)造對(duì)應(yīng)于主查詢的結(jié)構(gòu)化查詢語(yǔ)句,并發(fā)送給數(shù)據(jù)庫(kù)查詢,使用查詢模型的后處理模塊對(duì)查詢結(jié)果集進(jìn)行處理,獲得最終的結(jié)果集。從而使得基本查詢、中間復(fù)合查詢、主復(fù)合查詢結(jié)構(gòu)清晰易維護(hù),大幅度提升業(yè)務(wù)查詢模型的可復(fù)用性。文檔編號(hào)G06F17/30GK101593203SQ20091008391公開(kāi)日2009年12月2日申請(qǐng)日期2009年5月12日優(yōu)先權(quán)日2009年5月12日發(fā)明者朱俊彬申請(qǐng)人:用友軟件股份有限公司