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

时间:2015-06-03 20:11:40

标签: java sql oracle plsql jooq

作为Oracle存储过程的输出,我想使用JOOQ将id列表作为输出参数返回给我的Java代码。 id元素的数量可以变化。如何使用JOOQ执行此操作以及如何对PL / SQL过程进行编码以实现此目的。

1 个答案:

答案 0 :(得分:1)

在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()运算符

嵌入了该函数
DSL.using(configuration)
   .selectFrom(table(Routines.getIds()))
   .fetch()
   .forEach(System.out::println);

这会产生个人记录

+------------+
|COLUMN_VALUE|
+------------+
|           1|
+------------+
+------------+
|COLUMN_VALUE|
+------------+
|           2|
+------------+
+------------+
|COLUMN_VALUE|
+------------+
|           3|
+------------+
+------------+
|COLUMN_VALUE|
+------------+
|           4|
+------------+
相关问题