我已经谷歌搜索了一段时间,似乎无法找到任何真正的答案.
我有一个Oracle存储过程,它有许多in参数,其类型是表rowtype的表.例如:
在pacakge宣布:
TYPE param1_type_t IS TABLE OF table1%ROWTYPE;
TYPE param2_type_t IS TABLE OF table2%ROWTYPE;
TYPE param3_type_t IS TABLE OF table3%ROWTYPE;
Run Code Online (Sandbox Code Playgroud)
Oracle程序:
PROCEDURE my_proc
(
parameter1 IN param1_type_t,
parameter2 IN param2_type_t,
parameter3 IN param3_type_t
)
Run Code Online (Sandbox Code Playgroud)
在java方面,我有3个对应的对象列表,表示用Java填充的每个参数.在这种情况下,是否可以使用MyBatis调用Oracle过程?
<update id="callOracleSP" statementType="CALLABLE">
{CALL my_proc( #{param1, mode=IN},
#{param2, mode=IN},
#{param3, mode=IN}
)
}
</update>
Run Code Online (Sandbox Code Playgroud)
对象本身是具有String和Integer属性的简单VO以及它们各自的getter和setter.
我不确定如何继续.我是否需要以某种方式将Java对象列表映射到Oracle类型?
我正在编写一些 JDBC 代码,它调用具有自定义对象返回类型的 Oracle 11g PL/SQL 过程。每当我尝试注册我的返回类型时,根据我设置的类型执行语句时,我都会收到 ORA-03115 或 PLS-00306 作为错误。一个例子如下:
PLSQL代码:
Procedure GetDataSummary (p_my_key IN KEYS.MY_KEY%TYPE,
p_recordset OUT data_summary_tab,
p_status OUT VARCHAR2);
Run Code Online (Sandbox Code Playgroud)
更多 PLSQL 代码(自定义对象详细信息):
CREATE OR REPLACE TYPE data_summary_obj
AS
OBJECT (data_key NUMBER,
data_category VARCHAR2 (100),
sensitive_flag VARCHAR2 (1),
date_created DATE,
date_rep_received DATE,
date_first_offering DATE,
agency_data_ref VARCHAR2 (13),
change_code VARCHAR2 (120),
data_ref VARCHAR2 (50),
data_status VARCHAR2 (100),
data_count NUMBER)
/
CREATE OR REPLACE TYPE data_summary_tab AS TABLE OF data_summary_obj
/
Run Code Online (Sandbox Code Playgroud)
Java代码:
String query = "begin manageroleviewdata.getdatasummary(?, ?, ?); …Run Code Online (Sandbox Code Playgroud)