2017-06-20 47 views
0

即使聯合中的兩個列都具有相同類型,HANA JDBC驅動程序在執行聯合時也會爲列返回不同的元數據類型。SAPA HANA JDBC元數據

考慮下面的情況:

create table test (
    A NCHAR(1), 
    B NCHAR(1) 
); 

insert into test values('A','B'); 

select a from test union select b from test; 

如果我檢查的結果集的元數據,結果列的類型是NVARCHAR,不按預期NCHAR,事件雖然都列具有類型NCHAR。

但是,如果我運行查詢:

select a from test union select a from test; 

的JDBC元數據返回預期的類型NCHAR。

其他數據庫,特別是Oracle並不像這樣。如果兩列的類型相同,則JDBC類型將保留在UNION上。

下面是我使用

Implementation-Title: SAP HANA JDBC Driver 
Implementation-Vendor: SAP SE 
Implementation-Version: 2.0.5-e130cbef291d3b62d5b138d3d5ce24e251013ac2 

對此有何想法JDBC驅動程序的細節? 有什麼辦法可以強制驅動程序保存類型?

在此先感謝

+0

對不起,我的錯誤我糾正了它。如果我在UNION中選擇同一列,則保留JDBC類型 – user7981386

回答

0

不幸的是,我們不知道您使用的驅動程序版本。但是,我懷疑這是由於HANA內部行爲,因爲(N)CHAR是不贊成使用的數據類型。在這種情況下,HANA會正確提供支持的類型(N)VARCHAR

+0

我添加了驅動程序的詳細信息(請參見上文)。 – user7981386

+0

如果我通過UNION選擇同一列,則JDBC類型將被保留。在實踐中,HANA支持(N)CHAR。據我所知,最初的計劃是放棄這些類型,但是他們已經被放棄了。如果已經搜索了關於這個主題的官方聲明,但沒有找到一個。如果官方聲明這些JDBC類型已被棄用,您能向我發送鏈接或文檔參考嗎? – user7981386

+0

當前文檔https://help.sap.com/viewer/4fe29514fd584807ac9f2a04f6754767/2.0.01/en-US/a33f7884b0c14c00b1a76ecd8af5feca.html明確指出,不支持固定長度字符類型,並且僅保留用於向後兼容。類型強制實際發生在UNION運算符(HANA服務器)中,而不是在JDBC驅動程序軟件中。查詢優化器的確瞭解到,在你的第二個例子中,它處理的是完全相同的列,所以它確實選擇了不同的UNION實現(UNION vs. MATERIALIZED UNION)。 –