0
我有一個使用plv8引擎的數據庫,並且有用coffescript編寫的存儲過程。如何在每個查詢之前調用其他SQL?
當我使用jDBI,爲了調用這些程序,我打開連接後,我要運行:
SET plv8.start_proc = 'plv8_init';
我可以做類似的事情使用JOOQ與javax.sql.DataSource中的什麼時候?
我有一個使用plv8引擎的數據庫,並且有用coffescript編寫的存儲過程。如何在每個查詢之前調用其他SQL?
當我使用jDBI,爲了調用這些程序,我打開連接後,我要運行:
SET plv8.start_proc = 'plv8_init';
我可以做類似的事情使用JOOQ與javax.sql.DataSource中的什麼時候?
一種選擇是使用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
謝謝,我想試試。還有一件事。當我只是做取指令(「SET plv8.start_proc ='plv8_init'; select * from my_stored_proc()」)它拋出異常,就像我不會添加plv8.start_proces。換句話說,它的行爲就像它將語句拆分一樣;並單獨運行。無論如何,我今天就試試你的解決方案 – bodziec
@bodziec:你可以通過使用[PostgreSQL的匿名代碼塊](https://www.postgresql.org/docs/9.4/static/sql-do.html)來實現所需的行爲,但我懷疑這會有點侵入性,並可能改變你的查詢結果 –