JDBC/PLSQL: 如何获得匿名块的 return 值
JDBC/PLSQL: How can I get a return value of a anonymous block
我有一个匿名代码块。
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 ();
所有如果到目前为止工作。
如何让我的匿名块 return 成为我的 Java 代码中的一个值(例如 retsum)?
我知道存储函数并在那里处理 return - 但我不能在这里这样做。
CallableStatement cst = con.prepareCall ("{? = call foo ();}");
cst.registerOutParameter (1, Types.INTEGER);
cst.execute ();
int ret = cst.getInt (1);
在匿名块中使用绑定变量(?
,用于匿名变量,或 :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);
自 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
| RES |
| --: |
| 1 |
db<>fiddle here
我有一个匿名代码块。
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 ();
所有如果到目前为止工作。
如何让我的匿名块 return 成为我的 Java 代码中的一个值(例如 retsum)?
我知道存储函数并在那里处理 return - 但我不能在这里这样做。
CallableStatement cst = con.prepareCall ("{? = call foo ();}");
cst.registerOutParameter (1, Types.INTEGER);
cst.execute ();
int ret = cst.getInt (1);
在匿名块中使用绑定变量(?
,用于匿名变量,或 :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);
自 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
| RES | | --: | | 1 |
db<>fiddle here