java - 使用 JOOQ 从 Oracle 存储过程返回输出参数列表

标签 java sql oracle plsql jooq

作为 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/

相关文章:

java - 如何在 Java 中对泛型类型设置约束?

java - 我们可以调用类构造函数吗?

SQL Server SELECT @VARIABLE = TOP 1

java - 使用 Oracle JDK 1.8 在 Amazon Linuc 上访问 WS02 API 管理器中的文件时出现 IO 错误

mysql - SQL:当且仅当子项具有特定属性时获取父项

sql - 在不知道 Oracle 名称的情况下删除索引或约束

java.lang.ClassCastException 接口(interface)在 android java 上

jboss 服务器的 Java 文档?

mySQL - 将库存表中的多个项目 ID 添加到订单表

mysql - 比较 SQL 中的日期大小写