作为 Oracle 存储过程的输出,我想使用 JOOQ 将 ID 列表作为输出参数返回到我的 Java 代码。 id 元素的数量可以变化。我如何使用 JOOQ 执行此操作以及应如何对 PL/SQL 过程进行编码以完成此操作。
最佳答案
Oracle 中返回集合/表/数组/游标的方式有很多种。我个人更喜欢以下方法,尽管 jOOQ 同样支持所有其他方法:
CREATE TYPE ids AS TABLE OF NUMBER(18);
/
CREATE OR REPLACE FUNCTION get_ids RETURN ids IS
v_result ids;
BEGIN
SELECT CAST(COLLECT(id) AS ids)
INTO v_result
FROM t_book;
RETURN v_result;
END get_ids;
/
相关生成的 jOOQ 类现在类似于这些:
public class GetIds extends AbstractRoutine<IdsRecord> {
// ...
}
public class IdsRecord extends ArrayRecordImpl<Long> {
// ...
}
public class Routines {
// For standalone calls
public static IdsRecord getIds(Configuration configuration) {
}
// For embedded calls
public static Field<IdsRecord> getIds() {
}
}
您现在可以这样使用独立调用:
Routines.getIds(configuration).forEach(System.out::println);
这直接产生数值
1
2
3
4
或者,您使用 DSL.table()
嵌入函数运算符(operator)
DSL.using(configuration)
.selectFrom(table(Routines.getIds()))
.fetch()
.forEach(System.out::println);
这会产生单独的记录
+------------+
|COLUMN_VALUE|
+------------+
| 1|
+------------+
+------------+
|COLUMN_VALUE|
+------------+
| 2|
+------------+
+------------+
|COLUMN_VALUE|
+------------+
| 3|
+------------+
+------------+
|COLUMN_VALUE|
+------------+
| 4|
+------------+
关于java - 使用 JOOQ 从 Oracle 存储过程返回输出参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30629740/