本發(fā)明涉及數(shù)據(jù)庫(kù)領(lǐng)域,尤其涉及一種結(jié)構(gòu)化查詢語(yǔ)言(structuredquerylanguage,sql)腳本的處理方法及裝置。
背景技術(shù):
::大型企業(yè)信息技術(shù)(informationtechnology,it)系統(tǒng)龐大復(fù)雜,業(yè)務(wù)需求旺盛,為快速響應(yīng)新功能需求,it系統(tǒng)需要快速頻繁迭代實(shí)施it系統(tǒng)的上線。而大部分新功能需求上線都會(huì)涉及it系統(tǒng)數(shù)據(jù)模型(datamodel)的變更,因此每次新功能需求上線都有可能對(duì)支撐it系統(tǒng)的數(shù)據(jù)庫(kù)物理模型進(jìn)行變更。正常的it系統(tǒng)上線流程一般分為需求分析、開(kāi)發(fā)、測(cè)試、上線4個(gè)環(huán)節(jié),其中上線環(huán)節(jié)需要通過(guò)執(zhí)行若干個(gè)數(shù)據(jù)庫(kù)的上線sql腳本來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)物理模型的變更,這里執(zhí)行的上線sql腳本是一種實(shí)現(xiàn)靜態(tài)、離線的數(shù)據(jù)庫(kù)物理模型和配置數(shù)據(jù)變更的sql代碼,而不是用于滿足實(shí)際it系統(tǒng)業(yè)務(wù)功能需要而開(kāi)發(fā)的查詢、統(tǒng)計(jì)和持久化數(shù)據(jù)庫(kù)數(shù)據(jù)的sql代碼;通常情況下上線環(huán)節(jié)執(zhí)行的上線sql腳本數(shù)量遠(yuǎn)遠(yuǎn)大于上線需求量,每次上線環(huán)節(jié)執(zhí)行的上線sql腳本數(shù)量均數(shù)以百計(jì)。在傳統(tǒng)的上線環(huán)節(jié)中,開(kāi)發(fā)人員、測(cè)試人員及項(xiàng)目管理者更多的注重應(yīng)用程序的功能完善性和代碼可靠性,而對(duì)上線sql腳本的正確規(guī)范性重視不足,故時(shí)常出現(xiàn)由于上線sql腳本發(fā)布錯(cuò)誤而導(dǎo)致it系統(tǒng)上線延遲或上線回退的問(wèn)題,因此,對(duì)上線sql腳本進(jìn)行審查是保證it系統(tǒng)順利上線的關(guān)鍵。目前,對(duì)上線sql腳本的審查通常采用手工方式,即,由數(shù)據(jù)庫(kù)開(kāi)發(fā)管理員手工逐個(gè)對(duì)上線sql腳本的合規(guī)性進(jìn)行測(cè)試,如果發(fā)現(xiàn)上線sql腳本不合規(guī),手工進(jìn)行修改。然而,采用手工方式上線sql腳本進(jìn)行優(yōu)化存在以下幾個(gè) 方面的問(wèn)題:(1)人力成本高:由于每次it系統(tǒng)上線涉及的上線sql腳本的數(shù)量眾多,如電信bss(basicserviceset,基本服務(wù)集)系統(tǒng)的每次日常上線會(huì)涉及至少幾十個(gè)業(yè)務(wù)需求、幾百個(gè)sql腳本的變更發(fā)布,需要大量的數(shù)據(jù)庫(kù)開(kāi)發(fā)管理員測(cè)試并優(yōu)化上線sql腳本,人力成本高。(2)上線sql腳本的質(zhì)量得不到保證:由于開(kāi)發(fā)人員對(duì)編寫(xiě)上線sql腳本依據(jù)的規(guī)范文檔的理解不一致,導(dǎo)致編寫(xiě)的上線sql腳本質(zhì)量良莠不齊,而數(shù)據(jù)庫(kù)開(kāi)發(fā)管理員對(duì)上線sql腳本的合規(guī)性測(cè)試也完全依賴于個(gè)人經(jīng)驗(yàn)判斷,很難全面把控上線sql腳本的質(zhì)量。(3)上線sql腳本的執(zhí)行效率不高:現(xiàn)有技術(shù)只是對(duì)上線sql腳本中的sql語(yǔ)句進(jìn)行合規(guī)性檢測(cè),并不對(duì)上線sql腳本進(jìn)行合并等優(yōu)化,上線sql腳本數(shù)目仍然很多,在執(zhí)行眾多上線sql腳本上線過(guò)程中,由于上線sql腳本間的關(guān)系錯(cuò)綜復(fù)雜,而數(shù)據(jù)庫(kù)開(kāi)發(fā)管理員需要大量復(fù)制、粘貼上線sql腳本到執(zhí)行框中,在復(fù)制、粘貼操作中,很難保證上線sql腳本不發(fā)生錯(cuò)誤,同時(shí),復(fù)制、粘貼操作需要花費(fèi)大量的執(zhí)行時(shí)間,因此,數(shù)據(jù)庫(kù)上線sql腳本的執(zhí)行效率不高。綜上所述,現(xiàn)有的采用人工方式對(duì)上線sql腳本進(jìn)行審查時(shí),存在人力成本高、上線sql腳本的質(zhì)量得不到保證、執(zhí)行效率不高等問(wèn)題,影響it系統(tǒng)的上線進(jìn)度。技術(shù)實(shí)現(xiàn)要素:有鑒于此,本發(fā)明實(shí)施例期望提供一種上線sql腳本的處理方法及裝置,可以降低人力成本,保證腳本質(zhì)量,提高執(zhí)行效率。為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:一種上線結(jié)構(gòu)化查詢語(yǔ)言sql腳本的處理方法,所述方法包括:獲得文件列表中當(dāng)前處理文件的上線sql腳本;審查所述上線sql腳本中的sql語(yǔ)句,輸出錯(cuò)誤信息,所述錯(cuò)誤信息包 括所述上線sql腳本中的錯(cuò)誤sql語(yǔ)句或錯(cuò)誤注釋的位置信息及錯(cuò)誤說(shuō)明,所述錯(cuò)誤信息用于提示操作人員對(duì)所述錯(cuò)誤sql語(yǔ)句或錯(cuò)誤注釋進(jìn)行修改;針對(duì)通過(guò)審查的規(guī)范sql語(yǔ)句,根據(jù)規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型,對(duì)所述文件列表的各處理文件中的規(guī)范sql語(yǔ)句進(jìn)行拆分合并。上述方案中,所述審查所述上線sql腳本中的sql語(yǔ)句,輸出錯(cuò)誤信息,包括:提取所述上線sql腳本中的sql語(yǔ)句,輸出無(wú)效信息,所述無(wú)線信息包括所述上線sql腳本中不能被提取的無(wú)效sql語(yǔ)句或無(wú)效注釋的位置信息、無(wú)效說(shuō)明,所述無(wú)線信息用于所述提示操作人員對(duì)所述無(wú)效sql語(yǔ)句或無(wú)效注釋進(jìn)行修改;對(duì)通過(guò)提取的有效sql語(yǔ)句進(jìn)行語(yǔ)法分析,輸出語(yǔ)法錯(cuò)誤信息,所述語(yǔ)法錯(cuò)誤信息包括有語(yǔ)法錯(cuò)誤的sql語(yǔ)句的位置信息和語(yǔ)法錯(cuò)誤說(shuō)明,所述語(yǔ)法錯(cuò)誤信息用于所述提示所述操作人員對(duì)所述語(yǔ)法錯(cuò)誤的sql語(yǔ)句進(jìn)行修改。上述方案中,在對(duì)所述有效sql語(yǔ)句進(jìn)行語(yǔ)法分析時(shí),所述方法還包括:在對(duì)所述有效sql語(yǔ)句進(jìn)行語(yǔ)法分析確定所述有效sql語(yǔ)句為語(yǔ)法正確的規(guī)范sql語(yǔ)句時(shí),獲取所述規(guī)范sql語(yǔ)句的語(yǔ)法結(jié)構(gòu)生成所述規(guī)范sql語(yǔ)句的語(yǔ)法樹(shù),所述語(yǔ)法樹(shù)中包括關(guān)鍵字和操作對(duì)象。上述方案中,所述根據(jù)規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型,對(duì)所述文件列表的各處理文件中的規(guī)范sql語(yǔ)句進(jìn)行拆分合并,包括:將所述規(guī)范sql語(yǔ)句的語(yǔ)法樹(shù)與預(yù)設(shè)規(guī)則庫(kù)中語(yǔ)句類(lèi)型表進(jìn)行匹配,確定所述規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型;其中,所述語(yǔ)句類(lèi)型表包括sql語(yǔ)句的關(guān)鍵字和操作對(duì)象與語(yǔ)句類(lèi)型的對(duì)應(yīng)關(guān)系;將所述規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型與所述預(yù)設(shè)規(guī)則庫(kù)中的規(guī)則對(duì)應(yīng)表進(jìn)行匹配,獲得所述規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型對(duì)應(yīng)的分組編號(hào)和優(yōu)先級(jí),其中,所述規(guī)則對(duì)應(yīng)表包括sql語(yǔ)句的語(yǔ)句類(lèi)型對(duì)應(yīng)的分組編號(hào)和優(yōu)先級(jí);將所述文件列表的各處理文件中,屬于同一分組編號(hào)的規(guī)范sql語(yǔ)句按照優(yōu)先級(jí)順序合并到同一sql腳本中。上述方案中,在所述屬于同一分組編號(hào)的規(guī)范sql語(yǔ)句按照優(yōu)先級(jí)順序合并到同一sql腳本中后,所述方法還包括:在合并后的sql腳本中的每一條sol代碼后加入執(zhí)行終止代碼。一種上線結(jié)構(gòu)化查詢語(yǔ)言sql腳本的處理裝置,所述裝置包括:獲得單元,用于獲得文件列表中當(dāng)前處理文件的上線sql腳本;審查單元,用于審查所述獲得單元獲得的所述上線sql腳本中的sql語(yǔ)句,輸出錯(cuò)誤信息,所述錯(cuò)誤信息包括所述上線sql腳本中的錯(cuò)誤sql語(yǔ)句或錯(cuò)誤注釋的位置信息及錯(cuò)誤說(shuō)明,所述錯(cuò)誤信息用于提示操作人員對(duì)所述錯(cuò)誤sql語(yǔ)句或錯(cuò)誤注釋進(jìn)行修改;合并單元,用于針對(duì)通過(guò)審查單元審查的規(guī)范sql語(yǔ)句,根據(jù)規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型,對(duì)所述文件列表的各處理文件中的規(guī)范sql語(yǔ)句進(jìn)行拆分合并。上述方案中,所述審查單元包括:提取子單元和語(yǔ)法分析子單元,其中,所述提取子單元,用于提取所述獲得單元獲得的上線sql腳本中的sql語(yǔ)句,輸出無(wú)效信息,所述無(wú)線信息包括所述上線sql腳本中不能被提取的無(wú)效sql語(yǔ)句或無(wú)效注釋的位置信息、無(wú)效說(shuō)明,所述無(wú)線信息用于所述提示操作人員對(duì)所述無(wú)效sql語(yǔ)句或無(wú)效注釋進(jìn)行修改;所述語(yǔ)法分析子單元,用于對(duì)通過(guò)所述提取子單元提取的有效sql語(yǔ)句進(jìn)行語(yǔ)法分析,輸出語(yǔ)法錯(cuò)誤信息,所述語(yǔ)法錯(cuò)誤信息包括有語(yǔ)法錯(cuò)誤的sql語(yǔ)句的位置信息和語(yǔ)法錯(cuò)誤說(shuō)明,所述語(yǔ)法錯(cuò)誤信息用于所述提示所述操作人員對(duì)所述語(yǔ)法錯(cuò)誤的sql語(yǔ)句進(jìn)行修改。上述方案中,所述語(yǔ)法分析子單元,還用于在對(duì)所述有效sql語(yǔ)句進(jìn)行語(yǔ)法分析確定所述有效sql語(yǔ)句為語(yǔ)法正確的規(guī)范sql語(yǔ)句時(shí),獲取所述規(guī)范sql語(yǔ)句的語(yǔ)法結(jié)構(gòu)生成所述規(guī)范sql語(yǔ)句的語(yǔ)法樹(shù),所述語(yǔ)法樹(shù)中包括關(guān)鍵字和操作對(duì)象。上述方案中,所述合并單元包括匹配子單元和合并子單元,其中,所述匹配子單元,用于將所述規(guī)范sql語(yǔ)句的語(yǔ)法樹(shù)與預(yù)設(shè)規(guī)則庫(kù)中語(yǔ)句 類(lèi)型表進(jìn)行匹配,確定所述規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型;其中,所述語(yǔ)句類(lèi)型表包括sql語(yǔ)句的關(guān)鍵字和操作對(duì)象與語(yǔ)句類(lèi)型的對(duì)應(yīng)關(guān)系;將所述規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型與所述預(yù)設(shè)規(guī)則庫(kù)中的規(guī)則對(duì)應(yīng)表進(jìn)行匹配,獲得所述規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型對(duì)應(yīng)的分組編號(hào)和優(yōu)先級(jí),其中,所述規(guī)則對(duì)應(yīng)表包括sql語(yǔ)句的語(yǔ)句類(lèi)型對(duì)應(yīng)的分組編號(hào)和優(yōu)先級(jí);所述合并子單元,用于將所述文件列表的各處理文件中,屬于所述匹配子單元確定的同一分組編號(hào)的規(guī)范sql語(yǔ)句按照優(yōu)先級(jí)順序合并到同一sql腳本中。上述方案中,所述裝置還包括加入單元,其中,所述加入單元,還用于在所述合并單元合并后的sql腳本中的每一條sol代碼后加入執(zhí)行終止代碼。本發(fā)明實(shí)施例提供了一種上線sql腳本的處理方法及裝置,獲得文件列表中當(dāng)前處理文件的上線sql腳本;先自動(dòng)審查所述上線sql腳本中的sql語(yǔ)句,輸出錯(cuò)誤信息,用于提示操作人員對(duì)所述錯(cuò)誤sql語(yǔ)句或錯(cuò)誤注釋進(jìn)行修改;大大減少人工審查的工作量,提升了審查的效率與準(zhǔn)確性,提升了上線sql腳本質(zhì)量;然后針對(duì)通過(guò)審查的規(guī)范sql語(yǔ)句,根據(jù)規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型,對(duì)所述文件列表的各處理文件中的規(guī)范sql語(yǔ)句進(jìn)行拆分合并,大大減少了上線sql腳本數(shù)量,減少了上線執(zhí)行sql腳本的時(shí)間,減少了上線時(shí)應(yīng)用停機(jī)時(shí)間,并且提升了業(yè)務(wù)質(zhì)量。且合并后的各上線sql腳本之間關(guān)系簡(jiǎn)單,保證數(shù)據(jù)庫(kù)開(kāi)發(fā)管理員的操作效率,進(jìn)而提升上線sql腳本的執(zhí)行效率。附圖說(shuō)明圖1為本發(fā)明實(shí)施例1提供的一種上線sql腳本的處理方法的流程示意圖;圖2為本發(fā)明實(shí)施例2提供的一種上線sql腳本的處理裝置的結(jié)構(gòu)框圖;圖3為本發(fā)明實(shí)施例3提供的另一種上線sql腳本的處理裝置的結(jié)構(gòu)框圖。具體實(shí)施方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述。實(shí)施例1本實(shí)施例提供了一種上線sql腳本的處理方法,如圖1所示,本實(shí)施例方法的處理流程包括以下步驟:步驟101、獲得文件列表中當(dāng)前處理文件的上線sql腳本。在有新功能需求上線時(shí),開(kāi)發(fā)人員會(huì)先進(jìn)行需求分析,然后按sql語(yǔ)句的編寫(xiě)格式編寫(xiě)上線sql腳本,上線sql腳本的編寫(xiě)格式由實(shí)現(xiàn)編制的規(guī)范文檔進(jìn)行規(guī)范約束,sql腳本的存儲(chǔ)格式統(tǒng)一采用文本格式、并以.sql或.txt作為文件后綴。為避免后續(xù)處理裝置讀取上線sql腳本時(shí)出現(xiàn)中文亂碼,sql腳本的編碼格式采用統(tǒng)一的編碼格式。開(kāi)發(fā)人員編寫(xiě)好上線sql腳本并存儲(chǔ)后,處理裝置會(huì)對(duì)這些上線sql腳本進(jìn)行審查。在沒(méi)有連接數(shù)據(jù)庫(kù)即離線的情況下,處理裝置可以通過(guò)程序接口讀取當(dāng)前處理文件中的上線sql腳本,并將讀取到的上線sql腳本存入內(nèi)存中。所述當(dāng)前處理文件為需要上線的文件目錄下的一個(gè)文件;處理裝置需要先獲取指定目錄下的文件列表,然后對(duì)獲取的文件列表按文件名進(jìn)行排序,然后獲取當(dāng)前處理文件及其所在的文本位置,打開(kāi)當(dāng)前處理文件的句柄開(kāi)始讀取當(dāng)前處理文件中的上線sql腳本。步驟102、審查所述上線sql腳本中的sql語(yǔ)句,輸出錯(cuò)誤信息。所述處理裝置讀取完成當(dāng)前處理文件中的上線sql腳本后,會(huì)對(duì)存儲(chǔ)在內(nèi)存中的上線sql腳本的sql語(yǔ)句和注釋進(jìn)行審查,如果審查發(fā)現(xiàn)有錯(cuò)誤sql語(yǔ)句或錯(cuò)誤注釋?zhuān)蜁和彶椋敵鲥e(cuò)誤信息,所述錯(cuò)誤信息包括所述上線sql腳本中的錯(cuò)誤sql語(yǔ)句或錯(cuò)誤注釋的位置信息及錯(cuò)誤說(shuō)明,所述錯(cuò)誤信息用于提示操作人員對(duì)所述錯(cuò)誤sql語(yǔ)句或錯(cuò)誤注釋進(jìn)行修改;操作人員看到該錯(cuò)誤信息后,就會(huì)按照該錯(cuò)誤說(shuō)明修改相應(yīng)位置處的錯(cuò)誤sql語(yǔ)句或錯(cuò)誤注釋。然 后處理裝置對(duì)修改后的sql語(yǔ)句或注釋重新進(jìn)行審查,最終所述上線sql腳本中的sql語(yǔ)句和注釋都通過(guò)審查后,表明該上線sql腳本中sql語(yǔ)句都為規(guī)范sql語(yǔ)句??蛇x的,對(duì)上線sql腳本的審查過(guò)程可以如下步驟所述:步驟s1、提取所述上線sql腳本中的sql語(yǔ)句,輸出無(wú)效信息,所述無(wú)線信息包括所述上線sql腳本中的無(wú)效sql語(yǔ)句或無(wú)效注釋的位置信息及無(wú)效說(shuō)明,所述無(wú)線信息用于所述提示操作人員對(duì)所述無(wú)效sql語(yǔ)句或無(wú)效注釋進(jìn)行修改。所述處理裝置在提取上線sql腳本中的sql語(yǔ)句和注釋過(guò)程中,如果sql語(yǔ)句無(wú)法識(shí)別或注釋格式不正確等,處理裝置就不能提取出該上線sql腳本中的sql語(yǔ)句和注釋?zhuān)藭r(shí)就認(rèn)為發(fā)現(xiàn)了無(wú)效sql語(yǔ)句或無(wú)效注釋?zhuān)鎏幚硌b置會(huì)終止后續(xù)提取,記錄所述上線sql腳本中的無(wú)效sql語(yǔ)句或無(wú)效注釋的位置信息、無(wú)效說(shuō)明這些無(wú)效信息,并輸出該無(wú)效信息,提示操作人員根據(jù)無(wú)效說(shuō)明對(duì)相應(yīng)位置處的無(wú)效sql語(yǔ)句或無(wú)效注釋進(jìn)行修改;操作人員修改完成后,處理裝置對(duì)修改后的sql語(yǔ)句或注釋重新進(jìn)行提取。步驟s2、對(duì)通過(guò)提取的有效sql語(yǔ)句進(jìn)行語(yǔ)法分析,輸出語(yǔ)法錯(cuò)誤信息,所述語(yǔ)法錯(cuò)誤信息包括有語(yǔ)法錯(cuò)誤的sql語(yǔ)句的位置信息和語(yǔ)法錯(cuò)誤說(shuō)明,所述語(yǔ)法錯(cuò)誤信息用于所述提示所述操作人員對(duì)所述語(yǔ)法錯(cuò)誤的sql語(yǔ)句進(jìn)行修改。所述處理裝置提取出所述sql語(yǔ)句后,表明該sql語(yǔ)句是有效的,對(duì)于有效的sql語(yǔ)句,所述處理裝置會(huì)對(duì)該有效sql語(yǔ)句進(jìn)行語(yǔ)法分析,處理裝置可以先對(duì)提取的有效sql語(yǔ)句進(jìn)行詞法分析,即分析獲取該條有效sql語(yǔ)句中的單詞;在此基礎(chǔ)上,對(duì)該條有效sql語(yǔ)句進(jìn)行語(yǔ)法分析,獲取該條有效sql語(yǔ)句的語(yǔ)法結(jié)構(gòu);如果在語(yǔ)法分析過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則所述處理裝置會(huì)終止對(duì)后續(xù)語(yǔ)句的語(yǔ)法分析,記錄所述上線sql腳本中的語(yǔ)法錯(cuò)誤的sql語(yǔ)句的位置信息及語(yǔ)法錯(cuò)誤說(shuō)明這些語(yǔ)法錯(cuò)誤信息,并輸出該語(yǔ)法錯(cuò)誤信息,提示操作人員對(duì)相應(yīng)位置處的語(yǔ)法錯(cuò)誤的sql語(yǔ)句進(jìn)行修改;操作人員修改完成后, 處理裝置會(huì)對(duì)修改后的sql語(yǔ)句或注釋重新進(jìn)行語(yǔ)法分析。這樣最終所述上線sql腳本中的sql語(yǔ)句和注釋都通過(guò)語(yǔ)法分析后,表明該上線sql腳本中sql語(yǔ)句都為語(yǔ)法正確的規(guī)范sql語(yǔ)句。處理裝置在對(duì)所述有效sql語(yǔ)句進(jìn)行語(yǔ)法分析時(shí),所述方法還包括:在對(duì)所述有效sql語(yǔ)句進(jìn)行語(yǔ)法分析確定所述有效sql語(yǔ)句為語(yǔ)法正確的規(guī)范sql語(yǔ)句時(shí),獲取所述規(guī)范sql語(yǔ)句的語(yǔ)法結(jié)構(gòu)生成所述規(guī)范sql語(yǔ)句的語(yǔ)法樹(shù),所述語(yǔ)法樹(shù)中包括關(guān)鍵字和操作對(duì)象。示例的,如對(duì)有效sql語(yǔ)句“createtablecas.table_id”進(jìn)行語(yǔ)法分析時(shí),可以先進(jìn)行詞法分析,獲取該條有效sql語(yǔ)句中的單詞create、table、cas.table_id,然后進(jìn)行語(yǔ)法分析獲得該條有效sql語(yǔ)句的關(guān)鍵字create和操作對(duì)象table,生成一個(gè)語(yǔ)法樹(shù),語(yǔ)法樹(shù)是以樹(shù)形結(jié)構(gòu)來(lái)描述一條sql語(yǔ)句的語(yǔ)法結(jié)構(gòu)。在這里需要說(shuō)明的是,上述進(jìn)行語(yǔ)法分析以及生成語(yǔ)法樹(shù)的方法為本領(lǐng)域人員都清楚了解的,在此不再詳述。根據(jù)上述步驟將當(dāng)前文件中的上線sql腳本審查完成后,就可以進(jìn)行步驟101獲得文件列表中下一個(gè)處理文件中的上線sql腳本,繼續(xù)進(jìn)行審查,直到將文件列表中的處理文件都審查完成。步驟103、針對(duì)通過(guò)審查的規(guī)范sql語(yǔ)句,根據(jù)規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型,對(duì)所述文件列表的各處理文件中的規(guī)范sql語(yǔ)句進(jìn)行拆分合并。處理裝置將所述文件列表的各處理文件中的sql語(yǔ)句都審查完成后,針對(duì)這些通過(guò)審查的規(guī)范sql語(yǔ)句,處理裝置對(duì)所述文件列表的各處理文件中原有上線sql腳本中的規(guī)范sql語(yǔ)句進(jìn)行拆分后,會(huì)根據(jù)規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型,將某些原屬于不同上線sql腳本中的規(guī)范sql語(yǔ)句合并在同一個(gè)上線sql腳本中??蛇x的,拆分合并的過(guò)程如下步驟:步驟q1、將所述規(guī)范sql語(yǔ)句的語(yǔ)法樹(shù)與預(yù)設(shè)規(guī)則庫(kù)中語(yǔ)句類(lèi)型表進(jìn)行匹配,確定所述規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型。其中,所述語(yǔ)句類(lèi)型表包括sql語(yǔ)句的關(guān)鍵字和操作對(duì)象與語(yǔ)句類(lèi)型的對(duì) 應(yīng)關(guān)系。示例的,如表1所示,一種sql語(yǔ)句可以用一個(gè)正則表達(dá)式來(lái)表示,一種sql語(yǔ)句可以唯一對(duì)應(yīng)一組關(guān)鍵字和操作對(duì)象,一組關(guān)鍵字和操作對(duì)象對(duì)應(yīng)設(shè)置一個(gè)語(yǔ)句類(lèi)型,如可以設(shè)置為在sql語(yǔ)句的正則表達(dá)式為(drop\s+(table)\s+[^;[:space:]]+[;]?\.?){1},即sql語(yǔ)句的操作對(duì)象為table關(guān)鍵字為drop時(shí),設(shè)置對(duì)應(yīng)的語(yǔ)句類(lèi)型為sqd1。表1所述語(yǔ)句類(lèi)型表中存儲(chǔ)有sql語(yǔ)句的關(guān)鍵字和操作對(duì)象與語(yǔ)句類(lèi)型的對(duì)應(yīng)關(guān)系。故在語(yǔ)法分析所述規(guī)范sql語(yǔ)句“createtablecas.table_id”獲得包含 有關(guān)鍵字“create”和操作對(duì)象“table”的語(yǔ)法樹(shù)后,可以用語(yǔ)法樹(shù)與語(yǔ)句類(lèi)型表中的關(guān)鍵字和操作對(duì)象進(jìn)行匹配,確定所述規(guī)范sql語(yǔ)句關(guān)鍵字為“create”且操作對(duì)象為“table”時(shí)對(duì)應(yīng)的語(yǔ)句類(lèi)型為“sqd3”。步驟q2、將所述規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型與所述預(yù)設(shè)規(guī)則庫(kù)中的規(guī)則對(duì)應(yīng)表進(jìn)行匹配,獲得所述規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型對(duì)應(yīng)的分組編號(hào)和優(yōu)先級(jí)。其中,所述規(guī)則對(duì)應(yīng)表包括sql語(yǔ)句的語(yǔ)句類(lèi)型對(duì)應(yīng)的分組編號(hào)和優(yōu)先級(jí)。示例的,如表2所示,規(guī)則對(duì)應(yīng)表中可以是規(guī)則表達(dá)式對(duì)應(yīng)的分組編號(hào)和優(yōu)先級(jí),規(guī)則表達(dá)式由多個(gè)語(yǔ)句類(lèi)型通過(guò)邏輯關(guān)系符號(hào)組合而成,標(biāo)識(shí)多個(gè)語(yǔ)句類(lèi)型的集合,所述邏輯關(guān)系符號(hào)包括與(&)、或(|)、非(!)。一個(gè)規(guī)則對(duì)應(yīng)表內(nèi)包含的各語(yǔ)句類(lèi)型對(duì)應(yīng)同一個(gè)分組編號(hào)和優(yōu)先級(jí)。表2在設(shè)置上述規(guī)則表達(dá)式對(duì)應(yīng)的分組編號(hào)和優(yōu)先級(jí)時(shí),是根據(jù)經(jīng)驗(yàn)來(lái)制定的,如表2所示,可以將表示只刪除對(duì)象的sql語(yǔ)句設(shè)置一個(gè)分組編號(hào)rb1,將操作類(lèi)型為新建的sql語(yǔ)句設(shè)置一個(gè)分組編號(hào)rb2,但是操作類(lèi)型為新建時(shí),可以是只新建對(duì)象如新建表對(duì)象或新建索引對(duì)象;也可以是新建表指定表空間、新建索引指定表空間、不指定表空間屬性等新建類(lèi)型,這幾個(gè)新建類(lèi)型之間有一定的依賴關(guān)系,必然是先新建表對(duì)象或新建索引對(duì)象,才能新建表指定表空間,然后新建索引指定表空間、不指定表空間屬性;如果將這幾種語(yǔ)句類(lèi)型的sql語(yǔ)句采用不同的執(zhí)行順序可能會(huì)導(dǎo)致不同的處理結(jié)果,為解決這個(gè)問(wèn)題引入優(yōu)先級(jí),優(yōu)先級(jí)的設(shè)定是根據(jù)各sql語(yǔ)句的依賴關(guān)系來(lái)設(shè)定的。如表2所示,可以按照該依賴關(guān)系將編號(hào)為2、3、4、5的規(guī)則表達(dá)式分別設(shè)置為分組編號(hào)為rb2的第1、2、3、4優(yōu)先級(jí)。步驟q3、將所述文件列表的各處理文件中,屬于同一分組編號(hào)的規(guī)范sql語(yǔ)句按照優(yōu)先級(jí)順序合并到同一sql腳本中。通過(guò)上述匹配可以獲得各規(guī)范sql語(yǔ)句對(duì)應(yīng)的分組編號(hào)和優(yōu)先級(jí);記錄所述文件列表的各處理文件中sql腳本的各規(guī)范sql語(yǔ)句的分組編號(hào)和優(yōu)先級(jí);然后針對(duì)所述文件列表的所有處理文件的所有規(guī)范sql語(yǔ)句,將屬于同一分組編號(hào)的規(guī)范sql語(yǔ)句合并在同一sql腳本中,同一sql腳本中處于同一優(yōu)先級(jí)的規(guī)范sql語(yǔ)句排列時(shí)無(wú)先后順序,處于不同優(yōu)先級(jí)的規(guī)范sql語(yǔ)句按照優(yōu)先級(jí)順序排列。示例的,假設(shè)所述文件列表的各處理文件中有以下三個(gè)規(guī)范sql腳本:腳本一:createtablecas.table_id(idint,namevarchar2(30));createtablecas.table_list(idint,namevarchar2(30));腳本二:createtablecas.table_class(class_idint,namevarchar2(30));altertablecas.table_listaddflagnumber;腳本三:insertintocas.table_list(id,name)values(1,'one');altertabledbmon.table_classrenamecolumnnametoclass_name;處理裝置在對(duì)腳本1中的sql語(yǔ)句進(jìn)行語(yǔ)法分析生成語(yǔ)法樹(shù)時(shí),獲得腳本一中第一條sql語(yǔ)句的關(guān)鍵字為create和操作對(duì)象為table,匹配預(yù)設(shè)規(guī)則庫(kù)中語(yǔ)句類(lèi)型表后獲得其語(yǔ)句類(lèi)型為sqd3,然后與規(guī)則對(duì)應(yīng)表進(jìn)行匹配獲得語(yǔ)句類(lèi)型sqd3對(duì)應(yīng)的分組編號(hào)為rb2,優(yōu)先級(jí)為1。同理,處理裝置匹配腳本一中第二條sql語(yǔ)句的語(yǔ)句類(lèi)型為sqd3,匹配的分組編號(hào)為rb2,優(yōu)先級(jí)為1。由于腳本一所有sql語(yǔ)句屬于同一分組編號(hào),因此合并到一個(gè)腳本rb2_20151119.sql中,由于兩個(gè)語(yǔ)句的優(yōu)先級(jí)都為1,故這兩個(gè)sql語(yǔ)句在腳本rb2_20151119.sql中沒(méi)有先后順序。按照以上所述,處理裝置匹配腳本二中第一條sql語(yǔ)句的語(yǔ)句類(lèi)型為sqd3,匹配的分組編號(hào)為rb2優(yōu)先級(jí)為1;匹配腳本二中第二條sql語(yǔ)句的語(yǔ)句類(lèi)型為sqd2,匹配的分組編號(hào)為rb3,優(yōu)先級(jí)為1。處理裝置分析完腳本二后,發(fā)現(xiàn)腳本二第一條sql語(yǔ)句的分組編號(hào)與腳本一相同,因此將該第一條sql語(yǔ)句合并到腳本rb2_20151119.sql,腳本二第一條sql語(yǔ)句的優(yōu)先級(jí)也為1,故腳本二第一條sql語(yǔ)句與腳本rb2_20151119.sql中的sql語(yǔ)句的排列沒(méi)有先后順序,可以排在腳本rb2_20151119.sql的最后。腳本二第二條sql語(yǔ)句的分組編號(hào)為:rb3,與上述的其他sql語(yǔ)句不屬于同一分組編號(hào),故將第二條sql語(yǔ)句放入腳本rb3_20151119.sql中。即對(duì)腳本二中的sql語(yǔ)句進(jìn)行了拆分,并將其合并到相應(yīng)的腳本中。按照以上所述,處理裝置匹配腳本三中第一條sql語(yǔ)句的語(yǔ)句類(lèi)型為sqm1,匹配的分組編號(hào)為rb4,優(yōu)先級(jí)為1;匹配腳本三中第二條語(yǔ)句的語(yǔ)句類(lèi)型為sqd2,匹配的分組編號(hào)為rb3,優(yōu)先級(jí)為1。腳本三中第一條sql語(yǔ)句的分組編號(hào)為rb4,與上述的其他sql語(yǔ)句不屬于同一分組編號(hào),故將第一條sql語(yǔ)句放入腳本rb4_20151119.sql中。腳本三第二條sql語(yǔ)句的分組編號(hào)為rb3,與腳本二中第二條sql語(yǔ)句的分組 編號(hào)相同,故將腳本三第二條sql語(yǔ)句合并到腳本rb3_20151119.sql中。即對(duì)腳本三中的sql語(yǔ)句進(jìn)行了拆分,并將其合并到相應(yīng)的腳本中。這樣就完成了上述三個(gè)腳本的拆分合并,合并結(jié)果為:腳本rb2_20151119.sql:createtablecas.table_id(idint,namevarchar2(30));createtablecas.table_list(idint,namevarchar2(30));createtablecas.table_class(class_idint,namevarchar2(30));腳本rb3_20151119.sql:altertablecas.table_listaddflagnumber;altertabledbmon.table_classrenamecolumnnametoclass_name;腳本rb4_20151119.sql:insertintocas.table_list(id,name)values(1,'one');可選的,處理裝置將屬于同一分組編號(hào)的規(guī)范sql語(yǔ)句按照優(yōu)先級(jí)順序合并到同一sql腳本中后,還可以在合并后的sql腳本中的每一條sol代碼后加入執(zhí)行終止代碼。處理裝置將上線sql腳本進(jìn)行上述處理后,可以將處理后的sql腳本直接輸出到終端或保存到表格文檔中。由于在每一條sol代碼后加入有執(zhí)行終止代碼,在執(zhí)行sql腳本的過(guò)程中,在當(dāng)前sql語(yǔ)句執(zhí)行異常后,可以中止上線sql腳本執(zhí)行,并打印錯(cuò)誤sql語(yǔ)句的代碼與執(zhí)行sql語(yǔ)句的位置。本實(shí)施例方法通過(guò)自動(dòng)審查sql腳本內(nèi)容,大大減少人工審查的工作量,提升了審查的效率與準(zhǔn)確性,提升了上線sql腳本質(zhì)量;通過(guò)sql腳本中sql語(yǔ)句的拆分合并大大減少了上線sql腳本數(shù)量,減少了上線執(zhí)行sql腳本的時(shí)間,減少了上線時(shí)應(yīng)用停機(jī)時(shí)間,并且提升了業(yè)務(wù)質(zhì)量。且合并后的各上線sql腳本之間關(guān)系簡(jiǎn)單,保證數(shù)據(jù)庫(kù)開(kāi)發(fā)管理員的操作效率,進(jìn)而提升上線sql腳本的執(zhí)行效率。實(shí)施例2本發(fā)明實(shí)施例還提供了一種上線sql腳本的處理裝置,如圖2所示,所述 裝置包括:獲得單元201,審查單元202,合并單元203,其中,獲得單元201,用于獲得文件列表中當(dāng)前處理文件的上線sql腳本;審查單元202,用于審查所述獲得單元201獲得的所述上線sql腳本中的sql語(yǔ)句,輸出錯(cuò)誤信息,所述錯(cuò)誤信息包括所述上線sql腳本中的錯(cuò)誤sql語(yǔ)句或錯(cuò)誤注釋的位置信息及錯(cuò)誤說(shuō)明,所述錯(cuò)誤信息用于提示操作人員對(duì)所述錯(cuò)誤sql語(yǔ)句或錯(cuò)誤注釋進(jìn)行修改;合并單元203,用于針對(duì)通過(guò)審查單元202審查的規(guī)范sql語(yǔ)句,根據(jù)規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型,對(duì)所述文件列表的各處理文件中的規(guī)范sql語(yǔ)句進(jìn)行拆分合并??蛇x的,如圖3所示,所述審查單元202包括:提取子單元2021和語(yǔ)法分析子單元2022,其中,所述提取子單元2021,用于提取所述獲得單元201獲得的上線sql腳本中的sql語(yǔ)句,輸出無(wú)效信息,所述無(wú)線信息包括所述上線sql腳本中不能被提取的無(wú)效sql語(yǔ)句或無(wú)效注釋的位置信息、無(wú)效說(shuō)明,所述無(wú)線信息用于所述提示操作人員對(duì)所述無(wú)效sql語(yǔ)句或無(wú)效注釋進(jìn)行修改;所述語(yǔ)法分析子單元2022,用于對(duì)通過(guò)所述提取子單元2021提取的有效sql語(yǔ)句進(jìn)行語(yǔ)法分析,輸出語(yǔ)法錯(cuò)誤信息,所述語(yǔ)法錯(cuò)誤信息包括有語(yǔ)法錯(cuò)誤的sql語(yǔ)句的位置信息和語(yǔ)法錯(cuò)誤說(shuō)明,所述語(yǔ)法錯(cuò)誤信息用于所述提示所述操作人員對(duì)所述語(yǔ)法錯(cuò)誤的sql語(yǔ)句進(jìn)行修改??蛇x的,所述語(yǔ)法分析子單元2022,還用于在對(duì)所述有效sql語(yǔ)句進(jìn)行語(yǔ)法分析確定所述有效sql語(yǔ)句為語(yǔ)法正確的規(guī)范sql語(yǔ)句時(shí),獲取所述規(guī)范sql語(yǔ)句的語(yǔ)法結(jié)構(gòu)生成所述規(guī)范sql語(yǔ)句的語(yǔ)法樹(shù),所述語(yǔ)法樹(shù)中包括關(guān)鍵字和操作對(duì)象??蛇x的,如圖3所示,所述合并單元203包括匹配子單元2031和合并子單元2032,其中,所述匹配子單元2031,用于將所述規(guī)范sql語(yǔ)句的語(yǔ)法樹(shù)與預(yù)設(shè)規(guī)則庫(kù)中語(yǔ)句類(lèi)型表進(jìn)行匹配,確定所述規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型;其中,所述語(yǔ)句 類(lèi)型表包括sql語(yǔ)句的關(guān)鍵字和操作對(duì)象與語(yǔ)句類(lèi)型的對(duì)應(yīng)關(guān)系;將所述規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型與所述預(yù)設(shè)規(guī)則庫(kù)中的規(guī)則對(duì)應(yīng)表進(jìn)行匹配,獲得所述規(guī)范sql語(yǔ)句的語(yǔ)句類(lèi)型對(duì)應(yīng)的分組編號(hào)和優(yōu)先級(jí),其中,所述規(guī)則對(duì)應(yīng)表包括sql語(yǔ)句的語(yǔ)句類(lèi)型對(duì)應(yīng)的分組編號(hào)和優(yōu)先級(jí);所述合并子單元2032,用于將所述文件列表的各處理文件中,屬于所述匹配子單元2031確定的同一分組編號(hào)的規(guī)范sql語(yǔ)句按照優(yōu)先級(jí)順序合并到同一sql腳本中??蛇x的,如圖3所示,所述裝置還包括加入單元204,其中,所述加入單元204,還用于在所述合并單元203合并后的sql腳本中的每一條sql代碼后加入執(zhí)行終止代碼。在實(shí)際應(yīng)用中,本實(shí)施例中所述的獲得單元201,審查單元202,合并單元203和加入單元204可以由處理裝置上的中央處理器(cpu)、微處理器(mpu)、數(shù)字信號(hào)處理器(dsp)或現(xiàn)場(chǎng)可編程門(mén)陣列(fpga)、調(diào)制解調(diào)器等器件實(shí)現(xiàn)。本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用硬件實(shí)施例、軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤(pán)存儲(chǔ)器和光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專(zhuān)用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備 以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。當(dāng)前第1頁(yè)12當(dāng)前第1頁(yè)12