我有一個匿名代碼塊。
String plsql = "DECLARE\n";
plsql = "\tret NUMBER;\n";
plsql = "\tretsum NUMBER := 0;\n";
plsql = "BEGIN\n";
plsql = "\tret := 1;\n";
plsql = "\tretsum := ret retsum;\n";
plsql = "END;\n";
我用 JDBC 來稱呼它。
CallableStatement cs = con.prepareCall (plsql);
boolean ret = cs.execute ();
cs.close ();
如果作業到此為止。
如何使我的匿名塊回傳一個值(例如 retsum)到我的 Java 代碼中?
我知道存盤函式并在那里處理回傳 - 但我不能在這里這樣做。
CallableStatement cst = con.prepareCall ("{? = call foo ();}");
cst.registerOutParameter (1, Types.INTEGER);
cst.execute ();
int ret = cst.getInt (1);
uj5u.com熱心網友回復:
在匿名塊中使用系結變數(?對于匿名變數,或者:something對于命名變數):
String plsql = "DECLARE
ret NUMBER;
retsum NUMBER := 0;
BEGIN
ret := 1;
retsum := ret retsum;
? := retsum;
END;";
CallableStatement cst = con.prepareCall (plsql);
cst.registerOutParameter (1, Types.INTEGER);
cst.execute ();
int ret = cst.getInt (1);
uj5u.com熱心網友回復:
自 Oracle 12c 以來可用的另一種可能方法是宣告行內函式并使用通用select陳述句:
with function f return number as ret NUMBER; retsum NUMBER := 0; BEGIN ret := 1; retsum := ret retsum; return retsum; END; select f() as res from dual| 資源 | | --: | | 1 |
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472532.html
