阿里云
发表主题 回复主题
  • 596阅读
  • 0回复

细数Oracle存储过程的数组参数

级别: 论坛版主
发帖
82
云币
147
存储过程使用数组参数                                                                                                                                                                 由(兰赛普)oracle培训 提供

  环境:Eclipse+Oracle9.0.2+Tomcat5.5

  功能:采用存储过程、type组合来实现批量入库,以节省系统开销,提高效率。

  *

  sql脚本+测试代码:

  * 1)create or replace type t_cableLine_point as object

  (

  ID NUMBER(10),

  CABLELINEID NUMBER(10),

  ROADPOINTID NUMBER(10),

  ORDERNUM NUMBER(10),

  REMARK NUMBER(10)

  )

  * 2)CREATE OR REPLACE TYPE ARRAY_cableLine_point AS table OF t_cableLine_point

  * 3)create table RSC_CABLELINE_POINT

  (

  ID NUMBER(10) not null,

  CABLELINEID NUMBER(10) not null,

  ROADPOINTID NUMBER(10) not null,

  ORDERNUM NUMBER(10),

  REMARK NUMBER(10)

  )

  * 4)create or replace procedure batch_cableline_point(i_object in ARRAY_cableLine_point) is

  begin

  insert into RSC_CABLELINE_POINT

  (ID, CABLELINEID, ROADPOINTID, ORDERNUM, REMARK)

  select ID, CABLELINEID, ROADPOINTID, ORDERNUM, REMARK

  from the (select cast(i_object as ARRAY_cableLine_point) from dual);

  end batch_cableline_point;

  * 5)测试代码:

  package com.nilpower.test;

  import java.sql.Connection;

  import java.sql.DriverManager;

  import java.sql.PreparedStatement;

  public class Test {

  public static void main(String[] args) {

  try {

  Class.forName(“oracle.jdbc.driver.OracleDriver”);

  String url = “jdbc细数Oracle存储过程的数组参数-oracle 存储过程 数组racle:thin:@127.0.0.1:1521:nilpower”;

  Connection con = DriverManager.getConnection(url, “scott”, “tiger”);

  PreparedStatement pstmt = null;

  String sql = “{call batch_cableline_point(?)}”;

  pstmt = con.prepareCall(sql);

  Object[][] object1 = new Object[10][5];

  int max = 3615142;// 由于表有索引

  for (int i = 0; i 《 10; i++) {

  object1[0] = ++max;

  object1[1] = 158870593;

  object1[2] = 333;

  object1[3] = 444;

  object1[4] = 555;

  }

  oracle.sql.ArrayDescriptor desc = oracle.sql.ArrayDescriptor

  .createDescriptor(“ARRAY_CABLELINE_POINT”, con);

  oracle.sql.ARRAY array = new oracle.sql.ARRAY(desc, con, object1);

  pstmt.setArray(1, array);

  pstmt.executeUpdate();

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  }

  备注:如果在入库的过程中发现字符串的值没有入进去,请检查有没有加载该类库nls_charset12.jar

  



oracle, 存储, 参数, 培训, Eclipse






云栖社区小编整理
存储过程使用数组参数                                                                                                                                                                 由(兰赛普)oracle培训 提供

  环境:Eclipse+Oracle9.0.2+Tomcat5.5

  功能:采用存储过程、type组合来实现批量入库,以节省系统开销,提高效率。

  *

  sql脚本+测试代码:

  * 1)create or replace type t_cableLine_point as object

  (

  ID NUMBER(10),

  CABLELINEID NUMBER(10),

  ROADPOINTID NUMBER(10),

  ORDERNUM NUMBER(10),

  REMARK NUMBER(10)

  )

  * 2)CREATE OR REPLACE TYPE ARRAY_cableLine_point AS table OF t_cableLine_point

  * 3)create table RSC_CABLELINE_POINT

  (

  ID NUMBER(10) not null,

  CABLELINEID NUMBER(10) not null,

  ROADPOINTID NUMBER(10) not null,

  ORDERNUM NUMBER(10),

  REMARK NUMBER(10)

  )

  * 4)create or replace procedure batch_cableline_point(i_object in ARRAY_cableLine_point) is

  begin

  insert into RSC_CABLELINE_POINT

  (ID, CABLELINEID, ROADPOINTID, ORDERNUM, REMARK)

  select ID, CABLELINEID, ROADPOINTID, ORDERNUM, REMARK

  from the (select cast(i_object as ARRAY_cableLine_point) from dual);

  end batch_cableline_point;

  * 5)测试代码:

  package com.nilpower.test;

  import java.sql.Connection;

  import java.sql.DriverManager;

  import java.sql.PreparedStatement;

  public class Test {

  public static void main(String[] args) {

  try {

  Class.forName(“oracle.jdbc.driver.OracleDriver”);

  String url = “jdbc细数Oracle存储过程的数组参数-oracle 存储过程 参数racle:thin:@127.0.0.1:1521:nilpower”;

  Connection con = DriverManager.getConnection(url, “scott”, “tiger”);

  PreparedStatement pstmt = null;

  String sql = “{call batch_cableline_point(?)}”;

  pstmt = con.prepareCall(sql);

  Object[][] object1 = new Object[10][5];

  int max = 3615142;// 由于表有索引

  for (int i = 0; i 《 10; i++) {

  object1[0] = ++max;

  object1[1] = 158870593;

  object1[2] = 333;

  object1[3] = 444;

  object1[4] = 555;

  }

  oracle.sql.ArrayDescriptor desc = oracle.sql.ArrayDescriptor

  .createDescriptor(“ARRAY_CABLELINE_POINT”, con);

  oracle.sql.ARRAY array = new oracle.sql.ARRAY(desc, con, object1);

  pstmt.setArray(1, array);

  pstmt.executeUpdate();

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  }

  备注:如果在入库的过程中发现字符串的值没有入进去,请检查有没有加载该类库nls_charset12.jar

  

发表主题 回复主题
« 返回列表
«12345678910»
共10页
上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: 35 - 20 = ?
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)

      版权声明

      开发者论坛为你提供“细数Oracle存储过程的数组参数”的内容,论坛中还有更多关于 “细数Oracle存储过程的数组参数” 的内容供你使用,该内容是网友上传,与开发者论坛无关,如果需要删除请联系zixun-group@service.aliyun.com,工作人员会在5个工作日内回复您。