JOOQ:如何为没有参数的存储过程创建 MockResult?
JOOQ: How to create MockResult for stored procedure with out parameters?
使用 JOOQ MockDataProvider 时,为存储过程构建 MockResult 的正确方法是什么?
我找到的示例展示了如何通过从生成的 table 定义创建结果和记录,然后 return 来 return table 和视图的结果荷兰国际集团他们。对于存储过程,我不确定如何构建结果。
如何创建将映射到存储过程的 return 参数和输出参数的记录?
有什么方法可以将例程中的输出参数转换为记录字段吗?
这是一个示例存储过程,我想为其创建结果:
DECLARE @return_value int,
@StoredSystemId int
EXEC @return_value = [dbo].[myProc]
@StoredSystemId = @StoredSystemId OUTPUT,
@UserName = 'user',
@EmailAddress = 'user@mail.com'
SELECT @StoredSystemId as N'@StoredSystemId'
SELECT 'Return Value' = @return_value
来自 MockDataProvider.execute
Javadoc:
OUT
parameters from stored procedures are generated from the first MockResult
's first Record
. If OUT
parameters are requested, implementors must ensure the presence of such a Record
.
例如:
MockConnection con = new MockConnection(ctx -> {
Field<Integer> id = DSL.field("StoredSystemId", SQLDataType.INTEGER);
return new MockResult[] { new MockResult(DSL.using(DEFAULT).newRecord(id).values(42)) };
});
try (CallableStatement cstmt = con.prepareCall("{ call xyz(?) }")) {
cstmt.registerOutParameter(1, Types.INTEGER);
cstmt.execute();
System.out.println(cstmt.getInt(1));
}
它将打印:
42
请注意,字段名称和实际 SQL 字符串都与 jOOQ 的 MockDataProvider
SPI 无关。在您的情况下,您需要在 out 参数之后获得额外的结果,您可以将其附加到 MockResult[]
数组。重要的是先返回OUT
记录。
使用 JOOQ MockDataProvider 时,为存储过程构建 MockResult 的正确方法是什么?
我找到的示例展示了如何通过从生成的 table 定义创建结果和记录,然后 return 来 return table 和视图的结果荷兰国际集团他们。对于存储过程,我不确定如何构建结果。
如何创建将映射到存储过程的 return 参数和输出参数的记录?
有什么方法可以将例程中的输出参数转换为记录字段吗?
这是一个示例存储过程,我想为其创建结果:
DECLARE @return_value int,
@StoredSystemId int
EXEC @return_value = [dbo].[myProc]
@StoredSystemId = @StoredSystemId OUTPUT,
@UserName = 'user',
@EmailAddress = 'user@mail.com'
SELECT @StoredSystemId as N'@StoredSystemId'
SELECT 'Return Value' = @return_value
来自 MockDataProvider.execute
Javadoc:
OUT
parameters from stored procedures are generated from the firstMockResult
's firstRecord
. IfOUT
parameters are requested, implementors must ensure the presence of such aRecord
.
例如:
MockConnection con = new MockConnection(ctx -> {
Field<Integer> id = DSL.field("StoredSystemId", SQLDataType.INTEGER);
return new MockResult[] { new MockResult(DSL.using(DEFAULT).newRecord(id).values(42)) };
});
try (CallableStatement cstmt = con.prepareCall("{ call xyz(?) }")) {
cstmt.registerOutParameter(1, Types.INTEGER);
cstmt.execute();
System.out.println(cstmt.getInt(1));
}
它将打印:
42
请注意,字段名称和实际 SQL 字符串都与 jOOQ 的 MockDataProvider
SPI 无关。在您的情况下,您需要在 out 参数之后获得额外的结果,您可以将其附加到 MockResult[]
数组。重要的是先返回OUT
记录。