【问题标题】:How to invoke additional SQL before each query?如何在每次查询之前调用额外的 SQL?
【发布时间】:2016-11-26 15:54:09
【问题描述】:

我有一个使用 plv8 引擎的数据库,并且有用 coffescript 编写的存储过程。

当我使用 jDBI 时,为了调用这些程序,打开连接后我必须运行:

SET plv8.start_proc = 'plv8_init';

在将 JOOQ 与 javax.sql.DataSource 一起使用时,我可以做类似的事情吗?

【问题讨论】:

    标签: java postgresql jooq plv8


    【解决方案1】:

    一种选择是使用ExecuteListener。您可以通过实现executeStart() 方法来挂钩查询执行生命周期:

    new DefaultExecuteListener() {
        @Override
        public void executeStart(ExecuteContext ctx) {
            DSL.using(ctx.connection()).execute("SET plv8.start_proc = 'plv8_init'");
        }
    }
    

    现在,将上述ExecuteListener 提供给您的Configuration,就完成了。

    另见手册: http://www.jooq.org/doc/latest/manual/sql-execution/execute-listeners

    【讨论】:

    • 谢谢,我会试试的。还有一件事。当我只是执行 fetch("SET plv8.start_proc = 'plv8_init'; select * from my_stored_proc()") 时,它会抛出异常,就像我不会添加 plv8.start_proces 一样。换句话说,它的行为就像用 ; 分割语句一样。并分别运行每个。无论如何,我今天会尝试您的解决方案
    • @bodziec:您可能会通过使用PostgreSQL's anonymous code blocks 来实现所需的行为,但我怀疑这会有点侵入性并且可能会改变您的查询结果
    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    相关资源
    最近更新 更多