版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、如果文件分類順序和交替分配順序表都被忽略,這就允許用戶不必指出所有字段名,而僅指定哪個字段做分類順序。如果沒有指定查詢分類順序(如*HEX)就會按V2.3版中的規(guī)定排序。2.2.3.19 DDM文件考慮OPNQRYF可以處理DDM文件,所有在FILE參數(shù)中指定的文件必須在AS/400中存在。一個指定操作并用DDM文件的OPNQRYF需要源文件和目標文件在同類型系統(tǒng)中。2.2.3.20 編寫高級語言程序的考慮象在2.2.3.1中講述的那樣,高級語言程序能直接訪問數(shù)據(jù)文件。在程序外選擇或排序,程序以你指定順序接收選擇的記錄,程序得不到選擇時忽略的記錄。通過邏輯文件用選擇/忽略值處理時,具有同樣功能
2、。如果使用FORMAT參數(shù),程序使用在FORMAT中用的文件名,寫程序時就象這個文件包含實際的數(shù)據(jù)一樣。如果順序讀文件,高級程序自動忽略鍵字順序,你可以象讀到達順序記錄一樣寫程序。如果在OPNQRYF命令中用KEYFLD參數(shù),要收到一個能忽略的診斷信息。如果用隨機的鍵字處理文件,高級語言要有相應的鍵字規(guī)定,如果有選擇的值,它可以防止程序訪問在數(shù)據(jù)庫中的記錄?;蛘哂肙PNQRYF或用DDS中用選擇/忽略條件的邏輯文件。在隨機讀中都可能發(fā)生記錄未找到的情況。在某些情況下,可以監(jiān)控諸如數(shù)字溢出之類的映象錯誤引起的異常,但最好是對所有字段定義正確的屬性。2.2.3.21 OPNQRYF命令運行時發(fā)送信
3、息當OPNQRYF運行時,會給交互用戶發(fā)送OPNQRYF的狀態(tài)信息。例如,當鍵字訪問順序建立用來滿足OPNQRYF需要時,會發(fā)送一個信息。在運行OPNQRYF時可能發(fā)送下面信息:信息標識說明CPI4301Query運行CPI4302Query運行,建立訪問路徑CPI4303Query運行,生成文件備份CPI4304Query運行,完成選擇CPI4305Query運行,備份文件排序CPI4306Query運行,建立文件訪問路徑CPI4011Query運行,處理的記錄數(shù)如不讓這些信息出現(xiàn),參考CL手冊中關(guān)于信息控制的內(nèi)容。當作業(yè)在Debug下運行(用STRDBG),信息發(fā)往作業(yè)日志中。描述了要處理
4、OPNQRYF的實現(xiàn)方法,這些信息提供優(yōu)化處理建議。也可以用來作為改善OPNQRYF運行性能的工具,這些信息如下:CPI4321建立文件訪問路徑CPI4322從鍵字文件建立訪問路徑CPI4324從文件生成臨時文件CPI4325為Query建立臨時文件CPI4326用JOIN位置處理文件CPI4327用JOIN位置1處理文件CPI4328使用文件訪問路徑CPI4329使用文件的到達順序CPI432AQuery優(yōu)化超時CPI432C考慮文件的所有訪問路徑大部分信息都提供了使用當前功能的原因,每個信息的二級文本給出了擴展的說明,某些信息提供了改進OPNQRYF性能的建議。2.2.3.22 使用OPN
5、QRYF的其它可選功能OPNQRYF命令支持OPTION參數(shù)來決定處理的類型,默認值為OPTION(*INP),所以文件為僅輸入打開,也可在OPNQRYF命令中使用OPTION的其它值和一個高級語言程序通過打開文件,來添加、更新、刪除記錄。但如果指定UNIQUEKEY、GRPFLD或GRPSLT參數(shù),用了一個組合功能或是在FILE中指定多個文件,對文件的使用就僅限于輸入。連接邏輯文件是只輸入處理,如果在視圖的定義中用了組合,連接合并,或分類處理時,視圖也限于只輸入。如果要對文件中某些記錄改變當前值,可把OPNQRYF命令和高級語言程序聯(lián)合一起用,例如:要把文件中Flda字段的值ABC改為XYZ
6、,可以指定如下: OVRDBF FILE(FILEA) SHARE(*YES) OPNQRYF FILE(FILEA) OPTION(*ALL) QRYSLT('FLDA *EQ "ABC" ') CALL PGM(PGMA) CLOF OPNID(FILEA) DLTOVR FILE(FILEA) PGMA處理讀到的所有記錄,但選擇條件限制只處理Flda為ABC的記錄,程序把它 改為XYZ,并更新??梢杂肙PNQRYF刪除數(shù)據(jù)文件的記錄,例如,要刪除字段值為X的記錄,可以編寫下面程序并用OPNQRYF值選擇要刪除的記錄。 OVRDBF FILE(FILEA
7、) SHARE(*YES) OPNQRYF FILE(FILEA) OPTION(*ALL) QRYSLT('DLTCOD *EQ "X" ') CALL PGM(PGMB) CLOF OPNID(FILEA) DLTOVR FILE(FILEA) 也可以用OPNQRYF添加記錄,但如果查詢條件中有選擇值,程序可能由于這種選擇被禁止讀添加過的記錄。2.2.3.23 用OPNQRYF做日期、時間和時間標記的比較日期、時間或時間標記可以和同一類型的其它值或表達式串進行比較。所有比較都是按年代分的,即這個時間距離0001年1月1日多長時間。對包含時間值和表達式的比
8、較經(jīng)常包括秒,如果表達式串中忽略秒,用零代替。對包含時間標記的比較是按年代分,而不管實際上可能相等的情況。如下面表達式為真: TIMESTAMP('1990-02-23-00.00.00') > '1990-02-22-24.00.00'當字符DBCS-open或DBCS-either字段或常數(shù)字段用于表示日期、時間時間標記時,可用下列規(guī)則:日期:如果日期格式為*ISO *USA *EUR *JIS *YMD *MDY或*DMY時,字段或文字長度至少為8,當格式為JUL(yyddd)時,變量的長度至少為6,(包括yy和ddd間的分隔符),可用空格填充。時間
9、:對所有格式(*USA *ISO *EUR *JIS *HMS),字段或文字長度至少為4,可用空格填充。時間標記:對時間標記格式(yyyy-mm-dd-hh.mm.ss.uuuuuu)字段或文字長度到少為16,可用空格填充。2.2.3.24 用OPNQRYF命令對日期、時間、時間標記做運算日期、時間、時間標記的值可以進行增加、減少,做減法運算。這些操作包括一個叫時間間隔十進制數(shù)。下面是時間間隔的定義和對日期、時間、時間標記做運算的規(guī)則。2.2.3.24.1 時間間隔時間間隔是一個數(shù)字,代表時間的間隔,四種類型的時間間隔是:標記間隔:是用一個數(shù)字代表的時間單位(可以是代表式的結(jié)束),可以做為七個
10、時間間隔內(nèi)部函數(shù)的操作數(shù):%DURYEAR %DURMONTH %DURDAY %DUROUR %DURMINUTE %DURSEC %DURMICSEC分別對應著年、月、日、小時、分鐘、秒、微秒的間隔。如果是DECIMAL(15,0)的格式要做數(shù)字轉(zhuǎn)換。標記間隔只能用在另一操作數(shù)為*DATE *TIME *TIMESTP類型的運算中,因此,表達式HIREDATE + %DURMONTH(2) + %DURDAY(14)是有效的HIREDATE + (%DURMONTH(2) + %DURMONTH(14)是無效的。在上面兩個表達式中,標記間隔為%DURMONTH(2)和%DURDAY(14)
11、。日期間隔:日期間隔是用DECIMAL(8,0)格式表示的年、月、日的數(shù)字。為能準確解釋,數(shù)字必為yyyymmdd格式,yyyy代表年,mm代表月,dd代表日,一個日期值減另一個日期的結(jié)果,就為日期間隔,例如:HIREDATE-BRTHDATE。時間間隔: 時間間隔是用DECIMAL(6,0)格式表示的小時,分鐘,秒,微秒的數(shù)字,為了準確解釋,必為hhmmss格式,hh代表小時,mm代表分鐘,ss代表秒,兩個時間相減的結(jié)果為時間間隔。時間標記間隔:時間標記間隔是由DICIMAL(20,6) 的格式表示的年、月、日、小時、分鐘、秒、微秒的數(shù)字,為準確解釋,數(shù)字必為yyyymmddhhmmsszz
12、zzzzz格式,其中yyyy,mm,dd,hh,mm,ss,zzzzzz分別代表年、月、日、小時、分鐘、秒、微秒,兩個時間標記相減的結(jié)果為時間標記間隔。2.2.3.24.2 日期、時間、時間標記運算的規(guī)則對日期和時間值所做的算術(shù)操作為加或減,如果加法的一個操作數(shù)是日期或時間值,另一個操作數(shù)必為間隔。加法操作的規(guī)則是:如果一個操作數(shù)是日期,另一個必為日期間隔或年、月、日的標記間隔。如果一個操作數(shù)是時間,另一個必為時間間隔或小時、分秒的標記間隔。如果一個操作數(shù)是時間標記,另一個必為時間間隔,可為任意類型間隔。因為不能從間隔減去日期或時間,并且兩個時間或日期相減與從日期或時間中減去間隔不同,所以對日
13、期和時間的加減運算規(guī)則是不同的。下面規(guī)定了對日期和時間做減法的規(guī)則:如果第一個操作數(shù)為日期,第二個必為日期、日期間隔,表示日期的串或是年、月、日的標記間隔。如果第二個操作數(shù)是日期,第一個必為日期或表示日期的串。如果第一個操作數(shù)是時間,第二個必為時間,時間間隔,表示時間的串或小時、分鐘、秒的標記間隔。如果第二個操作數(shù)是時間,第一個必為時間或表示時間的串。如果第一個操作數(shù)是時間標記,第二個必為時間標記,表示時間標記的串或間隔。如果第二個操作數(shù)是時間標記,第一個必為時間標記或表示時間標記的串。2.2.3.24.3 日期運算日期可以相減、增加、減少減日期:一個日期(DATE1)減去另一個日期(DATE
14、2)的結(jié)果是兩個日期之間的年、月、日間隔,結(jié)果的數(shù)據(jù)類型為DECIMAL(8,0),如果DATE1大于或等于DATE2,就用DATE1減DATE2,如果DATE1小于DATE2,則從DATE2減去DATE1,結(jié)果符號為負,下面給出完成表達式RESULT = DATE1DATE2的步驟。 If %DAY(DATE2) <= %DAY(DATE1) ; then %DAY(RESULT) = %DAY(DATE1) - %DAY(DATE2). If %DAY(DATE2) > %DAY(DATE1) ; then %DAY(RESULT) = N + %DAY(DATE1) - %D
15、AY(DATE2) ; where N = the last day of %MONTH(DATE2). ; %MONTH(DATE2) is then incremented by 1. If %MONTH(DATE2) <= %MONTH(DATE1) ; then %MONTH(RESULT) = %MONTH(DATE1) - %MONTH(DATE2). If %MONTH(DATE2) > %MONTH(DATE1) ; then %MONTH(RESULT) = 12 + %MONTH(DATE1) - %MONTH(DATE2). ; %YEAR(DATE2) is
16、 then incremented by 1. %YEAR(RESULT) = %YEAR(DATE1) - %YEAR(DATE2).增加和減少日期:把日期加上間隔或從日期減去間隔,仍是日期,(為了做到這點,一個月代表日歷中一頁,把日期中加上月份,就象掀日歷的頁一樣,從日期所在的月份那頁開始)。結(jié)果必需要在0001年1月1日和9999年12月31日之間,如果是年的間隔加或減,只有年的部分有變化,月、日不變,除非是閏年的2月29日變?yōu)?8日,同樣,如果是月的間隔加減,只有月變,除非必需年有變化,日也不變,除非日無效(如9月31日),這時日被設為月的最后一天。對日期的加減也只影響日,不影響年、月
17、。無論是正的或負的日期間隔都可與日期做加、減,與標記間隔運算,結(jié)果是有效日期。當正的日期間隔加上日期,或從日期減去負的日期間隔,日期就會依次按年、月、日的數(shù)增加。因而,DATE1 + X,如果X是正的DECIMAL(8,0 )數(shù)字,就相當于表達式 DATE1 + %DURYEAR(%YEAR(X) + %DURMONTH(%MONTH(X) +%DURDAY(%DAY(X)當從日期減去正的日期間隔或負的日期間隔加一個日期,日期就會依次按年、月、日的數(shù)減少,因而,DATE1 X,如果X是正的DECIMAL(8,0),就相當于表達式 DATE1 - %DURDAY(%DAY(X) - %DURMO
18、NTH(%MONTH(X) - %DURYEAR(%YEAR(X)把日期中加上間隔,對某個日期加上一個月就出下月的相同日期,除非下月沒有這個日期,這時,就設成下月的最后一天,如果1月28日加上一個月為2月28日,1月29、30、31日加一個月在閏年為2月29日,否則為2月28日。注:如果把日期加上一個或多個月,然后從結(jié)果再減去相同月份,最后日期和原始日期相同。2.2.3.24.4 時間運算時間可以相減、增加或減少。時間減法:一個時間(TIME1)減去另一個時間(TIME2)的結(jié)果是兩者間的小時、分鐘、秒的時間間隔,結(jié)果的數(shù)據(jù)類型為DECIMAL(6,0),如TIME1大于等于TIME2,TIM
19、E1減去TIME2,否則,TIME2減TIME1,結(jié)果為負,下面給出了完成RESULT + TIME1 - TIME2 的步驟: If %SECOND(TIME2) <= %SECOND(TIME1) ; then %SECOND(RESULT) = %SECOND(TIME1) - %SECOND(TIME2). If %SECOND(TIME2) > %SECOND(TIME1) ; then %SECOND(RESULT) = 60 + %SECOND(TIME1) - %SECOND(TIME2). ; %MINUTE(TIME2) is then incremented
20、by 1. If %MINUTE(TIME2) <= %MINUTE(TIME1) ; then %MINUTE(RESULT) = %MINUTE(TIME1) - %MINUTE(TIME2). If %MINUTE(TIME2) > %MINUTE(TIME1) ; then %MINUTE(RESULT) = 60 + %MINUTE(TIME1) - %MINUTE(TIME2). ; %HOUR(TIME2) is then incremented by 1. %HOUR(RESULT) = %HOUR(TIME1) - %HOUR(TIME2).時間的增加和減少:從時
21、間加或減一個間隔,結(jié)果仍是時間,任何上溢及下溢的小時數(shù)被丟棄,這樣保證結(jié)果總為時間,如果是小時的間隔的加或減,只有小時部分改變,分鐘和秒不變。類似,對分鐘的間隔加或減,只有分鐘改變,如必要,小時受影響,秒不變。加或減秒只改變秒部分,分鐘或小時有潛在影響。時間間隔不管正負都可以加上或減去時間,結(jié)果以小時、分鐘、秒的順序增加或減少,因此,TIME + X,如X定DECIMAL(6,0),它相當于表達式TIME1 + %DURHOUR(%HOUR(X) + %DURMINUTE(%MINUTE(X) +%DURSEC(%SECOND(X)2.2.3.24.5 時間標記運算時間標記可以相減,增加或減少
22、。時間標記相減:一個標記TS1減去另一個標記TS2,是一個在兩個時間之間的代表年、月、日、小時、分鐘、秒和微秒的間隔,數(shù)據(jù)類型為DECIMAL(20,6),如果TS2大于或等于TS2,用TS1減去TS2,否則用TS2減TS1,結(jié)果為負。下面描述完成表達式RESULT = TS1-TS2的步驟: If %MICSEC(TS2) <= %MICSEC(TS1) ; then %MICSEC(RESULT) = %MICSEC(TS1) - ; %MICSEC(TS2). If %MICSEC(TS2) > %MICSEC(TS1) ; then %MICSEC(RESULT) = 10
23、00000 + ; %MICSEC(TS1) - %MICSEC(TS2) ; and %SECOND(TS2) is incremented by 1. 時間標記的秒和分部分,用截取時間的原則來截?。?If %HOUR(TS2) <= %HOUR(TS1) ; then %HOUR(RESULT) = %HOUR(TS1) - %HOUR(TS2). If %HOUR(TS2) > %HOUR(TS1) ; then %HOUR(RESULT) = 24 + %HOUR(TS1) - %HOUR(TS2) ; and %DAY(TS2) is incremented by 1.
24、時間標記的日期部分減法規(guī)則與日期減法相同。時間標記的增加和減少:從時間標記加或減一個間隔,結(jié)果仍是時間標記。時間和日期的運算規(guī)則如前定義,不同的是小時的下溢和上溢要代入結(jié)果的日期部分,微秒的上溢代入秒部分。2.2.3.25 用OPNQRYF進行隨機處理前面講的多數(shù)例子都是順序處理中用OPNQRYF。在大多數(shù)情況下,也可用隨機處理(如RPG/400中CHAIN和COBOL/400中READ),然而,如果用組合或唯一鍵字功能就不能隨機處理文件。2.2.3.26 性能考慮參看附錄D,那里有設計指導和性能優(yōu)化的技術(shù)。當OPNQRYF命令使用已存在的鍵字順序訪問路徑就會獲得最佳性能。例如,如果要選擇Co
25、de字段為B的所有記錄,并且已有一個路徑存在,系統(tǒng)會利用這個路徑進行選擇(鍵字位置選擇),而不是在運行時讀和選擇(動態(tài)選擇)。當有下面任何條件時,OPNQRYF不會利用已存在的索引:路徑中的鍵字字段是從子串功能導出的。路徑中的鍵字字段是從連接功能導出的。與查詢有關(guān)的分類排序表中,(在STRSEQ參數(shù)規(guī)定),下面兩項都為真時:是共享權(quán)順序表訪問路徑與順序表不符(分類順序表或交替分配順序表)與查詢有關(guān)的分類排序表中下面兩項都為真時:是唯一權(quán)順序表訪問路徑與順序表不符(分類順序或交替分配順序表),并且下列之一為真時:指定了順序(KEYFLD參數(shù))有不用*EQ,*NE,*CT,%WLDCRD或%UALUES的記錄選擇 (QRYSLT參數(shù))有不用*EQ和*NE的連接選擇(JFLD參數(shù))OPNQRYF處理的一部分是用來決定能滿足你要求的最快方法。如果使用的文件很大,而且,大多數(shù)記錄Code字段都為B,用到達順序比已有的鍵字訪問要快,程序會得到相同記錄,OPNQRYF只有在已存在對Code的訪問路徑時才進行這種判斷。通常,如果要得到文件中20%或更多的記錄,OPNQRYF會忽略已存在路
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版二手房獨家授權(quán)銷售合同3篇
- 2025年度出租車充電樁建設與維護合同3篇
- 二零二五年酒店宴會部經(jīng)理招聘與服務質(zhì)量提升合同3篇
- 二零二五版房產(chǎn)中介傭金結(jié)算及售后服務合同范本3篇
- 2024年船舶制造與維修合同
- 2025年新型紗窗產(chǎn)品研發(fā)與知識產(chǎn)權(quán)保護協(xié)議2篇
- 2025年散裝糧食海運協(xié)議6篇
- 專業(yè)質(zhì)量檢測服務工程協(xié)議樣本版
- 二零二五版合同部合同管理流程再造與效率提升合同3篇
- 二零二五年度消防設施安全檢測與維護服務協(xié)議
- 2024年高標準農(nóng)田建設土地承包服務協(xié)議3篇
- 閱讀理解(專項訓練)-2024-2025學年湘少版英語六年級上冊
- 2024年全國統(tǒng)一高考英語試卷(新課標Ⅰ卷)含答案
- 2024年認證行業(yè)法律法規(guī)及認證基礎知識 CCAA年度確認 試題與答案
- 小品《天宮賀歲》臺詞劇本手稿
- 醫(yī)院患者傷口換藥操作課件
- 欠薪強制執(zhí)行申請書
- 礦山年中期開采重點規(guī)劃
- 資源庫建設項目技術(shù)規(guī)范匯編0716印刷版
- GC2級壓力管道安裝質(zhì)量保證體系文件編寫提綱
- 預應力混凝土簡支小箱梁大作業(yè)計算書
評論
0/150
提交評論