如何在块语句中使用 jooq 调用过程
How to call a procedure with jooq in a block statement
我想体验新的 jOOQ 块语句功能。
我的用例相当简单。至少我是这么认为的 ;-)
我想执行以下 SQL 语句作为匿名块
DECLARE
v_clobdata clob;
Begin
select t.clob_field into v_clobdata from TEST.MY_TABLE t where t.id = 1 for update;
DBMS_LOB.append(dest_lob => v_clobdata , src_lob => 'append_this');
update TEST.MY_TABLE t set t.clob_field n = v_clobdata where t.id = 1;
END;
但我不知道如何用 jOOQ 编写 DBMS_LOB.append 调用。到目前为止我得到了这个:
String textToAppend = "append_this";
long id = 1L;
final MY_TABLE t = MY_TABLE .as("t");
final Variable<String> clobdata = var("v_clobDaten", SQLDataType.CLOB);
create.begin(
declare(clobDaten),
clobdata.set(select(t.CLOB_FIELD).from(t).where(t.ID.eq(id)).forUpdate()),
//how "DBMS_LOB.append(dest_lob => v_clobDaten, src_lob => 'append_this')
update(t).set(t.CLOB_FIELD, clobdata ).where(t.ID.eq(id))
).execute();
虽然可以在 jOOQ 的程序 API 中从匿名块调用存储函数,但不幸的是,我们还不能在 jOOQ 3.13 的程序 API 中模拟存储过程调用。相关的功能请求是这个:https://github.com/jOOQ/jOOQ/issues/9169
作为解决方法,您可以使用普通的 SQL 语句 API:DSL.statement()
create.begin(
declare(clobDaten),
clobdata.set(select(t.CLOB_FIELD).from(t).where(t.ID.eq(id)).forUpdate()),
statement("dbms_lob.append(dest_lob => {0}, src_lob => 'append_this')", clobdata),
update(t).set(t.CLOB_FIELD, clobdata).where(t.ID.eq(id))
).execute();
或者,在这种特殊情况下,您也许可以只使用连接:
create.update(t)
.set(t.CLOB_FIELD, t.CLOB_FIELD.concat("append_this"))
.where(t.ID.eq(id))
.execute();
我想体验新的 jOOQ 块语句功能。 我的用例相当简单。至少我是这么认为的 ;-)
我想执行以下 SQL 语句作为匿名块
DECLARE
v_clobdata clob;
Begin
select t.clob_field into v_clobdata from TEST.MY_TABLE t where t.id = 1 for update;
DBMS_LOB.append(dest_lob => v_clobdata , src_lob => 'append_this');
update TEST.MY_TABLE t set t.clob_field n = v_clobdata where t.id = 1;
END;
但我不知道如何用 jOOQ 编写 DBMS_LOB.append 调用。到目前为止我得到了这个:
String textToAppend = "append_this";
long id = 1L;
final MY_TABLE t = MY_TABLE .as("t");
final Variable<String> clobdata = var("v_clobDaten", SQLDataType.CLOB);
create.begin(
declare(clobDaten),
clobdata.set(select(t.CLOB_FIELD).from(t).where(t.ID.eq(id)).forUpdate()),
//how "DBMS_LOB.append(dest_lob => v_clobDaten, src_lob => 'append_this')
update(t).set(t.CLOB_FIELD, clobdata ).where(t.ID.eq(id))
).execute();
虽然可以在 jOOQ 的程序 API 中从匿名块调用存储函数,但不幸的是,我们还不能在 jOOQ 3.13 的程序 API 中模拟存储过程调用。相关的功能请求是这个:https://github.com/jOOQ/jOOQ/issues/9169
作为解决方法,您可以使用普通的 SQL 语句 API:DSL.statement()
create.begin(
declare(clobDaten),
clobdata.set(select(t.CLOB_FIELD).from(t).where(t.ID.eq(id)).forUpdate()),
statement("dbms_lob.append(dest_lob => {0}, src_lob => 'append_this')", clobdata),
update(t).set(t.CLOB_FIELD, clobdata).where(t.ID.eq(id))
).execute();
或者,在这种特殊情况下,您也许可以只使用连接:
create.update(t)
.set(t.CLOB_FIELD, t.CLOB_FIELD.concat("append_this"))
.where(t.ID.eq(id))
.execute();