如何将 Java 的 collection/array 数据传递给过程调用?韩亚
How can I pass from Java a collection/array of data to procedure call? HANA
假设我有一个 ID 列表:111、112、113,我使用 Java:
执行以下查询获取的
SELECT "id" FROM User WHERE (email, name) IN (("", ""), ("", ""));
列表长度会有所不同。
从 Java 我需要将这个 list/collection/array ID 传递给存储过程。我该怎么做?
CREATE PROCEDURE "PROCEDUREEXAMPLE" (IN userIds ??COLLECTION??) LANGUAGE SQLSCRIPT SQL SECURITY DEFINER
AS
BEGIN
//Do the rest
END
我想使用另一个过程将第一个查询的结果传递给另一个过程,但如您所见,第一个 sql 是动态的,值会有所不同。
一种方法是将这些 ID 存储在临时 table 中,过程调用将访问它们,但我想知道是否可以将数据集合传递给过程调用。
欢迎提出其他实现方法。
谢谢
这个问题之前已经在这里被问过和回答过好几次了。
不,不可能将 java 集合或 java 值数组传递到 SAP HANA SQL 语句并获得相应的 IN LIST
.
也没有 java 数组到 SAP HANA SQL 数组的映射。
为了解决这个问题,有两种主要方法可用:
- 自己根据集合元素创建IN-LIST。由于元素数量的变化,这当然会导致准备好的语句重用问题。处理这个问题的一种方法是准备一个包含更多元素的语句,并且只绑定那些你在 collection/array.
中获得元素的语句
- 创建一个临时的 table,用集合的元素填充它,一个元素 = 一行并使用
INNER JOIN
基于这组元素进行过滤。
假设我有一个 ID 列表:111、112、113,我使用 Java:
执行以下查询获取的SELECT "id" FROM User WHERE (email, name) IN (("", ""), ("", ""));
列表长度会有所不同。
从 Java 我需要将这个 list/collection/array ID 传递给存储过程。我该怎么做?
CREATE PROCEDURE "PROCEDUREEXAMPLE" (IN userIds ??COLLECTION??) LANGUAGE SQLSCRIPT SQL SECURITY DEFINER
AS
BEGIN
//Do the rest
END
我想使用另一个过程将第一个查询的结果传递给另一个过程,但如您所见,第一个 sql 是动态的,值会有所不同。
一种方法是将这些 ID 存储在临时 table 中,过程调用将访问它们,但我想知道是否可以将数据集合传递给过程调用。
欢迎提出其他实现方法。 谢谢
这个问题之前已经在这里被问过和回答过好几次了。
不,不可能将 java 集合或 java 值数组传递到 SAP HANA SQL 语句并获得相应的 IN LIST
.
也没有 java 数组到 SAP HANA SQL 数组的映射。
为了解决这个问题,有两种主要方法可用:
- 自己根据集合元素创建IN-LIST。由于元素数量的变化,这当然会导致准备好的语句重用问题。处理这个问题的一种方法是准备一个包含更多元素的语句,并且只绑定那些你在 collection/array. 中获得元素的语句
- 创建一个临时的 table,用集合的元素填充它,一个元素 = 一行并使用
INNER JOIN
基于这组元素进行过滤。