版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
SIEMENS技術總結文檔號TN-00-01版本0.0日期10/05/08頁數(shù)1of17標題:WINCC中使用vbs腳本調(diào)用SQL存儲過程SIAS---顏春明技術總結WINCC中使用vbs腳本調(diào)用SQL存儲過程版本日期作者校對批準說明0.12008-5-10顏春明SIEMENS技術總結文檔號TN-00-01版本0.0日期10/05/08頁數(shù)2of17標題:WINCC中使用vbs腳本調(diào)用SQL存儲過程SIAS---顏春明目錄TOC\o"1-5"\h\z應用范圍3詳述3適用的系統(tǒng)3硬、軟件配置3解決方法3存儲過程編寫3VBS調(diào)用存儲過程6SQLSERVER存儲過程及觸發(fā)器10存儲過程定義10創(chuàng)建存儲過程10存儲過程調(diào)試12存儲過程中游標的使用13觸發(fā)器介紹以及實例錯誤!未定義書簽。附件附件文檔號說明SIEMENS技術總結文檔號TN-00-01版本0.0日期10/05/08頁數(shù)3of17標題:WINCC中使用vbs腳本調(diào)用SQL存儲過程SIAS---顏春明應用范圍詳述SQL存儲過程執(zhí)行起來比SQL命令文本快得多。當一個SQL語句包含在存儲過程中時,服務器不必每次執(zhí)行它時都要分析和編譯它。調(diào)用存儲過程,可以認為是一個三層結構。這使你的程序易于維護。如果程序需要做某些改動,你只要改動存儲過程即可你可以在存儲過程中利用Transact-SQL的強大功能。一個SQL存儲過程可以包含多個SQL語句。你可以使用變量和條件。這意味著你可以用存儲過程建立非常復雜的查詢,以非常復雜的方式更新數(shù)據(jù)庫。最后,這也許是最重要的,在存儲過程中可以使用參數(shù)。你可以傳送和返回參數(shù)。你還可以得到一個返回值(從SQLRETURN語句)。WINCC中執(zhí)行存儲過程與執(zhí)行SQL命令又有以下優(yōu)點。異常處理可以封裝在存儲過程中,復雜的數(shù)據(jù)處理過程有存儲過程來完成,避免執(zhí)行多條SQL命令來完成某一數(shù)據(jù)處理。減輕了WINCC系統(tǒng)的負擔,當VBS腳本中大量執(zhí)行SQL命令,系統(tǒng)消耗大量資源,同時影響了系統(tǒng)其他腳本的執(zhí)行。適用的系統(tǒng)該方法適用于安裝有WINCC的系統(tǒng)中硬、軟件配置安裝有WINCC,SQLServer軟件,無版本限制解決方法存儲過程編寫進入EnterpriseManager,選擇我們所需要的數(shù)據(jù)庫。在StoredProcedures中創(chuàng)建一個新的存儲過程。存儲過程sp_givaudan_GetAreaAMission實現(xiàn)了一下功能,根據(jù)submixing查找到該配方的所有原料紀錄,然后而該配方而記錄插入?yún)^(qū)域A需要執(zhí)行表中。首先查找是否有該配方存在,然后,然后檢查當前是否有配方在執(zhí)行中。如果所有條件滿足,更新當前配方的信息,根據(jù)產(chǎn)品代碼,以及現(xiàn)場所有原料伐的信息,找到對應原料在那個區(qū),那個管道中,最后寫入當前執(zhí)行表中。從以下存儲過程實現(xiàn)功能可以看出,如果使用SQL命令,實現(xiàn)這些功能將非常繁瑣。用StoredProcedure來實現(xiàn),方便了系統(tǒng)的調(diào)試和維護,同時大大提高了系統(tǒng)的效率。以下存儲過程使用在Givaudan伐島控制系統(tǒng)中,系統(tǒng)相關說明請參考相關文檔。實例1SIEMENS技術總結文檔號TN-00-01版本0.0日期10/05/08頁數(shù)4of17標題:WINCC中使用vbs腳本調(diào)用SQL存儲過程SIAS---顏春明--GETTHEMISSIONLISTANDINSERTINTOARCHIVE_AREACREATEPROCEDUREsp_givaudan_GetAreaAMission@submixingNVARCHAR(12)='-',@totalweightBIGINTOUTPUT,@soproductNVARCHAR(14)OUTPUT,@resultNVARCHAR(300)OUTPUTASDeclare@RcordCountintDeclare@FinishedintBEGIN--首先在配方統(tǒng)計表中查找相關配方是否存在SELECT@RcordCount=Count(*)FROMUA#FormularsCheckWHEREsubmixing=@submixingIF(@RcordCount=0)配方不存在BEGINSET@result='Sub-Mixing:"'+@submixing+'"isnotavailable!!'SET@totalweight=0RETURNENDELSEBEGIN--檢查配方是否已經(jīng)完成SELECT@Finished=[finished]FROMUA#FormularsCheckWHEREsubmixing=@submixingIF((@Finished&4)=0)--配方?jīng)]有完成(bit2置位說明已經(jīng)完成)BEGINSELECT@RcordCount=Count(*)FROMUA#Formulars_AreaAIF(@RcordCount=0)一當前A區(qū)沒有配方在執(zhí)行SIEMENS技術總結文檔號TN-00-01版本0.0日期10/05/08頁數(shù)5of17標題:WINCC中使用vbs腳本調(diào)用SQL存儲過程SIAS---顏春明BEGINSELECT@totalweight=SUM(WEIGHTREQUESTED)/1000FROMUA#FormularsWHEREsubmixing=@submixing--GettotalweightSELECT@soproduct=[soproduct]FROMUA#FormularsCheckWHEREsubmixing=@submixingGetSOCode--updatetheconfigurationinformationUPDATEUA#FormularsSETtubenumber=UATC.tubenumber,productname=UATC.itemname,internalarea=UATC.internalarea,lotnumber=UATC.lotnumber,location=UATC.location,pourduration=UATC.dosefactor,perturbation=UATC.startindex,reserved=UATC.description,tolerance=round(weightrequested*UATC.toleranceproportion,0)FROMUA#FormularsUAF,UA#TubesConfigurationUATCWHEREUAF.submixing=@submixingANDUAF.productcode=UATC.itemnumberANDUAF.finished=0ANDUATC.internalarea=1ANDUATC.internalstatus=1UPDATEUA#FormularsSETtubenumber=UATC.tubenumber,productname=UATC.itemname,internalarea=UATC.internalarea,lotnumber=UATC.lotnumber,location=UATC.location,pourduration=UATC.dosefactor,perturbation=UATC.startindex,reserved=UATC.description,amtpoured=1FROMUA#FormularsUAF,UA#TubesConfigurationUATCWHEREUAF.submixing=@submixingANDUAF.productcode=UATC.itemnumberANDUAF.finished=0ANDUATC.internalarea=1ANDUATC.internalstatus<>1SELECT@RcordCount=Count(*)FROMUA#FormularsWHEREsubmixing=@submixingANDinternalarea=1ANDfinished<=1IF@RcordCount>0-如果A區(qū)有配方需要執(zhí)行BEGIN--insertintoformulars_areaa.INSERTINTOUA#Formulars_AreaASELECT*FROMUA#FormularsWHEREsubmixing=@submixingANDinternalarea=1ANDfinished<=1--updateformularcheckinformation@Finished&253--meanstheremovethesubmittempflagUPDATEUA#FormularsCheckSETUA#FormularsCheck.finished=(@Finished&253)|1WHEREsubmixing=@submixingENDELSE--A區(qū)沒有配方BEGINUPDATEUA#FormularsCheckSETUA#FormularsCheck.finished=(@Finished&253)|5WHEREsubmixing=@submixingSET@totalweight=-1----NOMISSIONINAREAASIEMENS技術總結文檔號TN-00-01版本0.0日期10/05/08頁數(shù)6of17標題:WINCC中使用vbs腳本調(diào)用SQL存儲過程SIAS---顏春明ENDENDELSEA區(qū)還有配方在執(zhí)行中BEGINSET@result='TherearestillformularsinArea_A'SET@totalweight=0RETURNENDENDELSE—該配方已經(jīng)完成BEGINSET@result='Sub-Mixing:"'+@submixing+'"HavebeensubmittedorHavedone.!!'SET@totalweight=0RETURNENDENDIF@@error=0SET@result=@result+'Good'ELSEBEGINSET@result=@result+'Fail'SET@totalweight=0ENDENDGO3.2VBS調(diào)用存儲過程連接字符串,系統(tǒng)中多次執(zhí)行存儲過程,為了方便維護連接字符串,因為WINCC的vbs沒有全局變量的,需要將連接字符串放在公共函數(shù)中。建議將projectmodulars中,standardmodulars中的函數(shù)在修改后,不能立刻生效,需要對standardmodulars函數(shù)進行重新調(diào)用,而連接字符串在項目重新加載后系統(tǒng)數(shù)據(jù)庫名稱會發(fā)生變化,需要經(jīng)常修改。FunctionconString()
SIEMENS技術總結文檔號TN-00-01版本0.0日期10/05/08頁數(shù)7of17標題:WINCC中使用vbs腳本調(diào)用SQL存儲過程SIAS---顏春明conString="Provider=SQLOLEDB;Server=GSHMW5306\WINCC;Database=CCCluster2080426090643R;IntegratedSecurity=SSPI;"EndFunction以下函數(shù)實現(xiàn)了對3.1小節(jié)中sp_givaudan_GetAreaAMission存儲過程的調(diào)用。改函數(shù)可以有某一特點操作來觸發(fā)執(zhí)行。當操作人員完成配方條形鬲的掃描后將觸發(fā)該函數(shù)。'AreaAGetBarCode'ToExecutetheprocedure"sp_givaudan_GetAreaAMission"'Moreinformationaboutprocedure"sp_givaudan_GetAreaAMission",pleasegotoSQLServerDimobjCmd'ADODB.Command變量Dimresult'返回結果DimobjTagbarcodeareaa'條形碼值DimobjTag_barcode_getmissionDimobjTag_A_TotalWeightDimobjTag_A_SOProductDimobjTag_AreaA_Submixing_Flag為DimobjTag_barcode_getmissionDimobjTag_A_TotalWeightDimobjTag_A_SOProductDimobjTag_AreaA_Submixing_Flag為1’成功獲取配方后置該變量為True嘈己方總重量'SOCode’配方執(zhí)行標記,當有新配方可以執(zhí)行時,該變量值DimobjTag_AreaA_TextFlagDimConnectionString'連接字符串變量SetobjTag_barcode_areaa=HMIRuntime.Tags("A_SubmixingChar")SIEMENS技術總結文檔號TN-00-01版本0.0日期10/05/08頁數(shù)8of17標題:WINCC中使用vbs腳本調(diào)用SQL存儲過程SIAS---顏春明SetobjTag_barcode_getmission=HMIRuntime.Tags("A_Get_Mission")SetobjTag_A_TotalWeight=HMIRuntime.Tags("A_TotalWeight")SetobjTag_A_SOProduct=HMIRuntime.Tags("A_SOProduct")SetobjTag_AreaA_Submixing_Flag=HMIRuntime.Tags("A_Flag")SetobjTag_AreaA_TextFlag=HMIRuntime.Tags("A_TextFlag")objTag_barcode_areaa.Read'If(Len(objTag_barcode_areaa.Value)=0)Then'條形碼為空時退出'HMIRuntime.Trace"SubmixingCharisnull!!"&vbCrLf'ExitSub'EndIfSetobjCmd=CreateObject("ADODB.Command")ConnectionString=conString()'獲取到上面的鏈接字符串ObjCmd.ActiveConnection=ConnectionStringObjCmd.CommandType=4'StoredProcedures等同二ObjCmd.CommandText="sp_givaudan_GetAreaAMission"ObjCmd.Parameters.Refresh'參數(shù)賦值ObjCmd.Parameters(1).Value=objTag_barcode_areaa.ValueObjCmd.Parameters(2)=NullObjCmd.Parameters(3)=NullObjCmd.Parameters(4)=NullObjCmd.Execute()result=ObjCmd.Parameters(4).ValueobjTag_A_TotalWeight.Value=ObjCmd.Parameters(2).Value尸adCmdStoredProc’存儲過程名稱‘傳遞條形碼作為輸入?yún)?shù)’總重量,輸出參數(shù)'productcode,輸出參數(shù)’返回信息SIEMENS技術總結文檔號TN-00-01版本0.0日期10/05/08頁數(shù)9of17標題:WINCC中使用vbs腳本調(diào)用SQL存儲過程SIAS---顏春明objTag_A_TotalWeight.WriteobjTag_A_SOProduct.Value=ObjCmd.Parameters(3).ValueobjTag_A_SOProduct.WriteSetobjCmd=Nothing'釋放數(shù)據(jù)庫連接資源HMIRuntime.Trace"#AGetMission#"&result&vbCrLf’完成后續(xù)處理工作IfCLng(objTag_A_TotalWeight.Value)>0ThenobjTag_barcode_getmission.Value=TrueobjTag_barcode_getmission.WriteElseobjTag_AreaA_Submixing_Flag.Value=1objTag_AreaA_Submixing_Flag.WriteIfCLng(objTag_A_TotalWeight.Value)=0ThenobjTag_AreaA_TextFlag.Value=4objTag_AreaA_TextFlag.WriteHMIRuntime.Trace"PleaseScanNextBarCode."&vbCrLfElseobjTag_AreaA_TextFlag.Value=5objTag_AreaA_TextFlag.WriteHMIRuntime.Trace"EmptyInAreaA."&vbCrLfEndIfEndIfEndSubSIEMENS技術總結文檔號TN-00-01版本0.0日期10/05/08頁數(shù)10of17標題:WINCC中使用vbs腳本調(diào)用SQL存儲過程SIAS---顏春明從存儲過程的實例可以看出,vbs代碼簡潔清晰,僅僅和數(shù)據(jù)庫完成了1次鏈接。大量繁瑣的工作在存儲過程中來實行。若完全有SQL命令來實行將大大增加WINCC系統(tǒng)負擔,同時數(shù)據(jù)庫的負擔也相對比較大,每次都要對SQL命令進行編譯,執(zhí)行,同時SQL和WINCC之間有大量的數(shù)據(jù)通訊。4SQLSERVER存儲過程及觸發(fā)器4.1存儲過程定義存儲過程是保存起來的可以接受和返回用戶提供的參數(shù)的Transact-SQL語句的集合??梢詣?chuàng)建一個過程供永久使用,或在一個會話中臨時使用(局部臨時過程),或在所有會話中臨時使用(全局臨時過程)。也可以創(chuàng)建在MicrosoftSQLServer啟動時自動運行的存儲過程。4.2創(chuàng)建存儲過程和數(shù)據(jù)表一樣,在使用之前我們需要創(chuàng)建存儲過程,它的簡明語法是:具體語法請參考T-SQL相關的手冊和文檔。CREATEPROC存儲過程名稱[參數(shù)列表(多個以"/分隔)]ASSQL語句實例2--說明部分--DeleteAlltheRecordsinFormulars_AreaA--命名CREATEPROCEDUREsp_givaudan_DeleteAlltheRecordsInFormulars_AreaA@resultNVARCHAR(300)OUTPUT參數(shù)ASSIEMENS技術總結文檔號TN-00-01版本0.0日期10/05/08頁數(shù)11of17標題:WINCC中使用vbs腳本調(diào)用SQL存儲過程SIAS---顏春明BEGIN詳細SQLIFNOTEXISTS(SELECT*FROMUA#Formulars_AreaA)BEGINSET@result='NoFormularsavailableinUA#Formulars_AreaAnow!!'RETURNENDELSEBEGINDELETEFROMUA#Formulars_AreaAENDIF@@error=0SET@result='Good'ELSESET@result='Fail'ENDGO實例3—說明--'DELETEUA#Formulars_AreaA,UA#Formulars_AreaB,UA#FormularsCheckWHEREsubmixing=@submixing-命名CREATEPROCEDUREsp_givaudan_DeleteSelectedSubmixing@submixingNVARCHAR(12)='-',@resultNVARCHAR(300)OUTPUTAS-實現(xiàn)BEGINIF@submixing=''OR(NOTEXISTS(SELECT*FROMUA#FormularsCheckWHEREsubmixing=@submixing))--submixing為空或沒有所指定的submixng就返回BEGINSET@result='ParemeterError,Thesubmixing'+@submixing+'isnotavailable!!'SIEMENS技術總結文檔號TN-00-01版本0.0日期10/05/08頁數(shù)12of17標題:WINCC中使用vbs腳本調(diào)用SQL存儲過程SIAS---顏春明RETURNENDELSE--submixing存在BEGIN一刪除指定的submixing.SET@resukDELETEUA#Formulars_AreaA,UA#Formulars_AreaB,UA#FormularsCheckWHERESUBMIXING='+@submixing+'!!'DELETEFROMUA#Formulars_AreaAWHEREsubmixing=@submixingDELETEFROMUA#Formulars_AreaBWHEREsubmixing=@submixingDELETEFROMUA#FormularsCheckWHEREsubmixing=@submixingENDIF@@error=0SET@result=@result+'Good'ELSESET@result=@result+'Fail'ENDGO4.3存儲過程調(diào)試從SQLServerEnterpriseManager進入SQLQueryAnalyzer,默認情況下進入當前數(shù)據(jù)庫,如果不正確需要選擇當前數(shù)據(jù)庫。執(zhí)行以下程序,可以對實例1進行調(diào)試。Declare@totalweightBIGINT,--定義臨時總重量變量@soproductNVARCHAR(14),--定義口缶時socode變量@resultNVARCHAR(300)--定義臨時結果信息變量--執(zhí)行存儲過程,提供所有參數(shù)execsp_givaudan_GetAreaAMission'test',@totalweightoutput,@soproductoutput,@resultoutput--顯示執(zhí)行后的輸出變量的信息select@totalweight,@soproduct,@result結果如下圖,可以通過修改‘test'為具體的submixing編碼,來真正獲取配方。實例2和實例3的調(diào)試都方法都和實例1相同。首先定義需要的變量,用在返回信息上。然后執(zhí)行存儲過程,必須提供所有的輸入輸出參數(shù)。最后為了方便調(diào)試,需要輸出所有返回變量。詳細的語法請參考T-SQL文檔。
SIEMENS技術總結文檔號TN-00-01版本0.0日期10/05/08頁數(shù)13of17標題:WINCC中使用vbs腳本調(diào)用SQL存儲過程SIAS---顏春明呷!羋」?■力二口球”口廳4口以;匚二_匚妨⑶2_必」萬_洞」匚0」/見加不但九川皿建同心川■U」H…..」Queryb^tch5TA5CNJ4YCai\WINCL(8,0)5IA5CN01YC]l\cnO4A0l(62)C€^Clu>ter2JQ8050^l6^,45JOj0C^00IrowsLn%Col10圖1.實例調(diào)試結果4.4存儲過程中游標的使用在數(shù)據(jù)庫開發(fā)過程中,當你檢索的數(shù)據(jù)只是一條記錄時,你所編寫的事務語句代碼往往使用SELECTINSERT語句。但是我們常常會遇到這樣情況,即從某一結果集中逐一地讀取一條記錄。那么如何解決這種問題呢?在c,vbs等語言中,我們可以通過對紀錄集合的訪問來實現(xiàn)這樣的功能。在數(shù)據(jù)庫中,游標為我們提供了一種極為優(yōu)秀的解決方案。在數(shù)據(jù)庫中,游標是一個十分重要的概念。游標提供了一種對從表中檢索出的數(shù)據(jù)進行操作的靈活手段,就本質(zhì)而言,游標實際上是一種能從包括多條數(shù)據(jù)記錄的結果集中每次提取一條記錄的機制。游標總是與一條T_SQL選擇語句相關聯(lián)因為游標由結果集(可以是零條、一條或由相關的選擇語句檢索出的多條記錄)和結果集中指向特定記錄的游標位置組成。當決定對結果集進行處理時,必須聲明一個指向該結果集的游標。我們知道關系數(shù)據(jù)庫管理系統(tǒng)實質(zhì)是面向集合的,在MSSQLSERVER中并沒有一種描述表中單一記錄的表達形式,除非使用where子句來限制只有一條記錄被選中。因此我們必須借助于游標來進行面向單條記錄的數(shù)據(jù)處理。由此可見,游標允許應用程序?qū)Σ樵冋Z句select返回的行結果集中每一行進行相同或不同的操作,而不是一次對整個結果集進行同一種操作;它還提供對基于游標位置而對表中數(shù)據(jù)進行刪除或更新的能力;而且,正是游標把作為面向集合的數(shù)據(jù)庫管理系統(tǒng)和面向行的程序設計兩者聯(lián)系起來,使兩個數(shù)據(jù)處理方式能夠進行溝通。MSSQLSERVER支持三種類型的游標:Transact_SQL游標,API服務器游標和客戶游標。這里主要討論的是Transact_SQL游標
SIEMENS技術總結文檔號TN-00-01版本0.0日期10/05/08頁數(shù)14of17標題:WINCC中使用vbs腳本調(diào)用SQL存儲過程SIAS---顏春明Transact_SQL游標是由DECLARECURSOR語法定義、主要用在Transact_SQL腳本、存儲過程和觸發(fā)器.。Transact_SQL游標主要用在服務器上,由從客戶端發(fā)送給服務器的Transact_SQL語句或是批處理、存儲過程、觸發(fā)器中的Transact_SQL進行管理。Transact_SQL游標不支口提取數(shù)據(jù)塊或多行數(shù)據(jù)。一一游標操作使用游標有四種基本的步驟:聲明游標、打開游標、提取數(shù)據(jù)、關閉游標。下面我們以游標在存儲過程中作為實例。實例4--GETTHEFIRSTTWOMISSIONID--命名存儲過程,聲明輸入輸出變量CREATEPROCEDUREspgivaudanGetStatIDAreaA@firstidBIGINTOUTPUT,@secondidBIGINTOUTPUT,@firstidBIGINTOUTPUT,@secondidBIGINTOUTPUT,@flagINTOUTPUT,onemission,morethan2mission.@resultNVARCHAR(300)OUTPUTAS--定義臨時變量Declare@RcordCountint--FIRSTID--SECONDID--FLAG,0,nomissionisavailable,1,onelyDeclare@idbigint--聲明游標DeclarecurFormulars_AreaACursorforSelectTOP2IDFromUA#Formulars_AreaAWHEREfinished<3ORDERBYTUBENUMBERBEGINSELECT@RcordCount=Count(*)FROMUA#Formulars_A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高校教務管理水平提升的路徑探析
- 幼兒實習心得
- 語文教師辭職報告(合集15篇)
- 電工辭職申請書
- 讀書活動個人總結范文2021
- 技術員工作總結
- 保險公司個人工作計劃范文
- xx區(qū)供氣項目可行性研究報告
- 汽車的銷售年終總結體會10篇
- 國家級產(chǎn)業(yè)園基礎設施市場需求分析
- 倉庫管理員月度績效考核表
- 戶外廣告設施設置申請表+審批表(城市管理資料2022新版)
- 國家開放大學電大??啤缎谭▽W(1)》期末題庫及答案
- 焦爐砌筑規(guī)程
- 聚酰亞胺基礎知識-1(橫田力男)
- ATS(發(fā)動機智能冷卻系統(tǒng))
- 畢業(yè)論文飲料罐裝生產(chǎn)流水線系統(tǒng)設計與調(diào)試
- 項目工程施工安全生產(chǎn)管理流程圖
- CAD的樂趣(漂亮的自定義線型)
- 某某油庫投產(chǎn)試運行方案
- 業(yè)障病因果病對照表
評論
0/150
提交評論