专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » oracle自定义类型:Java处理Oracle中的用户自定义类型 »正文

oracle自定义类型:Java处理Oracle中的用户自定义类型

来源: 发布时间:星期四, 2009年2月12日 浏览:50次 评论:0


Java对于PL/SQL中package下定义类型并不支持(找不到抛出invalid name pattern异常信息)需要定义schema级类型

OracleAPI:
http://www.rakeshv.org/docs/oracle/jdbc3.0/index.html

代码如下:
Schema Level Type:
create or replace type Guy as object
(
name varchar2(50),
age number
)
create or replace type GUYS as Table of GUY
PL/SQL:
create or replace package ArrayNesta is
PROCEDURE insert_guys(
guys_in IN guys
);
end ArrayNesta;
create or replace package body ArrayNesta is
PROCEDURE insert_guys(
guys_in IN guys
)
IS
BEGIN
for i in guys_in.first .. guys_in.last
LOOP
insert o ASSOCIATEARRAYNESTA(name, age) values(guys_in(i).name, guys_in(i).age);
END LOOP;

END insert_guys;

end ArrayNesta;
Database Table:
create table ASSOCIATEARRAYNESTA(
name varchar2(50),
age number
)
Java:
/**
*
*/
package .gif' />;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.util.HashMap;
import java.util.Map;
import oracle.jdbc.pool.OracleDataSource;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
/**
* @author nfeng
*
*/
public ArrayTest {
/**
* @param args
*/
public void (String args) throws Exception {
OracleDataSource ods = OracleDataSource;
ods.URL("jdbc:oracle:thin:username/password@host:port:database");
Connection conn = ods.getConnection;
.out.prln(conn);
StructDescriptor sd = StructDescriptor.createDescriptor("GUY", conn);
Object nesta = Object {"nesta", 29};
STRUCT snesta = STRUCT(sd, conn, nesta);

Object kisey = Object {"kisey", 30};
STRUCT skisey = STRUCT(sd, conn, kisey);

ArrayDescriptor ad = ArrayDescriptor.createDescriptor("GUYS", conn);
ARRAY guysin = ARRAY(ad, conn, STRUCT {snesta, skisey});

CallableStatement cs = conn.prepareCall("{ call ArrayNesta.insert_guys(?) }");
cs.Array(1, guysin);
cs.execute;

conn.close;
}
}
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: