專利名稱::一種基于結(jié)構(gòu)化查詢語言語句的源信息追蹤方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及的是一種源信息的追蹤方法。
背景技術(shù):
:近些年來,數(shù)據(jù)的規(guī)模、范圍不斷擴(kuò)大,數(shù)據(jù)形式日趨多樣化。對(duì)數(shù)進(jìn)行清洗和中間處理的過程被傳統(tǒng)的數(shù)據(jù)集成方法所忽略,而集成后的目標(biāo)數(shù)據(jù)成為它的關(guān)注的重點(diǎn)。然而由于中間數(shù)據(jù)集合在質(zhì)量、結(jié)構(gòu)、層次、來源上各不相同,為了達(dá)到評(píng)價(jià)數(shù)據(jù)質(zhì)量及正確性的目的,分析中間數(shù)的產(chǎn)生和深化的過程顯得十分重要。整體來說,理解及管理數(shù)據(jù)源信息的必要性幾乎在科學(xué)應(yīng)用的每個(gè)領(lǐng)域都有所提升。在許多情況下,關(guān)于數(shù)據(jù)出處的信息構(gòu)成了證實(shí)科學(xué)應(yīng)用所產(chǎn)生的結(jié)果的正確與否的依據(jù),科學(xué)結(jié)果源信息的相關(guān)知識(shí)與科學(xué)結(jié)果本身同樣的重要。高明,金澈清等人在2010年3月份的計(jì)算機(jī)學(xué)報(bào)上發(fā)表的文章“數(shù)據(jù)世系管理技術(shù)研究綜述”中提到了目前國(guó)內(nèi)外使用的多種源信息查詢方法,這些方法主要應(yīng)用的是數(shù)據(jù)血緣技術(shù),該技術(shù)的實(shí)現(xiàn)有多種方法,如輔助數(shù)據(jù)庫(kù)方法,模式映射方法,注釋法等,但在這多種方法中沒有根據(jù)具體的SQLGtructuredQueryLanguage——結(jié)構(gòu)化查詢語言)語句來對(duì)源信息進(jìn)行查詢的技術(shù)。
發(fā)明內(nèi)容本發(fā)明的目的在于提供一種適用于關(guān)系數(shù)據(jù)庫(kù)中源信息的查詢,可應(yīng)用在各領(lǐng)域中對(duì)源信息進(jìn)行的查詢和存儲(chǔ)的基于結(jié)構(gòu)化查詢語言語句的源信息追蹤方法。本發(fā)明的目的是這樣實(shí)現(xiàn)的首先將SQL語句按其不同的結(jié)構(gòu)進(jìn)行分類,之后對(duì)不同類型的SQL語句進(jìn)行逆向處理,在得到源信息后將源信息進(jìn)行存儲(chǔ),并在源信息上再次執(zhí)行原SQL語句,與之前得到的結(jié)果集進(jìn)行對(duì)比,得出結(jié)論。本發(fā)明的具體實(shí)現(xiàn)步驟包括步驟1對(duì)SQL語句進(jìn)行分類1.1掃描SQL語句,根據(jù)其關(guān)鍵字將SQL語句內(nèi)容存儲(chǔ)到SQL語句結(jié)構(gòu)表中;1.2獲取from及where字段值,并進(jìn)行判斷;1.3如果from字段中不包括in或“(”或“,”字樣或符號(hào),且where字段中不包括>、<、=比較運(yùn)算符及exists謂詞,且join及on的字段值為空,則為簡(jiǎn)單類型SQL語句,執(zhí)行步驟2;1.4如果字段不包括in或“(”字樣或符號(hào),但包括“,”,或join及on的字段值不為空,且where字段中不包括>、<、=比較運(yùn)算符及exists謂詞,則為含多表操作的簡(jiǎn)單SQL語句,則執(zhí)行步驟3;1.5如果字段包括in或“(”字樣或符號(hào),或where字段中包括>、<、=比較運(yùn)算符或exists謂詞,則為嵌套含子查詢的SQL語句,則執(zhí)行步驟4;步驟2簡(jiǎn)單類型SQL語句Sl的逆向處理2.1輸入SQL語句Sl;2.2輸出Sl的逆向SQL;2.3掃描SQL語句,對(duì)結(jié)構(gòu)進(jìn)行存儲(chǔ);2.4根據(jù)對(duì)SQL語句的掃描,得到FROM后的表名;2.5如果語句中含有ORDERBY從句,則分析expressioni是否含有TOP選項(xiàng),其中1彡i彡η;如不含有TOP選項(xiàng),則將ORDERBY從句忽略,轉(zhuǎn)向2.7;如含有TOP選項(xiàng),則獲取相應(yīng)字段,轉(zhuǎn)向2.6;2.6獲取GROUPBY字段中的值,如果值為空,則轉(zhuǎn)向2.7,如不為空,對(duì)GROUPBY字段中的expressioni作為連接條件,寫成嵌套形式的SQL,嵌套SQL語句的內(nèi)部為原SQL語句除SELECT外的所有字段,SELECT字段為SELECTexpressioni;2.7從SQL語句結(jié)構(gòu)表中提取SQL語句的WHERE字段的屬性值;2.8將2.2,2.3、2.4或2.5中獲得的各字段轉(zhuǎn)換為相應(yīng)的SQL語言,并與SELECT字段拼接形成SQL語句;步驟3含多表操作的簡(jiǎn)單SQL語句S2逆向處理輸入SQL語句S2,輸出S2的逆向SQL;3.1獲取FROM后及JOIN后的表名;3.2分別對(duì)各個(gè)表進(jìn)行源數(shù)據(jù)的查詢,將WHERE后或ON后的與多表相關(guān)的匹配條件改寫為逆向SQL中的嵌套SQL形式;3.3判斷WHERE后是否有對(duì)單表進(jìn)行篩選的條件,如果有,則在對(duì)在篩選條件中出現(xiàn)的具體表進(jìn)行源信息查詢時(shí),將篩選條件添加到WHERE篩選條件中;3.4如果WHERE中的篩選條件含有對(duì)多個(gè)表的不同屬性進(jìn)行的計(jì)算,則對(duì)相關(guān)表進(jìn)行逆向獲取原數(shù)據(jù)時(shí)在子查詢內(nèi)要用JOIN…ON…進(jìn)行關(guān)聯(lián)運(yùn)算,將需要進(jìn)行多表計(jì)算的篩選條件加入;3.5如果語句中含有ORDERBY從句,則分析expressioni是否含有TOP選項(xiàng),其中1彡i彡n,如不含有TOP選項(xiàng),則在逆向處理時(shí)將ORDERBY從句忽略,如含有TOP選項(xiàng),則獲取字段;3.6將3.3,3.4,3.5步驟所得多個(gè)字段改為SQL語言形式,并與SELECT字段進(jìn)行拼接,形成逆向SQL語句;步驟4嵌套含子查詢的SQL語句S3逆向方法輸入SQL語句S3,輸出S3的逆向SQL;4.1掃描SQL語句,將SQL語句分層,并存儲(chǔ)層次結(jié)構(gòu);4.2根據(jù)對(duì)SQL語句的掃描,得到FROM后或WHERE后的嵌套SQL語句的需要進(jìn)行源信息查詢的表名;4.3由內(nèi)而外,依次分析每層SQL語句的表名是否在外層SQL中出現(xiàn),若不出現(xiàn),且中間表的信息不在篩選條件中出現(xiàn),則在層次內(nèi)對(duì)表進(jìn)行源信息的處理。如果層為簡(jiǎn)單的單表執(zhí)行的SQL語句,則用步驟2進(jìn)行處理;若層為多表執(zhí)行的簡(jiǎn)單SQL語句,則用步驟3進(jìn)行處理;4.4從內(nèi)而夕卜,為最內(nèi)層SQL語句建立一個(gè)視圖,將視圖作為中間表,代替原SQL語句中的中間表部分,依次對(duì)當(dāng)前層SQL語句進(jìn)行4.3的處理,直到SQL語句變?yōu)楹?jiǎn)單的無嵌套查詢的形式;4.5由于用中間視圖代替中間表名,在對(duì)具體表進(jìn)行逆向處理時(shí),SQL語句中已經(jīng)不存在表名,在表所在層次的SQL語句中找到表與層中間表之間的關(guān)系,將這個(gè)連接條件作為層視圖和表之間的連接條件;4.6分析4.4所得到的SQL語句的WHERE后的篩選條件,當(dāng)含有中間表與實(shí)體表之間通過屬性值相等而進(jìn)行連接的篩選條件時(shí),由于是對(duì)具體表進(jìn)行屬性查詢,不能對(duì)中間表進(jìn)行連接操作,因此將篩選條件改為嵌套子查詢的形式,并在子查詢內(nèi)對(duì)4.4得到的中間視圖進(jìn)行連接;4.7對(duì)WHERE后其他的篩選條件進(jìn)行判斷,在對(duì)篩選條件中出現(xiàn)的具體表進(jìn)行源信息查詢時(shí),將與表對(duì)應(yīng)的篩選條件加到WHERE篩選條件中;4.8將得到的嵌套子查詢,WHERE語句相關(guān)信息與SELECT語句進(jìn)行拼接,得到逆向SQL語句。本發(fā)明提供了一種基于SQL語句的數(shù)據(jù)追蹤方法。將已有SQL語句,根據(jù)其不同的結(jié)構(gòu)將其轉(zhuǎn)換為源信息查詢語句。根據(jù)該數(shù)據(jù)追蹤方法的特點(diǎn),主要包括兩部分1.根據(jù)SQL語句結(jié)構(gòu),給出分類方法。2.針對(duì)不同類型的SQL語句,分別給出不同的源信息查詢方法。本發(fā)明的分類方法將SQL語句分為以下三類1)簡(jiǎn)單類型SQL語句該類型的SQL語句只對(duì)單表進(jìn)行查詢,不涉及表的連接操作及嵌套子查詢;2)含多表操作的簡(jiǎn)單SQL語句該類型的SQL語句含多表操作,但不涉及嵌套子查詢;3)含嵌套子查詢的SQL語句。源信息查詢方法包括1)簡(jiǎn)單類型SQL語句數(shù)據(jù)追蹤方法;2)含多表操作的簡(jiǎn)單SQL語句數(shù)據(jù)追蹤方法;3)含嵌套子查詢的SQL語句數(shù)據(jù)追蹤方法。為了驗(yàn)證方法的正確性,需要對(duì)通過以上算法得到源信息進(jìn)行驗(yàn)證,因此需要將源信息進(jìn)行存儲(chǔ)。將源信息存儲(chǔ)后需要驗(yàn)證逆向SQL的正確性,需要在追蹤出的源信息上再次執(zhí)行原SQL語句,得到的結(jié)果與原結(jié)果進(jìn)行對(duì)比,如果結(jié)果集相同則驗(yàn)證通過,主要分為初步驗(yàn)證和抽樣驗(yàn)證。由上所述,對(duì)于一個(gè)具體的SQL語句,將其轉(zhuǎn)化為源信息查詢語句(逆向SQL語句)的過程是1)根據(jù)分類算法,將該SQL語句歸類;2)根據(jù)不同類型SQL語句的逆向算法,對(duì)該SQL進(jìn)行逆向處理;3)執(zhí)行步驟2得到的源信息查詢語句,對(duì)查找到的源信息進(jìn)行存儲(chǔ);4)正確性驗(yàn)證。本發(fā)明提供的數(shù)據(jù)追蹤方法適用于關(guān)系數(shù)據(jù)庫(kù)中源信息的查詢,可應(yīng)用在各領(lǐng)域中對(duì)源信息進(jìn)行的查詢和存儲(chǔ)。該數(shù)據(jù)追蹤方法主要是在原SQLGtructuredQueryLanguage——結(jié)構(gòu)化查詢語言)語句的基礎(chǔ)上對(duì)其進(jìn)行更改,利用原SQL語句的檢索條件對(duì)其執(zhí)行結(jié)果在相應(yīng)表中的源信息進(jìn)行查詢。首先將SQL語句進(jìn)行分類,針對(duì)不同復(fù)雜程度的SQL語句提出不同的方法對(duì)其源數(shù)據(jù)進(jìn)行查詢。對(duì)不同復(fù)雜程度的SQL語句進(jìn)行分析,并針對(duì)SQL語句的復(fù)雜程度,給出了不同的源信息查詢算法,同時(shí)將存儲(chǔ)源信息的表結(jié)構(gòu)與原始表的表結(jié)構(gòu)進(jìn)行對(duì)比,確定源信息的存儲(chǔ)結(jié)構(gòu),建立源信息表,將源信息存儲(chǔ)于源信息表中。最后提出了在源數(shù)據(jù)庫(kù)上用抽樣驗(yàn)證的方法對(duì)該數(shù)據(jù)追蹤方法的正確性進(jìn)行驗(yàn)證的方法,并得出驗(yàn)證結(jié)果。圖1本發(fā)明的基本結(jié)構(gòu);圖2技術(shù)路線;圖3SQL語句驗(yàn)證過程;圖4SQL語句結(jié)構(gòu)表。具體實(shí)施例方式下面結(jié)合附圖舉例對(duì)本發(fā)明做更詳細(xì)地描述(1)主要處理過程圖1為問題的具體定義,本發(fā)明的主要內(nèi)容是在原SQL語句的基礎(chǔ)上對(duì)其進(jìn)行更改,利用原SQL語句的篩選條件對(duì)其執(zhí)行結(jié)果在相應(yīng)表中的源信息進(jìn)行查詢。在原數(shù)據(jù)上執(zhí)行SQL語句得到一個(gè)結(jié)果集,而這個(gè)結(jié)果集可能只是原數(shù)據(jù)的一部分在SQL語句的作用下產(chǎn)生的,為了找到這一部分原數(shù)據(jù),需要對(duì)原SQL語句進(jìn)行更改,使其能夠追蹤到結(jié)果集的源信息,而這部分源信息應(yīng)與產(chǎn)生結(jié)果集的那部分原數(shù)據(jù)相等。圖2為技術(shù)路線,其中左側(cè)框內(nèi)為對(duì)原SQL語句進(jìn)行處理的部分,右側(cè)框內(nèi)為對(duì)處理后的SQL語句進(jìn)行驗(yàn)證的部分。整體過程如下首先將SQL語句按其不同的結(jié)構(gòu)進(jìn)行分類,之后對(duì)不同類型的SQL語句進(jìn)行逆向處理,在得到源信息后將源信息進(jìn)行存儲(chǔ),并在源信息上再次執(zhí)行原SQL語句,與之前得到的結(jié)果集進(jìn)行對(duì)比,得出結(jié)論。圖3為逆向SQL語句的驗(yàn)證過程,首先將執(zhí)行逆向SQL產(chǎn)生的結(jié)果存入新源信息表中,之后隨機(jī)抽取執(zhí)行原SQL語句得到的若干條記錄記為A,然后在源信息中找到該記錄A在所有表中對(duì)應(yīng)的源信息,并針對(duì)每個(gè)相關(guān)表分別建立視圖,最后在新建立的視圖上執(zhí)行更改后的SQL語句,得到結(jié)果A',分別比對(duì)A與A中相應(yīng)的數(shù)據(jù),如果A中每條數(shù)據(jù)都能與A'中的相關(guān)數(shù)據(jù)對(duì)應(yīng),則抽樣驗(yàn)證通過。(2)具體算法圖4為將SQL按其保留字進(jìn)行存儲(chǔ)表,通過對(duì)SQL語句結(jié)構(gòu)的存儲(chǔ),對(duì)其所屬類別進(jìn)行判斷,根據(jù)其所屬種類,對(duì)不同類型的SQL語句進(jìn)行分別的逆向處理,具體算法如下算法ISQL語句分類算法1)掃描該SQL語句,根據(jù)其關(guān)鍵字將該SQL語句內(nèi)容存儲(chǔ)到SQL語句結(jié)構(gòu)表中。2)獲取from及where字段值,并對(duì)它們進(jìn)行判斷。3)如果from字段中不包括in或“(”或“,”等字樣或符號(hào),且where字段中不包括>、<、=等比較運(yùn)算符及exists謂詞,且join及on的字段值為空,則該語句屬于簡(jiǎn)單類型SQL語句,轉(zhuǎn)身算法2.4)如果該字段不包括in或“(”等字樣或符號(hào),但包括“,”,或join及on的字段值不為空,且where字段中不包括>、<、=等比較運(yùn)算符及exists謂詞,則該SQL語句屬于簡(jiǎn)單含多表類別,則轉(zhuǎn)向算法3。5)如果該字段包括in或“(”等字樣或符號(hào),或where字段中包括>、<、=等比較運(yùn)算符或exists謂詞,則該SQL語句屬于含子查詢的SQL語句,則轉(zhuǎn)身算法4。算法2簡(jiǎn)單SQL語句逆向算法對(duì)一個(gè)簡(jiǎn)單的SQL語句Si,結(jié)構(gòu)如下SELECT[ALL|DISTINCT][TOP]<expression1>[<expressionn>]...FROM〈table1>[<table2>]…WHERE<cONditiONl>[AND|OR][<cONditiON2>]···GROUPBY〈expression1>[,〈expressionm>]...HAVING…ORDERBY…該SQL語句只涉及到單表查詢,想要找到該查詢結(jié)果在tablel表中的所有源信息,只需要將SELECT后的字段改為SELECTtablel.*即可,WHERE后的篩選條件保持不變,主要算法算法2簡(jiǎn)單SQL語句逆向算法1)輸入SQL語句Sl2)輸出Sl的逆向SQL3)掃描SQL語句,對(duì)其結(jié)構(gòu)進(jìn)行存儲(chǔ)。4)根據(jù)對(duì)SQL語句的掃描,得到FROM后的表名。5)如果語句中含有ORDERBY從句,則分析expressioni(1彡i彡η)是否含有TOP選項(xiàng),如不含有TOP選項(xiàng),則在逆向處理時(shí)可將0RDERBY從句忽略,以節(jié)省時(shí)間,轉(zhuǎn)向步驟7。如含有TOP選項(xiàng),則獲取相應(yīng)字段,轉(zhuǎn)向步驟6。6)獲取GROUPBY字段中的值,如果值為空,則轉(zhuǎn)向步驟7,如不為空,對(duì)GROUPBY字段中的expressioni,將其作為連接條件,寫成嵌套形式的SQL,嵌套SQL語句的內(nèi)部為原SQL語句除SELECT外的所有字段,SELECT字段為SELECTexpressioni。7)從SQL語句結(jié)構(gòu)表中提取該SQL語句的WHERE字段的屬性值。8)將2、3、4(或5)步驟中獲得的各字段轉(zhuǎn)換為相應(yīng)的SQL語言,并與SELECT字段拼接形成SQL語句。算法3含多表操作的SQL語句逆向算法含多表的SQL語句主要有兩種表達(dá)形式(1)多個(gè)表的關(guān)聯(lián)關(guān)系在WHERE語句中。(2)多個(gè)表的關(guān)聯(lián)關(guān)系通過JOIN…ON…語句實(shí)現(xiàn)。在對(duì)這種SQL語句進(jìn)行逆向時(shí)要將逆向SQL改為嵌套語句的形式,如下面的SQL語句s2權(quán)利要求1.一種基于結(jié)構(gòu)化查詢語言語句的源信息追蹤方法,其特征是首先將SQL語句按其不同的結(jié)構(gòu)進(jìn)行分類,之后對(duì)不同類型的SQL語句進(jìn)行逆向處理,在得到源信息后將源信息進(jìn)行存儲(chǔ),并在源信息上再次執(zhí)行原SQL語句,與之前得到的結(jié)果集進(jìn)行對(duì)比,得出結(jié)論。2.根據(jù)權(quán)利要求1所述的一種基于結(jié)構(gòu)化查詢語言語句的源信息追蹤方法,其特征是具體實(shí)現(xiàn)步驟包括步驟1對(duì)SQL語句進(jìn)行分類·1.1掃描SQL語句,根據(jù)其關(guān)鍵字將SQL語句內(nèi)容存儲(chǔ)到SQL語句結(jié)構(gòu)表中;·1.2獲取from及where字段值,并進(jìn)行判斷;·1.3如果from字段中不包括in或“(”或“,”字樣或符號(hào),且where字段中不包括>、<、=比較運(yùn)算符及exists謂詞,且join及on的字段值為空,則為簡(jiǎn)單類型SQL語句,執(zhí)行步驟2;·1.4如果字段不包括in或“(”字樣或符號(hào),但包括“,”,或join及on的字段值不為空,且where字段中不包括>、<、=比較運(yùn)算符及exists謂詞,則為含多表操作的簡(jiǎn)單SQL語句,則執(zhí)行步驟3;·1.5如果字段包括in或“(”字樣或符號(hào),或where字段中包括>、<、=比較運(yùn)算符或exists謂詞,則為嵌套含子查詢的SQL語句,則執(zhí)行步驟4;步驟2簡(jiǎn)單類型SQL語句Sl的逆向處理·2.1輸入SQL語句Sl;·2.2輸出=Sl的逆向SQL;·2.3掃描SQL語句,對(duì)結(jié)構(gòu)進(jìn)行存儲(chǔ);·2.4根據(jù)對(duì)SQL語句的掃描,得到FROM后的表名;·2.5如果語句中含有ORDERBY從句,則分析expressioni是否含有TOP選項(xiàng),其中1^i^n;如不含有TOP選項(xiàng),則將0RDERBY從句忽略,轉(zhuǎn)向2.7;如含有TOP選項(xiàng),則獲取相應(yīng)字段,轉(zhuǎn)向2.6;·2.6獲取GROUPBY字段中的值,如果值為空,則轉(zhuǎn)向2.7,如不為空,對(duì)GROUPBY字段中的expressioni作為連接條件,寫成嵌套形式的SQL,嵌套SQL語句的內(nèi)部為原SQL語句除SELECT外的所有字段,SELECT字段為SELECTexpressioni;·2.7從SQL語句結(jié)構(gòu)表中提取SQL語句的WHERE字段的屬性值;·2.8將2.2,2.3、2.4或2.5中獲得的各字段轉(zhuǎn)換為相應(yīng)的SQL語言,并與SELECT字段拼接形成SQL語句;步驟3含多表操作的簡(jiǎn)單SQL語句S2逆向處理輸入SQL語句S2,輸出:S2的逆向SQL;·3.1獲取FROM后及JOIN后的表名;·3.2分別對(duì)各個(gè)表進(jìn)行源數(shù)據(jù)的查詢,將WHERE后或ON后的與多表相關(guān)的匹配條件改寫為逆向SQL中的嵌套SQL形式;·3.3判斷WHERE后是否有對(duì)單表進(jìn)行篩選的條件,如果有,則在對(duì)在篩選條件中出現(xiàn)的具體表進(jìn)行源信息查詢時(shí),將篩選條件添加到WHERE篩選條件中;3.4如果WHERE中的篩選條件含有對(duì)多個(gè)表的不同屬性進(jìn)行的計(jì)算,則對(duì)相關(guān)表進(jìn)行逆向獲取原數(shù)據(jù)時(shí)在子查詢內(nèi)要用JOIN…ON…進(jìn)行關(guān)聯(lián)運(yùn)算,將需要進(jìn)行多表計(jì)算的篩選條件加入;3.5如果語句中含有ORDERBY從句,則分析expressioni是否含有TOP選項(xiàng),其中1彡i彡n,如不含有TOP選項(xiàng),則在逆向處理時(shí)將ORDERBY從句忽略,如含有TOP選項(xiàng),則獲取字段;3.6將3.3,3.4,3.5步驟所得多個(gè)字段改為SQL語言形式,并與SELECT字段進(jìn)行拼接,形成逆向SQL語句;步驟4嵌套含子查詢的SQL語句S3逆向方法輸入SQL語句S3,輸出:S3的逆向SQL;4.1掃描SQL語句,將SQL語句分層,并存儲(chǔ)層次結(jié)構(gòu);4.2根據(jù)對(duì)SQL語句的掃描,得到FROM后或WHERE后的嵌套SQL語句的需要進(jìn)行源信息查詢的表名;4.3由內(nèi)而外,依次分析每層SQL語句的表名是否在外層SQL中出現(xiàn),若不出現(xiàn),且中間表的信息不在篩選條件中出現(xiàn),則在層次內(nèi)對(duì)表進(jìn)行源信息的處理。如果層為簡(jiǎn)單的單表執(zhí)行的SQL語句,則用步驟2進(jìn)行處理;若層為多表執(zhí)行的簡(jiǎn)單SQL語句,則用步驟3進(jìn)行處理;4.4從內(nèi)而外,為最內(nèi)層SQL語句建立一個(gè)視圖,將視圖作為中間表,代替原SQL語句中的中間表部分,依次對(duì)當(dāng)前層SQL語句進(jìn)行4.3的處理,直到SQL語句變?yōu)楹?jiǎn)單的無嵌套查詢的形式;4.5由于用中間視圖代替中間表名,在對(duì)具體表進(jìn)行逆向處理時(shí),SQL語句中已經(jīng)不存在表名,在表所在層次的SQL語句中找到表與層中間表之間的關(guān)系,將這個(gè)連接條件作為層視圖和表之間的連接條件;4.6分析4.4所得到的SQL語句的WHERE后的篩選條件,當(dāng)含有中間表與實(shí)體表之間通過屬性值相等而進(jìn)行連接的篩選條件時(shí),由于是對(duì)具體表進(jìn)行屬性查詢,不能對(duì)中間表進(jìn)行連接操作,因此將篩選條件改為嵌套子查詢的形式,并在子查詢內(nèi)對(duì)4.4得到的中間視圖進(jìn)行連接;4.7對(duì)WHERE后其他的篩選條件進(jìn)行判斷,在對(duì)篩選條件中出現(xiàn)的具體表進(jìn)行源信息查詢時(shí),將與表對(duì)應(yīng)的篩選條件加到WHERE篩選條件中;4.8將得到的嵌套子查詢,WHERE語句相關(guān)信息與SELECT語句進(jìn)行拼接,得到逆向SQL語句。全文摘要本發(fā)明提供了一種基于結(jié)構(gòu)化查詢語言語句的源信息追蹤方法。首先將SQL語句按其不同的結(jié)構(gòu)進(jìn)行分類,之后對(duì)不同類型的SQL語句進(jìn)行逆向處理,在得到源信息后將源信息進(jìn)行存儲(chǔ),并在源信息上再次執(zhí)行原SQL語句,與之前得到的結(jié)果集進(jìn)行對(duì)比,得出結(jié)論。該源信息查詢方法已經(jīng)通過實(shí)際數(shù)據(jù)進(jìn)行了驗(yàn)證,驗(yàn)證結(jié)果證明該方法與其他數(shù)據(jù)血緣方法相比,可以在原有SQL的基礎(chǔ)上,直接對(duì)SQL語句進(jìn)行處理,將其有效的轉(zhuǎn)化成源信息查詢語句,并成功查找到對(duì)應(yīng)的源信息。本發(fā)明提供的數(shù)據(jù)追蹤方法適用于關(guān)系數(shù)據(jù)庫(kù)中源信息的查詢,可應(yīng)用在各領(lǐng)域中對(duì)源信息進(jìn)行的查詢和存儲(chǔ)。文檔編號(hào)G06F17/30GK102402615SQ20111043470公開日2012年4月4日申請(qǐng)日期2011年12月22日優(yōu)先權(quán)日2011年12月22日發(fā)明者劉國(guó)峰,劉建華,樸秀峰,毛瑞雪,申林山,黃少濱申請(qǐng)人:哈爾濱工程大學(xué)