暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 用记录表从Java调用PL/SQL打包的存储过程

askTom 2017-05-08
167

问题描述

亲爱的Oracle大师,

我正在尝试调用具有记录类型表的正式输入参数的Oracle打包存储过程。有很多使用记录或表类型调用SP的示例,但不是两者都调用。我还想通过引用包规格中的类型来充分利用新的12.1功能。

我的包裹wf_state具有以下类型定义:

类型wf_state_rt是记录 (wf_state.name % 类型中的state_name,wf_state.description % 类型中的描述);
类型wf_state_tt是由二进制整数组成的wf_state_rt索引的表;

调用同一包内的存储过程add_workflow_state并具有签名:

过程add_workflow_state (wf_state_tt中的状态,VARCHAR2中的workflow_name);

在PL/SQL匿名块中,创建成功调用此SP的必要结构是微不足道的。使用Oracle 12c JDBC驱动程序从Java调用它不是我正在学习Java,如果您能够在上面定义的结构下发布有关如何实现此目标的Java片段,将不胜感激。

非常感谢,
马克。

专家解答

我认为我们做不到。你的选择是

-简单的PL/SQL数组 (即,您将拥有 * 每个 * 属性的数组)

这里有详细信息

http://docs.oracle.com/database/122/JJDBC/Oracle-extensions.htm#JJDBC28180

或者,你会数据库类型,所以在你的情况下,它会是这样的:

创建或替换类型wf_state_rt为对象
(state_name varchar2(10),描述varchar2(10));

创建或替换类型wf_state_tt为wf_state_rt的表;

这里涵盖了

http://docs.oracle.com/database/122/JJDBC/Oracle-object-types.htm#JJDBC28431

如果您无法更改软件包,则一种选择是使用一个小包装器,即,

-java用对象类型数组调用proc
-proc从对象表填充记录表
-然后打电话给你的包裹

======================

附录:

12c及以上的情况看起来更好。检查JDBC文档,了解已经出现的改进。

http://docs.oracle.com/database/121/JJDBC/apxref.htm#JJDBC29032
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论