一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

ORA-01855: AM/A.M. or PM/P.M. required問(wèn)題排查與解析

 Jimmy Booker 2012-09-26

1.【問(wèn)題現(xiàn)象】
在中文Windows環(huán)境的SQL*Plus中使用如下日期操作SQL時(shí)報(bào)錯(cuò)。具體報(bào)錯(cuò)信息如下:
sec@ora10g> insert into t values (TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'));
insert into t values (TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'))
                               *
第 1 行出現(xiàn)錯(cuò)誤:
ORA-01855: AM/A.M. or PM/P.M. required

sec@ora10g> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;
select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual
                *
第 1 行出現(xiàn)錯(cuò)誤:
ORA-01855: AM/A.M. or PM/P.M. required

2.【問(wèn)題原因】
在本地NLS_DATE_LANGUAGE參數(shù)指定的語(yǔ)言中沒(méi)有找到“AM”這樣的時(shí)間定義,也就是說(shuō)在具體的國(guó)家語(yǔ)言下此類“AM”的定義是不相同的,比如,在中文“SIMPLIFIED CHINESE”中就應(yīng)該指定為“上午/下午”,在美國(guó)的語(yǔ)言中就應(yīng)該指定為“A.M. / P.M.”,在英國(guó)語(yǔ)言或西歐語(yǔ)言中就要指定為“AM/PM”。注意其中的區(qū)別。

這里給出一種查詢NLS_DATE_LANGUAGE參數(shù)的方法:
sec@ora10g> col PARAMETER for a30
sec@ora10g> col VALUE for a30
sec@ora10g> select * from v$nls_parameters;

PARAMETER                      VALUE
------------------------------ ------------------------------
NLS_LANGUAGE                   SIMPLIFIED CHINESE
NLS_TERRITORY                  CHINA
NLS_CURRENCY                   ¥
NLS_ISO_CURRENCY               CHINA
NLS_NUMERIC_CHARACTERS         .,
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              SIMPLIFIED CHINESE
NLS_CHARACTERSET               AL32UTF8
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY              ¥
NLS_NCHAR_CHARACTERSET         UTF8
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE

已選擇19行。

3.【問(wèn)題處理】 方法很簡(jiǎn)單,第一類處理方法就是嚴(yán)格按照具體國(guó)家語(yǔ)言的定義格式書(shū)寫(xiě)特定的時(shí)間字符串,另一類處理方法是修改NLS_DATE_LANGUAGE參數(shù)以便適應(yīng)某一種日期字符串的寫(xiě)法。下面從這兩類處理思想出發(fā),給出三種可行的處理方法。
1)第一種方法:將原字符串中的“AM”修改為中國(guó)特色的的“上午”
sec@ora10g> select TO_Date( '22/10/2009 12:00:00 上午', 'DD/MM/YYYY HH:MI:SS AM') from dual;

TO_DATE('22/10
--------------
22-10月-09

sec@ora10g> alter session set NLS_DATE_FORMAT='MM/DD/YYYY HH:MI:SS AM';

會(huì)話已更改。

sec@ora10g> select TO_Date( '22/10/2009 12:00:00 上午', 'DD/MM/YYYY HH:MI:SS AM') from dual;

TO_DATE('22/10/200912:00
------------------------
10/22/2009 12:00:00 上午

2)第二種處理方法:直接在session中修改NLS_DATE_LANGUAGE參數(shù),即刻生效。
(1)修改NLS_DATE_LANGUAGE為“AMERICAN”
sec@ora10g> alter session set NLS_DATE_LANGUAGE = 'AMERICAN';

會(huì)話已更改。

(2)再一次嘗試查詢,此時(shí)已經(jīng)不再報(bào)錯(cuò)
sec@ora10g> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;

TO_DATE('10/
------------
22-OCT-09

(3)格式化一下日期格式,以便更加清晰的查看結(jié)果。
sec@ora10g> alter session set NLS_DATE_FORMAT='MM/DD/YYYY HH:MI:SS AM';

會(huì)話已更改。

sec@ora10g> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;

TO_DATE('10/22/200912:
----------------------
10/22/2009 12:00:00 AM

3)第三種方法:修改Windows注冊(cè)表中的NLS_LANG參數(shù),以便達(dá)到迂回的修改NLS_DATE_FORMAT參數(shù)的目的
(1)進(jìn)入Windows注冊(cè)表方法
點(diǎn)擊Windows操作系統(tǒng)的左下角的“開(kāi)始”(“start”),然后點(diǎn)擊“運(yùn)行”(Run),最后輸入“regedit”回車后便可進(jìn)入到注冊(cè)表界面。

(2)在注冊(cè)表中按照下面的過(guò)程導(dǎo)航,即可定位到NLS_LANG變量
“My Computer” --> “HKEY_LOCAL_MACHINE” --> “SOFTWARE” --> “ORACLE” --> “KEY-OraDb10g_home1”
此時(shí)在注冊(cè)表的右側(cè)就能發(fā)現(xiàn)“NLS_LANG”的身影了

(3)雙擊“NLS_LANG”,把內(nèi)容替換為“AMERICAN_AMERICA.ZHS16GBK”或“AMERICAN_CHINA.ZHS16GBK”即可(NLS_LANG的第一部分“語(yǔ)言”起作用)。

(4)驗(yàn)證查詢
sec@ora10g> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;

TO_DATE('10/
------------
22-OCT-09

sec@ora10g> alter session set NLS_DATE_FORMAT='MM/DD/YYYY HH:MI:SS AM';

Session altered.

sec@ora10g> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;

TO_DATE('10/22/200912:
----------------------
10/22/2009 12:00:00 AM

4.小結(jié)
Oracle的日期操作本身相對(duì)其他數(shù)據(jù)類型操作來(lái)說(shuō)復(fù)雜很多,在日常的使用過(guò)程中要多加總結(jié)與記錄。
鑒于本文中提到的問(wèn)題,在書(shū)寫(xiě)腳本的時(shí)候或使用工具生成腳本的時(shí)候,一定要注意腳本中日期類字符串的書(shū)寫(xiě)格式。以防因此導(dǎo)致數(shù)據(jù)無(wú)法錄入。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    欧美一区日韩二区亚洲三区| 成人综合网视频在线观看| 国产性色精品福利在线观看| 日韩免费国产91在线| 日韩国产传媒在线精品| 欧美又大又黄刺激视频| 亚洲国产欧美久久精品| 一区二区在线激情视频| 中文字幕欧美视频二区| 在线亚洲成人中文字幕高清| 99久热只有精品视频免费看| 麻豆国产精品一区二区| 国产精品久久精品国产| 亚洲av秘片一区二区三区| 国产一级片内射视频免费播放| 亚洲国产av在线观看一区 | 麻豆在线观看一区二区| 国产精品日本女优在线观看| 日本不卡一区视频欧美| 女厕偷窥一区二区三区在线| 国产av乱了乱了一区二区三区| 国产一区二区在线免费| 日本免费熟女一区二区三区| 在线观看国产午夜福利| 久久亚洲午夜精品毛片| 国产在线不卡中文字幕| 人妻久久这里只有精品| 欧美日韩国产综合特黄| 99久久精品午夜一区| 性感少妇无套内射在线视频| 国产欧美日产久久婷婷| 日本深夜福利在线播放| 91亚洲熟女少妇在线观看| 久一视频这里只有精品| 中文字幕熟女人妻视频| 国产爆操白丝美女在线观看| 亚洲最大的中文字幕在线视频| 亚洲欧洲成人精品香蕉网| 欧美精品激情视频一区| 伊人天堂午夜精品草草网| 91精品蜜臀一区二区三区|