?
? ????? PHP ??? ???? ??? ?? ??
ORACLE 2000年問題白皮書
1. 導(dǎo)言
解決2000年兼容性問題,需要在日期的數(shù)據(jù)類型處理方面滿足下列五個(gè)主要因素:
1. 正確處理2000年1月1日以前、當(dāng)天及之后的日期信息、接收日期輸入、提供日期輸出、進(jìn)行日期或日期子項(xiàng)的計(jì)算。
2. 隨著新世紀(jì)的到來,采用正確的配置,以保證正常執(zhí)行2000年1月1日以前、當(dāng)天及之后的文件。
3. 在適當(dāng)之處,以公開確定的方式解決世紀(jì)取值的含糊問題,以作為對(duì)兩位數(shù)字日期輸入的響應(yīng)。
4. 以明確指出世紀(jì)的方式進(jìn)行日期信息的存儲(chǔ)和輸出。
5. 根據(jù)quad-centennial原則來處理2000年將要出現(xiàn)的閏年。
這些標(biāo)準(zhǔn)是由英國(guó)標(biāo)準(zhǔn)協(xié)會(huì)在《DISC PD-2000-1A,2000年兼容性要求的定義》中所制訂的2000年兼容性要求的精華所在。
2. 產(chǎn)品兼容性
Oracle現(xiàn)有產(chǎn)品的設(shè)計(jì)都解決了2000年兼容性問題。
與現(xiàn)有Oracle數(shù)據(jù)庫相關(guān)的軟件產(chǎn)品在2000年日期改變兼容性方面的說明請(qǐng)參考下列表格和注解。為方便客戶,這里還提供了與仍被大量機(jī)構(gòu)使用的定型產(chǎn)品相對(duì)應(yīng)的2000年兼容信息。根據(jù)它們到期程度不同,其中一部分產(chǎn)品未解決2000年兼容問題或只是部分解決了這一問題。
表格與注解分為兩大部分:現(xiàn)有產(chǎn)品和定型產(chǎn)品。
現(xiàn)有產(chǎn)品:目前屬于Oraclemetals支持產(chǎn)品系列的產(chǎn)品。根據(jù)兼容性級(jí)別,我們對(duì)每種產(chǎn)品/產(chǎn)品集進(jìn)行了說明。此類型產(chǎn)品主要為“完全兼容”產(chǎn)品。
定型產(chǎn)品:己發(fā)布了非支持聲明的產(chǎn)品和/或?qū)儆凇把娱L(zhǎng)輔助支持”類型的產(chǎn)品。
根據(jù)兼容性級(jí)別,我們對(duì)每種產(chǎn)品/產(chǎn)品集進(jìn)行了說明。對(duì)于到期產(chǎn)品來說,主要是給出有關(guān)如何簡(jiǎn)化代碼更改和繞過問題的建議。我們希望使用這些定型產(chǎn)品的用戶及早考慮升級(jí)為Oraclemetals支持產(chǎn)品,以便減少日期據(jù)轉(zhuǎn)換的工作量,并獲得最優(yōu)支持。
2.1兼容性水平
兼容性級(jí)別 說明
完全兼容 產(chǎn)品的現(xiàn)有生產(chǎn)版本完全符合第一部分描述的五個(gè)因素
部分兼容(1) 產(chǎn)品的現(xiàn)有生產(chǎn)版本不完全符合第一部分描述的五個(gè)因素,但Oracle將在產(chǎn)品今后的版本中提供完全兼容性。
部分兼容(2) 此定型產(chǎn)品的現(xiàn)有生產(chǎn)版本不完全符合第一部分描述的五個(gè)因素,且Oracle沒有計(jì)劃在將來改進(jìn)其兼容性。
不兼容 此產(chǎn)品的現(xiàn)有生產(chǎn)版本不符合第一部分描述的五個(gè)因素,且Oracle今后不再改變其兼容性。
3. 各種產(chǎn)品兼容性信息列表:
略。詳細(xì)內(nèi)容請(qǐng)到ORACLE公司 網(wǎng)站http://www.oracle.com/year2000/上查詢。
3.6現(xiàn)有產(chǎn)品注解
3.6.1不進(jìn)行數(shù)據(jù)操作的產(chǎn)品
這些產(chǎn)品不進(jìn)行數(shù)據(jù)操作,因此它們本質(zhì)上就是2000年兼容的。
3.6.2 Orac1e服務(wù)器
Oracle服務(wù)器是2000年兼容的。
使用Oracle RDBMS(Oracle7和Oracle8服務(wù)器)并采用DATE
數(shù)據(jù)類型(用于日期和/或帶時(shí)間值的日期)的應(yīng)用,在2000年到來
之際無需為其存儲(chǔ)的數(shù)據(jù)擔(dān)心。Oracle7和Oracle8服務(wù)器DATE數(shù)據(jù)
類型以四位數(shù)字年份和包括以秒數(shù)計(jì)時(shí)(一般為
‘YYYY:MM:DD:HH24:MI:SS’)的精確程度來存儲(chǔ)日期及時(shí)間數(shù)據(jù)。
Oracle服務(wù)器、網(wǎng)絡(luò)產(chǎn)品及系統(tǒng)管理產(chǎn)品不會(huì)出現(xiàn)任何操作問
題。 Oracle的開發(fā)部門已對(duì)各種2000年操作情況進(jìn)行了測(cè)試以確保
用戶在世紀(jì)更替之際不會(huì)受到任何影響。測(cè)試的內(nèi)容包括復(fù)制、時(shí)間
點(diǎn)的恢復(fù)、分布式事務(wù)等。系統(tǒng)管理和網(wǎng)絡(luò)化特性通過時(shí)區(qū)/日期行/
世紀(jì)來完成。
Oracle RDBMS已采用四位數(shù)字年份來存儲(chǔ)日期(‘OraDate’格式),
這樣使用DATA數(shù)據(jù)類型的用戶就不會(huì)有任何應(yīng)用級(jí)方面的問題。為
了方便使用兩位數(shù)字年份格式的應(yīng)用解決2000年兼容性問題,Oracle7
和Oracle8提供了一種特殊的年份格式表征碼‘RR’。采用‘RR’格
式輸入的兩位數(shù)字年份將做如下轉(zhuǎn)換:
當(dāng)前年份:最后兩位數(shù)字指定的兩位數(shù)字年份‘RR’年份格式返
回
0-49 0-49 當(dāng)前世紀(jì)
50-99 0-49 下一世紀(jì)
0-49 50-99 上一世紀(jì)
50-99 50-99 當(dāng)前世紀(jì)
因此,無論在哪一世紀(jì)輸入數(shù)據(jù),‘RR’格式都會(huì)確保數(shù)據(jù)庫中
所存年份如下所示:
如果當(dāng)前年份在后半世紀(jì)(50-99)
? 且輸入的兩位數(shù)字年份在‘00’和‘49’之間:將按下一世紀(jì)
的年份存儲(chǔ)。例如,1996年輸入的‘02’將存為‘2002’
? 且輸入的兩位數(shù)字年份在‘50’和‘99’之間:將按本世紀(jì)年
份存儲(chǔ)。例如,1996年輸入的‘97’將存為‘1997’。
如果當(dāng)前年份在前半世紀(jì)(00-49)
? 且輸入的兩位數(shù)字年份在“00’和‘49’之間:將按本世紀(jì)年
份存儲(chǔ)。例如,2001年輸入的‘02’將存為‘2002’
? 且輸入的兩位數(shù)字年份在‘50’和‘99’之間:將按下一世紀(jì)
的年份存儲(chǔ)。例如2001年輸入的‘97’將存為‘1997’
‘RR’日期格式可用于數(shù)據(jù)庫中DATE數(shù)據(jù)的插入及更新。因?yàn)?/p>
0rac1e一直以四位數(shù)字的格式存儲(chǔ)日期的YEAR部分,故您無需對(duì)己
存儲(chǔ)于數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行檢索/查詢。
3.6.2.1以字符數(shù)據(jù)類型存儲(chǔ)的日期
‘RR’數(shù)據(jù)格式只對(duì)使用Oracle DATE數(shù)據(jù)類型的用戶應(yīng)用起作
用。對(duì)于那些使用CHAR或VARCHAR2數(shù)據(jù)類型的字符串的應(yīng)用,除非
在設(shè)計(jì)時(shí)已有考慮,否則就須對(duì)應(yīng)用作出修改、加入例行程序以確保
這樣的數(shù)據(jù)在受到世紀(jì)更替的影響時(shí)可得到正確的處理。對(duì)于新建應(yīng)
用或正進(jìn)行修改以使按字符串存儲(chǔ)的日期數(shù)據(jù)可滿足2000年兼容的
應(yīng)用,我們建議將這些日期轉(zhuǎn)換為Oracle DATE數(shù)據(jù)類型,這樣就確
保了它們的2000年兼容性,如果此方法不可行,那就以語言及格式
相獨(dú)立且能處理全部年份的規(guī)范形式存儲(chǔ)數(shù)據(jù)?!甕YYY/MM/DD’,在必
要時(shí)加上時(shí)間元素‘HH24:MI:SS’這一格式即是一例。每當(dāng)顯示或從
用戶及其它程序中接收到以此形式存儲(chǔ)的日期時(shí),必須將其轉(zhuǎn)換為正
確的外部格式。
格式‘YYYY/MM/DD HH24:MI:SS’有如下優(yōu)勢(shì):
? 語言獨(dú)立,即月份為數(shù)字形式
? 年份為四位數(shù)字,明確了世紀(jì)取值
? 時(shí)間得到了全部表示,最重要的元素在前,這樣基于字符進(jìn)行
的排序操作即可對(duì)日期進(jìn)行正確的排序
它的缺點(diǎn)之一是不支持公元前日期。
3.6.4 Oracle Server Manager
Oracle Server Manager顯示的Oracle服務(wù)器信息可經(jīng)由內(nèi)部發(fā)
出的SQL查詢從RDBMS中獲得。因此它完全繼承了RDBMS的兼容性。
3.6.5 Oracle ODBC 驅(qū)動(dòng)程序
Oracle ODBC驅(qū)動(dòng)程序使用ODBC日期和時(shí)間數(shù)據(jù)類型,它們都包
括四位數(shù)字的年份元素。
3.6.6 Oracle Enterprise Manager
Oracle Enterprise Manager顯示的Oracle服務(wù)器信息可經(jīng)由內(nèi)
部發(fā)出的SQL查詢從RDBMS中獲得。因此它完全繼承了RDBMS的兼容
性。
3.6.7 Oracle Precompiler
Oracle Precompiler產(chǎn)品是2000年兼容的。
Oracle Precompiler產(chǎn)品不含有對(duì)操作日期型數(shù)據(jù)的預(yù)定義例行
程序,所有這樣的操作都由開發(fā)商以3GL代碼形式提供,并調(diào)用至服
務(wù)器上的PL/SQL引擎。因此2000年兼容性的解決取決于開發(fā)商正確
設(shè)計(jì)與編寫應(yīng)用代碼。
3.6.8 Oracle OLAP Server產(chǎn)品
Express Server和Personal Express是2000年兼容的。處理時(shí)
間大小和‘日期’數(shù)據(jù)類型的內(nèi)部機(jī)制是基于從一個(gè)固定基礎(chǔ)日期算
起的秒數(shù)決定的。2000年在此并無特殊意義,它會(huì)得到與其它數(shù)據(jù)一
樣的處理。所有日期的輸入、存儲(chǔ)、計(jì)算或顯示日期的功能都與2000
年前的操作一致。
第二個(gè)考慮因素是對(duì)于格式為兩位數(shù)字的年份的處理,如用“97”
代表“1997”。在缺省情況下,兩位數(shù)字的年份被解釋為在1950到2049
年之間,這除非通過選項(xiàng)YRABSTART特別指定才會(huì)有所改變。于是在
缺省值時(shí)“00”即被解釋為2000年。
考慮到除了不能被400整除的世紀(jì)元年(如1900年)之外,每4
年是一個(gè)閏年。Express將2000年作為閏年對(duì)待。我們可作一項(xiàng)簡(jiǎn)單
的測(cè)試,對(duì)2000年2月之內(nèi)的日期使用ENDOF(month)函數(shù)結(jié)果為
29FEB2000,驗(yàn)證了2000年確實(shí)已被作為閏年處理。
Express有一種可以轉(zhuǎn)換為日、月份及年份的“日期”數(shù)據(jù)類型。
它可以處理從1899年12月31日到大約400,000年間的日期。這是
日期數(shù)據(jù)在數(shù)據(jù)庫中的基本存儲(chǔ)方式。
Express還有一個(gè)向Express程序返回日期-時(shí)間“郵戳”的函數(shù)。
此時(shí)間郵戳常常用于跟蹤事件發(fā)生順序的應(yīng)用。此郵戳的返回值為一
個(gè)31位整數(shù),代表著從PC采用此規(guī)定起的那一刻(1950年)以來的
秒數(shù)。它將于2036年溢出。但所有使用此郵戳的Express應(yīng)用都可
將它轉(zhuǎn)換為可處理任意4位數(shù)字年份的文本(例如到9999)。我們?cè)?/p>
將來的產(chǎn)品版本中將改變?nèi)掌?時(shí)間郵戳函數(shù),使之返回一個(gè)較大的
十進(jìn)制數(shù)。這一數(shù)值可處理超過4000年的年份,且因?yàn)榇鎯?chǔ)它的文
本數(shù)據(jù)已經(jīng)可以處理任何4位數(shù)字的年份,故它不需要作任何變動(dòng)。
顯然,我們可在2036年年底之前的任何時(shí)候完成這項(xiàng)改動(dòng),當(dāng)然在
方便的情況下我們會(huì)及早行動(dòng)。
3.6.9 Oracle RDB
Oracle RDB是2000年兼容的。
使用Oracle RDB并采用DATE或TIMESTAMP數(shù)據(jù)類型的應(yīng)用無須
在2000年到達(dá)之際為其存儲(chǔ)的數(shù)據(jù)而擔(dān)心。Oracle RDB存儲(chǔ)含有全
部年份和世紀(jì)的DATE(SQL92兼容且為VMS風(fēng)格)和TIMESTAMP型數(shù)
據(jù),自從1984年此產(chǎn)品第一版問世起就一直如此。
Oracle RDB實(shí)現(xiàn)了SQL92 SQL標(biāo)準(zhǔn)中規(guī)定的大多數(shù)日期/時(shí)間功
能。用這些數(shù)據(jù)類型所作的日期比較自然就可以不受世紀(jì)更換的影
響。事實(shí)上RDB數(shù)據(jù)庫中可存儲(chǔ)及操作的最大年份為9999年。
3.6.10 Developer/2000客戶/服務(wù)器開發(fā)工具
Developer/2000客戶/服務(wù)器開發(fā)工具集是2000年兼容的。
Text選項(xiàng)Item和Display Item有兩個(gè)可以使用的特殊格式表征
碼‘RR’和‘RRRR’。這些格式表征碼采用上文描述的‘RR’日期格
式表示碼所用的規(guī)則。
“RRRR”格式表征碼允許將兩位數(shù)字年份輸入到四位數(shù)字域中,
并根據(jù)上文中‘RR’日期格式表征碼中的規(guī)則將其賦予正確的世紀(jì)值。
Developer/2000的報(bào)告模塊――Oracle Report和Oracle Graphic
不會(huì)受到世紀(jì)更替的影響,這是因?yàn)樗鼈冎饕菑囊运奈粩?shù)字形式存
儲(chǔ)年份的數(shù)據(jù)庫中檢索數(shù)據(jù)。而這些產(chǎn)品中所有允許在
數(shù)據(jù)庫中進(jìn)行數(shù)據(jù)操作的部分都是2000年兼容的。
Web Cartridge(適用于Developer/2000 1.4w版的應(yīng)用服務(wù)器)
是2000年兼容的。
3.6.11 Discoverer/2000客戶/服務(wù)器報(bào)告工具
Discoverer/2000客戶/服務(wù)器報(bào)告工具集是2000年兼容的。
Oracle Data Query和Oracle Data Browser都為帶兩位數(shù)字年
份的日期數(shù)據(jù)提供了包括‘RR’年份格式表征碼在內(nèi)的完全兼容性。
當(dāng)使用‘RR’格式表征碼時(shí)。在用來對(duì)數(shù)據(jù)庫進(jìn)行插入或刪除操作處,
都將加入相應(yīng)的世紀(jì)值。
3.6.12 Oracle OLAP開發(fā)及分析工具
Express Analyzer中所有與日期相關(guān)的功能都依靠Personal
Express和Express Server來完成。因此根據(jù)提供的指令使用現(xiàn)有生
產(chǎn)版本的Express Ana1yzer時(shí),它是2000年兼容的。
Oracle Sales Analyzer 1.5版是2000年兼容的,從1.5版起,
日期就以四位數(shù)字的格式存儲(chǔ)。
Oracle Sales Analyzer 1.5版將自動(dòng)更新早先版本數(shù)據(jù)庫,使
之采用四位數(shù)字日期格式。數(shù)據(jù)庫中所有現(xiàn)存的日期值和所有用戶定
義的對(duì)象(如報(bào)告、圖象、用戶測(cè)量值、用戶集合和保存的選項(xiàng)等)
將自動(dòng)更新為1.5版格式,并可在2000年使用。包括跨越1999年和
2000年在內(nèi)的帶有日期的計(jì)算都將得到正確處理。1.5版的更新和對(duì)
2000年的處理不需要DBA或最終用戶的介入。
1.5版前的版本到1999年12月31日就不能再繼續(xù)使用了。如果
在2000年1月1日或以后使用Oracle Sales Analyzer1.3版,則在
數(shù)據(jù)庫啟動(dòng)時(shí)Catalog integration process期間將會(huì)發(fā)生錯(cuò)誤。
Oracle Financial Analyzer版本(當(dāng)前版本--4.8.01)是2000
年兼容的。
Oracle Financial Controller(當(dāng)前版本1.0)是2000年兼容
的。
EIS和Oracle Express Analyzer(1.0版)包括下列2000年兼容
產(chǎn)品:
? EIS DOS 4.5A
? EIS Windows 4.8
? EIS Windows 4.5A
? Oracle Express Analyzer 1.0
但是,在安裝過程中當(dāng)前版本會(huì)檢查各DOS文件日期,它不會(huì)認(rèn)
為‘9x’要早于‘00’,這是MS-DOS在文件日期方面的限制。因此萬
一您在進(jìn)入2000年后的某一天安裝其中的一個(gè)版本,安裝時(shí)可能會(huì)
暫時(shí)將系統(tǒng)時(shí)間設(shè)置回二十世紀(jì)。
Oracle Express的基本技術(shù)是2000年兼容的。
Oracle Express Objects從2.0版起均為2000年兼容產(chǎn)品。
3.6.13帶有限日歷的產(chǎn)品
在2036年前運(yùn)作并提供完全兼容性。
3.6.14 Oracle Power Objects
Oracle Power Objects是2000年兼容的。在使用兩位數(shù)字年份
的日期數(shù)據(jù)之處,正確的世紀(jì)值的計(jì)算是根據(jù)本機(jī)操作系統(tǒng)、即
Microsoft Windows中的算法進(jìn)行的。例如對(duì)Windows95來說,其算
法與Oracle使用‘RR’年份格式的方法類似,不同點(diǎn)只是它采用在
‘現(xiàn)在時(shí)間’基礎(chǔ)上加減50年的方法,而不是Oracle算法中的2000
年而已。
3.6.15 Designer/2000和CASE產(chǎn)品
若生成的目標(biāo)產(chǎn)品支持2000年兼容性,Designer/2000也提供對(duì)
2000年兼容性的全面支持。例如,生成Developer/2000模塊時(shí),可
通過‘RR’日期格式表征碼實(shí)現(xiàn)對(duì)2000年問題的完全兼容,而生成
Visual Basic或C++模塊時(shí),兼容性必須由應(yīng)用開發(fā)商/程序員提
供。其中提供此兼容性的最為直接的方法就是使用四位數(shù)字的年份字
段。
Designer/2000使用的與基表中與審計(jì)列相關(guān)的日期庫觸發(fā)器來
維護(hù)。因此數(shù)據(jù)庫會(huì)處理這一問題。Designer/2000只顯示日期信息。
所有日期的顯示形式由一個(gè)‘.ini’文件變量(M.S Windows 3.1)
或一個(gè)注冊(cè)變量(M.S Windows NT/95)來決定,缺省值為DD Month
YYYY。當(dāng)然用戶也可以對(duì)它進(jìn)行修改。
并且,過程模型創(chuàng)建者(process modeler)會(huì)對(duì)日期進(jìn)行若干
運(yùn)算以支持其關(guān)鍵路徑分析功能。這些計(jì)算是用M.S.Windows數(shù)據(jù)類
型結(jié)構(gòu)來完成的。這樣2000年的日期改變不會(huì)產(chǎn)生任何問題。
3.6.16產(chǎn)品和平臺(tái)技術(shù)
MVS--1996年年底之前IBM將修改幾處小問題;
Open Gateway--只要目標(biāo)數(shù)據(jù)庫用四位數(shù)字的年份來存儲(chǔ)日期,
Open Gateway系列產(chǎn)品就能正確處理2000年問題。與Oracle7服務(wù)
器和Oracle8服務(wù)器類似,此產(chǎn)品中也可針對(duì)非Oracle數(shù)據(jù)來使用RR
日期格式,這樣就方便了使用兩位數(shù)字年份的應(yīng)用對(duì)2000年兼容性
的支持。除非日期在非Oracle數(shù)據(jù)庫中在INETGER或CHARACTER字
段中存儲(chǔ)(這是應(yīng)用設(shè)計(jì)問題),否則Open Gateway不會(huì)出現(xiàn)應(yīng)用級(jí)
的問題。
Open Gateway手冊(cè)正在進(jìn)行更新,為每個(gè)它支持的目標(biāo)數(shù)據(jù)庫添
加解決2000年問題的考慮因素。
適用于DB2的Oracle Transparent Gateway――安裝手冊(cè)及用戶
指南提供了針對(duì)21世紀(jì)日期輸入所需要的SQL語句編碼指令。該手
冊(cè)對(duì)21世紀(jì)的日期提供了專門指導(dǎo)。
DB2 Gateway手冊(cè)中指出:NLS-DATE-FORMAT甚至可以在未安裝DB2
Local Date Exit的情況下使用,這是因?yàn)镈B2可自動(dòng)接受這些格式。
DB2格式 表征碼/模式 范例
ISO/JIS Yyyy-mm-dd l996-12-31
USA mm/dd/yyyy 12/31/1996
EUR dd.mm.yyyy 31.12.1996
我們建議客產(chǎn)不要安裝DB2 Local Date Exit,并將上面所列三
種日期格式中的一種作為他們的Oracle缺省日期格式。這樣客戶就
總是必須提供四位數(shù)字的年份,于是就避免了混淆或意義含糊。
如果指定了適當(dāng)?shù)腘LS C DATE - FORMAT且沒有使用DB2 Local
Date Exit,適用于IBM DRDA的Oracle Transparent Gateway可對(duì)2000
年完全兼容。
VM-VM/ESA2.2.0版引人了對(duì)2000年兼容性的支持。詳細(xì)信息可
參見1BM網(wǎng)頁:http//vmdev.gpl.ibm.com/year200O/。
3.6.17 SQL *Plus
使用ACCEPT命令創(chuàng)建的DATE變量按字符串存儲(chǔ)。這些變量可用
DEFINE命令查看。SQL *plus程序開發(fā)商應(yīng)確保所存儲(chǔ)的字符串不會(huì)
與四位數(shù)字年份格式既‘DD-MON-YY’相混淆。
4.產(chǎn)品兼容性――定型產(chǎn)品
這一部分提供了有關(guān)定型產(chǎn)品的信息。
此處提及的產(chǎn)品都是此時(shí)正被某些客戶使用且不受Oraclemetals
支持或應(yīng)從那一類型中刪除的產(chǎn)品。
表4.1――定型產(chǎn)品
產(chǎn)品或打包產(chǎn)品 | 兼容性版本 | 產(chǎn)品/打包產(chǎn)品 | 參見注解 |
SQL*Forms Version3.0& SQL*Menu Version5.0& | 不兼容 不兼容 | 4.2.1 | |
SQL*Forms Version2.0/2.3 SQL*Report Version Writer1.1 SQL*Report Version1.0 (RPT) | 不兼容 不兼容 不兼容 | 4.2.2 4.2.3 4.2.4 | |
Oracle Forms Version4.0 OracleReports2.0&Oracli Graphics2.0(CDE1) | 不兼容 | 4.2.10 | |
Oracle RDBNMS Version6 | 部分兼容(2) | 4.2.5 | |
Oracle Data Version3.0 | 不兼容 | 4.2.6 | |
Oracle Data Browser Version 1.0 | 完全兼容 | 4.2.7 | |
Oracle CASE/Dictionary Version5.1 | 不兼容 | 4.2.8 | |
Oracle Core Applications Version9 | 不兼容 | 4.2.9 |
4.2定型產(chǎn)品注解
4.2.1 SQL*Forms Version 3.0,SQL*Menu Version 5.0
這些產(chǎn)品無2000年兼容性。但可以通過使用四位數(shù)字年份日期
字段來達(dá)到較高水平的兼容性。如使用兩位數(shù)字年份字段,那么為了
確保向數(shù)據(jù)庫存儲(chǔ)新數(shù)據(jù)或改變?nèi)掌跀?shù)據(jù)時(shí)能使用正確的世紀(jì)值,則
應(yīng)使用觸發(fā)器來調(diào)用使用用戶編寫的實(shí)現(xiàn)相應(yīng)算法的存儲(chǔ)過程或函數(shù)
來實(shí)現(xiàn)兼容性。
我們建議的工作方式如下:
在SQL*Forms 3.0中對(duì)DATE字段采取如下步驟:
1. 將日期類型改為DATETIME。
2. 使用格式表征碼DD-MON-YY。
3. 創(chuàng)建一個(gè)On-Validate-Field觸發(fā)器:(注意此代碼對(duì)名為
hiredate的DATE字段重新格式化)。
DECLARE
tempdate CHAR(9);
BEGIN
tempdate:=TO-CHAR(:hiredate,‘DD-MON-YY);
SELECT TO-DATE(tempdate,“DD-MON-RR’)
INTO:hiredate
FROM dual;
EXCEPTION
WHEN VALUE-ERROR THEN
MESSAGE(invalid format DD-MON-YY’);
BELL;
RAISE FORM-TRIGGER-FAIL URE;
END;
Oracle Customer Support可提供技術(shù)資料,給出有關(guān)使用
‘RR’年份格式表征碼的詳細(xì)內(nèi)容。
4.2.2 Oracle RDBMS第Version6
此產(chǎn)品是部分2000年兼容產(chǎn)品。而它之所以不能劃分為完全兼
容產(chǎn)品的唯一原因是當(dāng)使用兩位數(shù)字年份日期時(shí),它沒有定出世紀(jì)缺
省值的程序解決方案(即Oracle RDBMS第6版中沒有Oracle7 Server
和Oracle8 Server中采用的‘RR’算法)。
象Oracle7 Server和Oracle8 Server一樣,Oracle RDBMS第6
版的DATE數(shù)據(jù)類型在存儲(chǔ)日期和時(shí)間數(shù)據(jù)時(shí)可精確到四位數(shù)字年份
和秒級(jí)時(shí)間(一般為‘YYYY:MM:DD:HH24:MI:SS’)。
4.2.3 Oracle Forms4.0,Oracle Reports2.0和Oracle Graphics2.0
(CDE 1)
這些產(chǎn)品均不是2000年兼容產(chǎn)品。但它們可以達(dá)到較高水平的
兼容性-請(qǐng)參見4.2.1部分中關(guān)于SQL*Forms3.0版和SQL*Menu5.0版
的注解。