如何将当前记录作为参数传递给例程?
How to pass current record as parameter to a routine?
我正在尝试使用例程通过 jOOQ 调用 PL/SQL 函数。函数如下:
CREATE OR REPLACE FUNCTION myschema.default_sort(rec myschema.mytable)
RETURNS text
LANGUAGE SQL
IMMUTABLE
AS $$
SELECT
TO_CHAR(.created_at, 'YYYYMMDDHHMMSSMS') || myschema.encode(.id)
$$;
我希望能够执行以下操作:
SELECT
mt.*,
myschema.default_sort(mt)
FROM
myschema.mytable mt;
所以在jOOQ中,生成例程:
public static Field<String> defaultSort(MyTableRecord rec) {
//do stuff
}
但是到了调用的时候,我不知道如何在例程中传递当前行:
dsl.select(
Tables.MYTABLE.asterisk(),
Routines.defaultSort( /* What goes here? */)
)
.from(Tables.MYTABLE)
我在 Tables
或 dsl
对象上找不到任何提示当前记录的内容。我该怎么做?
从 jOOQ 3.15 开始,您还不能将 Field<TableRecord>
expression 传递给生成的存储函数引用,只能传递 TableRecord
value,在客户端构造。这绝对是 jOOQ 近期版本的一个有趣的改进。 jOOQ 3.15 将开始允许使用临时 ROW
类型作为 SelectField
进行投影:https://github.com/jOOQ/jOOQ/issues/11812
也为 Table
类型提供这种功能是有意义的,这些类型是名义上的 ROW
类型:
与此同时,当 jOOQ 中缺少特定于供应商的功能时,您可以求助于 plain SQL templating 并使用:
DSL.field("myschema.default_sort({0})", SQLDataType.VARCHAR, MYTABLE);
我正在尝试使用例程通过 jOOQ 调用 PL/SQL 函数。函数如下:
CREATE OR REPLACE FUNCTION myschema.default_sort(rec myschema.mytable)
RETURNS text
LANGUAGE SQL
IMMUTABLE
AS $$
SELECT
TO_CHAR(.created_at, 'YYYYMMDDHHMMSSMS') || myschema.encode(.id)
$$;
我希望能够执行以下操作:
SELECT
mt.*,
myschema.default_sort(mt)
FROM
myschema.mytable mt;
所以在jOOQ中,生成例程:
public static Field<String> defaultSort(MyTableRecord rec) {
//do stuff
}
但是到了调用的时候,我不知道如何在例程中传递当前行:
dsl.select(
Tables.MYTABLE.asterisk(),
Routines.defaultSort( /* What goes here? */)
)
.from(Tables.MYTABLE)
我在 Tables
或 dsl
对象上找不到任何提示当前记录的内容。我该怎么做?
从 jOOQ 3.15 开始,您还不能将 Field<TableRecord>
expression 传递给生成的存储函数引用,只能传递 TableRecord
value,在客户端构造。这绝对是 jOOQ 近期版本的一个有趣的改进。 jOOQ 3.15 将开始允许使用临时 ROW
类型作为 SelectField
进行投影:https://github.com/jOOQ/jOOQ/issues/11812
也为 Table
类型提供这种功能是有意义的,这些类型是名义上的 ROW
类型:
与此同时,当 jOOQ 中缺少特定于供应商的功能时,您可以求助于 plain SQL templating 并使用:
DSL.field("myschema.default_sort({0})", SQLDataType.VARCHAR, MYTABLE);