熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

如何解決ORA-01843與NLS

2022-06-13   來源: Oracle 

  在Oracle SQL的where子句中傳入字符類型參數使得可以直接和日期類型比較或者轉換一下同日期類型比較
如果傳入的字符格式和NSL_DATE_FORMAT一致那麼可以不轉換直接用否則會報ORA錯誤如果轉換得不正確則可能會報ORA或其他錯誤
例如
Trc代碼
SQL>

  復制代碼 代碼如下:

  elect count(*) from dba_objects where created>to_date();
select count(*) from dba_objects where created>to_date()


行出現錯誤:
ORA: 文字與格式字符串不匹配
Trc代碼
SQL>

  復制代碼 代碼如下:

  select count(*) from dba_objects where created>to_date(mmdd
yyyy);
select count(*) from dba_objects where created>to_date(mmddyyyy
)


行出現錯誤:
ORA: 無效的月份
不能識別的字符串和格式轉換不對的字符串測試時會出現這樣的錯誤
使用to_date轉換的格式字符串主要為DDMONRR/DDMONRRRRYYYYMMDD/YYMMDD
如果能識別正確的結果應是這樣
SQL>

  復制代碼 代碼如下:

  select count(*) from dba_objects where created>;


COUNT(*)


這個格式和會話的NLS_DATE_FORMAT參數值相關

  復制代碼 代碼如下:

  select SYS_CONTEXT(USERENVNLS_DATE_FORMAT) DF SYS_CONTEXT(USERENVNLS_DATE_LANGUAGE) DL from dual


DF DL

DDMONRR SIMPLIFIED CHINESE
我們在會話級別修改一下這個參數的值
SQL> alter session set nls_date_format=YYYYMMDD;
會話已更改
SQL>

  復制代碼 代碼如下:

  select count(*) from dba_objects where created>;
select count(*) from dba_objects where created>


行出現錯誤:
ORA: 文字與格式字符串不匹配
這樣原來正確的操作就不對了使用符合NLS_DATE_FORMAT格式的字符串則可以了
SQL>

  復制代碼 代碼如下:

  select count(*) from dba_objects where created>;


這個參數和應用的環境也有關系有的應用會自動修改這個參數值因此測試工作最好放到sqlplus中進行
數據庫級別上這個參數的值是固定不變的如下所示
Trc代碼
SQL>

  復制代碼 代碼如下:

  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 DDMONRR
NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
NLS_CHARACTERSET ZHSGBK
NLS_SORT BINARY
NLS_TIME_FORMAT HHMISSXFF AM
NLS_TIMESTAMP_FORMAT DDMONRR HHMISSXFF AM
NLS_TIME_TZ_FORMAT HHMISSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DDMONRR HHMISSXFF AM TZR
NLS_DUAL_CURRENCY ¥
NLS_NCHAR_CHARACTERSET ALUTF
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE


已選擇
NLS_DATE_LANGUAGE是SIMPLIFIED CHINESE即簡體中文所以月份值是中文如


From:http://tw.wingwit.com/Article/program/Oracle/201404/30550.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.