从 JDBC 调用 Oracle 面向对象的 PL/SQL 成员过程
在面向对象的 PL/SQL 中,我可以向类型添加成员过程和函数。这里给出了一个例子:
create type foo_type as object (
foo number,
member procedure proc(p in number),
member function func(p in number) return number
);
create type body foo_type as
member procedure proc(p in number) is begin
foo := p*2;
end proc;
member function func(p in number) return number is begin
return foo/p;
end func;
end;
来自:http://www.adp-gmbh .ch/ora/plsql/oo/member.html
在 PL/SQL 中,我可以像这样调用这些成员过程/函数:
declare
x foo_type;
begin
x := foo_type(5);
x.proc(10);
dbms_output.put_line(x.func(2));
end;
How can I do it with JDBC's CallableStatement?我似乎无法在文档中轻松找到这一点。
注意:这是一种可能性,内联类型构造函数:
CallableStatement call = c.prepareCall(
" { ? = call foo_type(5).func(2) } ");
但我正在寻找的是这样的东西(使用 java.sql.SQLData
作为参数):
CallableStatement call = c.prepareCall(
" { ? = call ?.func(2) } ");
另外、成员函数、程序都可以修改对象。如何在 Java 中取回修改后的对象?
In object-oriented PL/SQL, I can add member procedures and functions to types. An example is given here:
create type foo_type as object (
foo number,
member procedure proc(p in number),
member function func(p in number) return number
);
create type body foo_type as
member procedure proc(p in number) is begin
foo := p*2;
end proc;
member function func(p in number) return number is begin
return foo/p;
end func;
end;
From: http://www.adp-gmbh.ch/ora/plsql/oo/member.html
In PL/SQL, I can then call these member procedures/functions like this:
declare
x foo_type;
begin
x := foo_type(5);
x.proc(10);
dbms_output.put_line(x.func(2));
end;
How can I do it with JDBC's CallableStatement? I can't seem to find this in the documentation easily.
NOTE: This is one possibility, inlining the type constructor:
CallableStatement call = c.prepareCall(
" { ? = call foo_type(5).func(2) } ");
But what I'm looking for is something like this (using java.sql.SQLData
as a parameter):
CallableStatement call = c.prepareCall(
" { ? = call ?.func(2) } ");
Also, member functions, procedures may modify the object. How can I get the modified object back in Java?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在
jdbc
中,您可以使用out
变量解析和执行 PL/SQL 块。您可以准备一个可调用语句,例如:然后您可以使用 CallableStatement.registerOutParameter 并在执行该语句后,使用适当的
get
函数检索该值。你可以直接在java中直接访问
FOO_TYPE
类型,但是你真的想这样做吗?请参阅下面的工作示例:这是一个测试类,用于展示如何在 SQL 对象上使用
registerOutParameter
方法,让我们调用它:In
jdbc
you can parse and execute PL/SQL blocks without
variables. You could prepare a callable statement such as:Then you can use CallableStatement.registerOutParameter and after the statement has been executed, use the appropriate
get
function to retrieve the value.You can access directly a
FOO_TYPE
type directly in java, but do you really want to do this? See below for a working example:This is a test class to show how you can use the method
registerOutParameter
on an SQL object, let's call it: