?
? ????? 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)是由英國標(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輔助支持”類型的產(chǎn)品。
根據(jù)兼容性級(jí)別,我們對(duì)每種產(chǎn)品/產(chǎn)品集進(jìn)行了說明。對(duì)于到期產(chǎn)品來說,主要是給出有關(guā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)行了測試以確保
用戶在世紀(jì)更替之際不會(huì)受到任何影響。測試的內(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)勢:
? 語言獨(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)簡單
的測試,對(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)。我們在
將來的產(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)告、圖象、用戶測量值、用戶集合和保存的選項(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è)注冊變量(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手冊正在進(jìn)行更新,為每個(gè)它支持的目標(biāo)數(shù)據(jù)庫添
加解決2000年問題的考慮因素。
適用于DB2的Oracle Transparent Gateway――安裝手冊及用戶
指南提供了針對(duì)21世紀(jì)日期輸入所需要的SQL語句編碼指令。該手
冊對(duì)21世紀(jì)的日期提供了專門指導(dǎo)。
DB2 Gateway手冊中指出: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版
的注解。