一種對sql語句進行封裝的方法及系統的制作方法【專利摘要】本發明公開一種對SQL語句進行封裝的方法及系統。所述方法包括:獲取待封裝的SQL語句中每一個輸出參數的數據類型;建立自定義類型,所述自定義類型中包括一個或多個變量,每個變量的數據類型分別與待封裝的SQL語句中的一個輸出參數的數據類型相對應;創建包含所述待封裝的SQL語句的函數;所述函數至少還包括輸出參數,所述輸出參數的類型與所述自定義類型相同。采用本發明的方法或系統,可以使用函數對SQL語句進行封裝,從而不必輸入大量SQL代碼,就可以對Oracle數據庫進行管理。【專利說明】-種對SQL語句進行封裝的方法及系統【
技術領域:
】[0001]本發明涉及程序開發領域,特別是涉及一種對SQL語句進行封裝的方法及系統。【
背景技術:
】[0002]結構化查詢語言(StructuredQueryLanguage,SQL),是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統。結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。[0003]現有技術中,對于Oracle數據庫的管理,一般是輸入或者黏貼SQL語句。但是,現有技術中,使用SQL語句對Oracle數據庫進行管理時,需要輸入大量(通常為上百個字符)的SQL代碼,十分復雜。這進一步導致現有技術中,對Oracle數據庫的管理效率較為低下。【
發明內容】[0004]本發明的目的是提供一種對SQL語句進行封裝的方法及系統,可以使用函數對SQL語句進行封裝,從而不必輸入大量SQL代碼,就可以對Oracle數據庫進行管理。[0005]為實現上述目的,本發明提供了如下方案:[0006]-種對SQL語句進行封裝的方法,包括:[0007]獲取待封裝的SQL語句中每一個輸出參數的數據類型;[0008]建立自定義類型,所述自定義類型中包括一個或多個變量,每個變量的數據類型分別與待封裝的SQL語句中的一個輸出參數的數據類型相對應;[0009]創建包含所述待封裝的SQL語句的函數;[0010]所述函數至少還包括輸出參數,所述輸出參數的類型與所述自定義類型相同。[0011]可選的,所述SQL語句用于查詢數據表中的數據,所述獲取待封裝的SQL語句中每一個輸出參數的數據類型,包括:[0012]登陸SQL*PLUS系統;[0013]從SQL*PLUS系統中獲取待查詢的數據表中的數據的數據類型。[0014]可選的,所述函數還包括輸入參數。[0015]可選的,所述自定義類型包括:子類型,普通類型,或者帶成員函數的類型體。[0016]一種對SQL語句進行封裝的系統,包括:[0017]數據類型獲取單元,用于獲取待封裝的SQL語句中每一個輸出參數的數據類型;[0018]自定義類型建立單元,用于建立自定義類型,所述自定義類型中包括一個或多個變量,每個變量的數據類型分別與待封裝的SQL語句中的一個輸出參數的數據類型相對應;[0019]函數創建單元,用于創建包含所述待封裝的SQL語句的函數;[0020]所述函數至少還包括輸出參數,所述輸出參數的類型與所述自定義類型相同。[0021]可選的,所述SQL語句用于查詢數據表中的數據,所述數據類型獲取單元,包括:[0022]登陸子單元,用于登陸SQL*PLUS系統;[0023]數據類型獲取子單元,從SQL*PLUS系統中獲取待查詢的數據表中的數據的數據類型。[0024]可選的,所述函數還包括輸入參數。[0025]可選的,所述自定義類型包括:子類型,普通類型,或者帶成員函數的類型體。[0026]根據本發明提供的具體實施例,本發明公開了以下技術效果:[0027]本發明的對SQL語句進行封裝的方法及系統,通過使用函數對SQL語句進行封裝,當工作人員需要輸入該SQL語句時,只需要調用封裝后的函數,就可以實現該SQL語句的功能,從而不必輸入大量SQL代碼,就可以對Oracle數據庫進行管理。【專利附圖】【附圖說明】[0028]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。[0029]圖1為本發明的對SQL語句進行封裝的方法實施例的流程圖;[0030]圖2為本發明的對SQL語句進行封裝的系統實施例的結構圖。【具體實施方式】[0031]下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。[0032]為使本發明的上述目的、特征和優點能夠更加明顯易懂,下面結合附圖和具體實施方式對本發明作進一步詳細的說明。[0033]圖1為本發明的對SQL語句進行封裝的方法實施例的流程圖。如圖1所示,所述方法可以包括:[0034]步驟101:獲取待封裝的SQL語句中每一個輸出參數的數據類型;[0035]所述SQL語句可以是執行查詢功能的語句。所述SQL語句可以包括多個輸出參數,每個輸出參數與一個待查詢的數據相對應。在Oracle數據庫中,待查詢的數據可以存儲在對象,視圖或者表中。[0036]為了獲取待查詢的數據的數據類型,可以登陸SQL*PLUS系統;從SQL*PLUS系統中獲取待查詢的數據表中的數據的數據類型。SQL*PLUS是與Oracle進行交互的客戶端工具。在SQL*PLUS中,可以運行SQL*PLUS命令與SQL語句。[0037]步驟102:建立自定義類型,所述自定義類型中包括一個或多個變量,每個變量的數據類型分別與待封裝的SQL語句中的一個輸出參數的數據類型相對應;[0038]所述自定義類型可以包括:子類型,普通類型,或者帶成員函數的類型體。[0039]本實施例中,之所以要建立自定義類型,是因為執行查詢功能的SQL語句的一個特點是,包括多個輸出參數,因此,需要用自定義類型,來存儲多個輸出參數,作為后續步驟中創建的函數的返回值。[0040]每個變量的數據類型分別與待封裝的SQL語句中的一個輸出參數的數據類型相對應,是指某一個變量的數據類型與SQL語句中的一個輸出參數的數據類型是相同的。例如,變量a,用來表示SQL語句中的一個輸出參數username;如果username的數據類型為varchar2,則變量a的數據類型也為varchar2。[0041]步驟103:創建包含所述待封裝的SQL語句的函數;[0042]所述函數至少還包括輸出參數,所述輸出參數的類型與所述自定義類型相同。[0043]步驟103可以將SQL語句封裝成函數的形式。所述輸出參數指的是所述函數的返回值。由于步驟102中,建立了自定義類型,用來存儲多個輸出參數,作為后續步驟中創建的函數的返回值。所以步驟103中,所述輸出參數的類型與所述自定義類型相同。[0044]需要說明的是,所述函數根據實際需求,還可以包括輸入參數。[0045]本實施例中,通過使用函數對SQL語句進行封裝,當工作人員需要輸入該SQL語句時,只需要調用封裝后的函數,就可以實現該SQL語句的功能,從而不必輸入大量SQL代碼,就可以對Oracle數據庫進行管理。[0046]此外,本實施例中,還采用自定義類型,解決了SQL語句中包含多個輸出參數時,對于輸出參數的數據類型進行定義的問題。[0047]下面用一個具體例子說明本發明的對SQL語句進行封裝的方法,所能達到的效果。[0048]假設現有技術中,需要執行的待封裝的SQL語句如下:[0049]SQL>!1selectb.spidospid,2a.username,3a.machine,4a.program,5a.sid,6a.seriai#,7a.status,8c.piece,9c.sql_text10fromv$sessiona,v$processb,v$sqitextc11whereb.spid=&v_ospid12andb.addr=a.paddr13anda.sql_address=c.address(+)14*orderbyc.pieceSQL>/Entervalueforv一ospid:7264old11:whereb.spid=&v_ospidnew11:whereb.spid=7264....省略輸出...SQL>[0050]這段SQL代碼執行了一個任務,會有一個輸出,這段代碼太長,影響工作人員的操作效率。這只是一個例子,有些代碼會更長。[0051]采用本發明的方法進行封裝的過程可以是:[0052]1、建立自定義類型Type。[0053]createorreplacetypetypegetsessioninfoasobject{spidvarcha即4),usernameVARCHAR2{30)/machineVARCHAR2{64)?programvarchar2(48),sidnumber,serial#number,statusvarchar2(8),piecenumber,sql一textvarchar2(1024));/createorreplacetypetab一get一sessioninfoastableoftypegetsessioninfo;/[0054]2、建立函數[0055]函數名為get_sessioninfo。[0056]createorreplacefunctionget_sessioninf〇(v_ospidv$process.SPiD%type)RETURNtab_get一sessioninfoPIPELINEDasvtype_get_sessioninfo;beginformyrowin(selectb.spidospid/a.username/a.machine,a.program,[0057]a.sid,a.serial#,a.status,c.piece,c.sqi_textfromv$sessionafv$processb;v$sqitextcwhereb.spid=v_ospidandb.addr=a.paddranda.sqi_address=c.address(+)orderbyc.piece)loopv:=type_get_sessioninfo(myrow.ospid,myrow.username,myrow,machine,myrow,program,myrow.sid,myrow.serial#,myrow.status,myrow.piece,myrow.sql_text);piperow(v);endloop;return;endget_sessioninfo;[0058]至此,完成了對于上述SQL語句的封裝。[0059]當用戶需要再次輸入上述SQL語句時,只需要調用get_sessioninfo這個函數即可,無需再次輸入上述SQL語句。[0060]本發明還公開了一種對SQL語句進行封裝的系統。[0061]圖2為本發明的對SQL語句進行封裝的系統實施例的結構圖。如圖2所示,所述系統包括:[0062]數據類型獲取單元201,用于獲取待封裝的SQL語句中每一個輸出參數的數據類型;[0063]自定義類型建立單元202,用于建立自定義類型,所述自定義類型中包括一個或多個變量,每個變量的數據類型分別與待封裝的SQL語句中的一個輸出參數的數據類型相對應;[0064]函數創建單元203,用于創建包含所述待封裝的SQL語句的函數;[0065]所述函數至少還包括輸出參數,所述輸出參數的類型與所述自定義類型相同。[0066]其中,所述SQL語句用于查詢數據表中的數據,所述數據類型獲取單元201,可以包括:[0067]登陸子單元,用于登陸SQL*PLUS系統;[0068]數據類型獲取子單元,從SQL*PLUS系統中獲取待查詢的數據表中的數據的數據類型。[0069]所述函數還可以包括輸入參數。[0070]所述自定義類型可以包括:子類型,普通類型,或者帶成員函數的類型體。[0071]本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的系統而言,由于其與實施例公開的方法相對應,所以描述的比較簡單,相關之處參見方法部分說明即可。[0072]本文中應用了具體個例對本發明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發明的方法及其核心思想;同時,對于本領域的一般技術人員,依據本發明的思想,在【具體實施方式】及應用范圍上均會有改變之處。綜上所述,本說明書內容不應理解為對本發明的限制。【權利要求】1.一種對SQL語句進行封裝的方法,其特征在于,包括:獲取待封裝的SQL語句中每一個輸出參數的數據類型;建立自定義類型,所述自定義類型中包括一個或多個變量,每個變量的數據類型分別與待封裝的SQL語句中的一個輸出參數的數據類型相對應;創建包含所述待封裝的SQL語句的函數;所述函數至少還包括輸出參數,所述輸出參數的類型與所述自定義類型相同。2.根據權利要求1所述的方法,其特征在于,所述SQL語句用于查詢數據表中的數據,所述獲取待封裝的SQL語句中每一個輸出參數的數據類型,包括:登陸SQL*PLUS系統;從SQL*PLUS系統中獲取待查詢的數據表中的數據的數據類型。3.根據權利要求1所述的方法,其特征在于,所述函數還包括輸入參數。4.根據權利要求1所述的方法,其特征在于,所述自定義類型包括:子類型,普通類型,或者帶成員函數的類型體。5.-種對SQL語句進行封裝的系統,其特征在于,包括:數據類型獲取單元,用于獲取待封裝的SQL語句中每一個輸出參數的數據類型;自定義類型建立單元,用于建立自定義類型,所述自定義類型中包括一個或多個變量,每個變量的數據類型分別與待封裝的SQL語句中的一個輸出參數的數據類型相對應;函數創建單元,用于創建包含所述待封裝的SQL語句的函數;所述函數至少還包括輸出參數,所述輸出參數的類型與所述自定義類型相同。6.根據權利要求5所述的系統,其特征在于,所述SQL語句用于查詢數據表中的數據,所述數據類型獲取單元,包括:登陸子單元,用于登陸SQL*PLUS系統;數據類型獲取子單元,從SQL*PLUS系統中獲取待查詢的數據表中的數據的數據類型。7.根據權利要求5所述的系統,其特征在于,所述函數還包括輸入參數。8.根據權利要求5所述的系統,其特征在于,所述自定義類型包括:子類型,普通類型,或者帶成員函數的類型體。【文檔編號】G06F17/30GK104142944SQ201310165995【公開日】2014年11月12日申請日期:2013年5月7日優先權日:2013年5月7日【發明者】郭鐵志,張寶玉,馬向暉申請人:杭州勒卡斯廣告策劃有限公司