问题描述
亲爱的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片段,将不胜感激。
非常感谢,
马克。
我正在尝试调用具有记录类型表的正式输入参数的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
-简单的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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。