1

背景:我正在使用 Spring 将 Sybase 存储过程返回值映射到 java 对象。

例如,我将 Sybase 数据类型映射为Java 中varchar的类型,将 Sybase 数据类型映射为 Java中的类型等。Stringintint

我在其中一个存储过程中遇到了以下代码:

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

我有两个相关的问题:

  1. Null在这种情况下是什么意思?我对这里发生的事情感到困惑。

  2. 我当然可以通过查看存储过程中前面定义的表 A 的表定义来确定 Col1、Col2 等的数据类型。因此,我知道我可以在我的 Java 对象中为 val1、val2 等定义什么数据类型。但是“someVal”呢?我应该为这个 Null 值执行什么数据类型映射?

我对SQL相当缺乏经验。也许答案比我意识到的要简单得多。

4

2 回答 2

3

这将创建一个包含NULL所有行中的值的列。这个技巧在以下情况下很有用

  • 查询结果的读者希望有一列someVal存在,将缺少该列的情况视为错误,或者
  • 您的查询是查询中查询的一部分UNION ALLGROUP BY其他查询填充NULLs 的值。

以下是后一种情况的示例:

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

您将有一个名为someValwith的列NULL作为每一行的值。

使用 a ResultSet,您可以使用getString(int)or getString(String)which states

返回:列值;如果值为 SQL NULL,则返回值为 null

您可以选择任何您想要的引用类型,包括Void映射此列。或者不使用任何,即。不要映射它。取决于你的要求。

于 2013-10-18T15:43:06.027 回答