2013-10-18 219 views
1

背景:我使用Spring將Sybase存儲過程返回值映射到java對象。「Select Distinct Null As xxxxx」是什麼意思?

例如一地圖的varchar一個的Sybase數據類型作爲Java中的String類型和int一個的Sybase數據類型作爲Java中int類型等

我曾經在的一個遇到下面的代碼存儲過程:

SELECT DISTINCT 
    A.Col1 AS val1, 
    A.Col2 AS val2, 
    NULL AS someVal, 
    A.col3 AS val3, 
    ... 
    A.col9 AS val9 
FROM #SomeTable A 
ORDER BY Col2, Col3 

我有2個相關的問題:

  1. 什麼母鹿在這種情況下,s是Null?我對這裏發生的事情感到困惑。

  2. 我可以通過查看存儲過程中早先定義的表A的表定義來確定Col1,Col2等的數據類型。因此,我知道我可以在我的Java對象中爲val1,val2等定義的數據類型。但是,「someVal」又如何呢?我應該爲這個Null值執行什麼樣的數據類型映射?

我在SQL方面相當缺乏經驗。也許答案比我意識到的要簡單得多。

+2

你將有一個叫做'someVal'用'NULL'作爲每一行的值列。 –

+0

@SotiriosDelimanolis - Java中的哪些數據類型將會變成什麼?字符串,int等? – Josh

回答

2

您將有一個名爲someVal的列和NULL作爲每行的值。

隨着ResultSet,你可以使用getString(int)getString(String)其中規定

返回:列值;如果該值爲SQL NULL,則返回值 爲空

你可以選擇你想要的任何引用類型,包括Void,映射此列。或者不要使用任何,即。不要映射它。取決於你的要求。

+0

這回答了第一個和第二個問題。 – Josh

+0

你有鏈接到你在帖子中引用的文檔嗎? – Josh

+0

@SoylentGreen對不起,我不在。[這裏是'ResultSet'的javadoc](http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getString(int))。至於'SELECT NULL',我找不到任何文檔,但你可以試試。這只是一個可用的SQL功能。 –

3

這會在所有行中創建一個包含NULL值的列。這招是有用的,當

  • 查詢結果的讀者希望一列someVal在那裏,治療情況下,當此列缺少的錯誤,或
  • 您的查詢裏面GROUP BY一個UNION ALL查詢的一部分查詢,其他查詢填寫NULL的值。

這裏是後來的情況爲例:

SELECT -- This query flattens the results of the two sub-queries 
    document_id 
, MIN(approval_date) as approval_date 
, MIN(availability_date) as availability_date 
FROM (
    SELECT -- This subquery supplies approval_date 
     document_id 
    , MAX(approval_date) AS approval_date 
    , NULL AS availability_date 
    FROM document_approvals 
    GROUP BY document_id 
UNION ALL 
    SELECT -- This subquery supplies availability_date 
     document_id 
    , NULL AS approval_date 
    , MAX(availability_date) AS availability_date 
    FROM document_approvals 
    GROUP BY document_id 
) 
GROUP BY document_id