java - JDBC 程序调用具有复杂输入和输出的存储过程

标签 java jdbc

您能帮我编写 JDBC 程序来调用下面具有复杂输入类型的存储过程吗?

下面是我的存储过程定义

CREATE OR REPLACE TYPE inputObjects_t AS OBJECT (
    serviceID        VARCHAR2(7),
    offerID          VARCHAR2(7),
    transactionID    NUMBER
)

CREATE OR REPLACE TYPE inputArray_t IS VARRAY(100) OF inputObjects_t

PROCEDURE CheckObjectInput( pCustomerRef IN VARCHAR2,
                                 pSubscriptionPS IN NUMBER,
                                 pExpiryObjects IN inputArray_t,
                                 pTransactionDtm IN DATE,
                                 pTransactionID IN NUMBER);

PROCEDURE CheckObjectOutput( pCustomerRef IN VARCHAR2,
                                 pSubscriptionPS IN NUMBER,
                                 pExpiryObjects OUT inputArray_t,
                                 pTransactionDtm IN DATE,
                                 pTransactionID IN NUMBER);

最佳答案

如果您使用 Oracle,请使用类 OracleCallableStatement
有一个名为 setSTRUCT 的方法。

一般示例:

OracleConnection conn = (...)
OracleCallableStatement cs = (OracleCallableStatement) conn.prepareCall(sql);
StructDescriptor sd = StructDescriptor.createDescriptor("MY_TYPENAME", conn);
Object[] attribs = new Datum[3];
attribs[0] = new CHAR("value1",  charSet);
attribs[1] = new CHAR("value2",  charSet);
CLOB clob2 = attribs[2] = new CLOB(conn);
STRUCT st = new STRUCT(sd, conn, attribs);
(...)
cs.setSTRUCT(n, st);
(...)
cs.execute()

关于java - JDBC 程序调用具有复杂输入和输出的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8837504/

相关文章:

Java:单元测试级联外部接口(interface)

java - DNS 名称的解析,其中包括单个数字(例如 x.x.x.1)

sql-server - Tomcat 连接到 SQL 服务器

java - Spring @Transactional 注释被忽略

java - 使用 java jdbc 更改 MySQL 表的数据类型

java - 下载具有特定内容类型的文件

java - 如何在公共(public)方法中创建私有(private)变量

java - YouTube api(数据)尝试运行示例代码以进行搜索

java - 在java中获取数据库表的最后插入记录id?

java - MYSQL SELECT ... FOR UPDATE 不起作用?