1

背景: Spring を使用して、Sybase ストアド プロシージャの戻り値を Java オブジェクトにマッピングしています。

たとえば、Sybase データ型を Javavarcharの型としてマップし、Sybase データString型を Javaの型intとしてマップしますint

ストアド プロシージャの 1 つで次のコードを見つけました。

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. Nullこのシナリオではどういう意味ですか? ここで何が起こっているのか混乱しています。

  2. もちろん、以前にストアド プロシージャで定義したテーブル A のテーブル定義を調べることで、Col1、Col2 などのデータ型を特定できます。したがって、val1、val2 などの Java オブジェクトで定義できるデータ型がわかります。しかし、「someVal」はどうでしょうか。この Null 値に対してどのデータ型マッピングを実行すればよいですか?

私はSQLの経験がかなり浅いです。おそらく、答えは私が思っているよりもはるかに簡単です。

4

2 に答える 2

3

これにより、NULLすべての行に値を持つ列が作成されます。このトリックは、次の場合に役立ちます。

  • クエリ結果のリーダーは、列someValが存在することを期待しており、この列が欠落している状況をエラーとして扱います。または
  • あなたのクエリはUNION ALLクエリ内のGROUP BYクエリの一部であり、他のクエリが s の値を埋めています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
于 2013-10-18T15:44:13.900 に答える
2

各行の値として でsomeVal呼び出される列があります。NULL

を使用すると、またはどの状態ResultSetを使用できますかgetString(int)getString(String)

戻り値: 列の値。値が SQL NULL の場合、返される値は null

を含む任意の参照タイプを選択して、Voidこの列をマップできます。または、何も使用しないでください。マッピングしないでください。要件によって異なります。

于 2013-10-18T15:43:06.027 に答える