2016-09-29 109 views
6

我有一個bug report其中的Oracle 10g從to_char(datetime)截斷返回值:Oracle 10g爲什麼要to_char(日期時間)截斷字符串?

SQL> select to_char(systimestamp, '"day:"DD"hello"') from dual; 

TO_CHAR(SYSTIMESTAMP,'"DAY:"DD"HE 
--------------------------------- 
day:27hel 

值得注意的是,這並沒有出現在Oracle 11g發生。我的問題是,爲什麼它會發生?是否有一些配置變量設置爲告訴to_char(datetime)爲其返回值分配更大的緩衝區?

+0

我在10.2.0.5中看不到。你看到了哪個補丁級別(也許是平臺)? –

+0

[OP](https://github.com/theory/sqitch/issues/316)說:「Oracle版本:Oracle數據庫10g企業版版本10.2.0.1.0 - 64位生產。」 – theory

+1

看來Rusty的回答是正確的。在這些功能中,*在Oracle中沒有任何與「緩衝區分配」相關的參數。只有結果超過預期的結果類型(例如,4000 for varchar2就像這裏),你會得到一個異常。 我在你的「bug報告」中給出的紅色例子可以看到結果取決於表達式的長度。所以它看起來像SQL Plus的默認行爲的未命名列。顯示時裁剪結果。 嘗試給該列提供別名並使用COLUMN命令設置適當的寬度。請參閱https://docs.oracle.com/cd/B19306_01/server.102/b14357/ch6.htm –

回答

3

我不確定,但它可能只是在SQL * Plus中顯示。你有沒有試過在蟾蜍中運行它?或者,如果您將結果賦值給PL/SQL塊中的varchar2並輸出結果?

這裏是我在SQL * Plus參考已經找到的10G:

默認寬度和SQL格式化DATE列的格式* Plus的 由數據庫NLS_DATE_FORMAT參數確定。否則, 的默認格式寬度是A9。有關格式化DATE列的更多信息,請參閱COLUMN 命令的FORMAT子句。

將您的值修剪爲9個字符,這對應於默認的A9格式。我沒有相同的版本,這種行爲不是在11g中複製,所以你可以檢查我的理論嗎?

+0

謝謝,試圖讓[OP確認](https://github.com/theory/sqitch/issues/316#issuecomment-258007161)。 – theory

0

我有同樣的問題,我知道解決方案。 我使用版本11.2.0.4.0,但我認爲可以重複其他版本的情況。它以某種方式取決於客戶。 (例如,我可以不使用SQL *重複加,只能用PL/SQL Devepoper) 試試這個:

select to_char(systimestamp, '"day:"DD"йцукенг OR any other UTF-encoded-something"') from dual 
union all 
select to_char(systimestamp, '"day:"DD"hello"') from dual; 

你會得到以下結果:

day:08йцукенг OR any other UTF-encoded-so 
day:08hello 

你可以看到「mething 「丟失了。由於7個雙字節符號「йцукенг」,這正好超過了7個字節。 Oracle爲字符數分配緩衝區,而不是所需的字節數。 命令

alter session set nls_length_semantics=byte/char 

不幸的是不會影響這種行爲。

所以我的解決辦法是蒙上結果作爲VARCHAR2(enough_capacity)

select cast(to_char(systimestamp, '"day:"DD"йцукенг OR any other UTF-encoded-something"') as varchar(1000)) from dual 
union all 
select to_char(systimestamp, '"day:"DD"hello"') from dual 

顯式類型轉換使得表達獨立於客戶端或配置。順便說一句,同樣的事情發生在所有隱式的to_char轉換中。例如。

case [numeric_expression] 
when 1 then '[unicode_containing_string]' 
end 

結果可能被切斷。

+0

*真的*希望這會起作用,但[顯然不是](https://github.com/theory/sqitch/issues/316#issuecomment-262443669)。 :-( – theory

相關問題