Oracle编写带数组参数的存储过程
来源:互联网 发布:mac开机按commandr 编辑:程序博客网 时间:2024/05/18 01:38
--功能:采用存储过程、type组合来实现批量操作,以节省系统开销,提高效率。 --创建 Type bodies CREATE OR REPLACE TYPE TYPE_ARRAY AS OBJECT ( ID NUMBER(10), REMARK VARCHAR2(10) ) --创建 Types CREATE OR REPLACE TYPE TYPE_ARRAY_TBL AS TABLE OF TYPE_ARRAY --创建表 CREATE TABLE T_TEMP(ID NUMBER(10) NOT NULL, REMARK NUMBER(10)) --创建存储过程 CREATE OR REPLACE PROCEDURE PROC_ARRAY_PARAM(TYPE_OBJECT IN TYPE_ARRAY_TBL) IS BEGIN INSERT INTO T_TEMP (ID, REMARK) SELECT ID, REMARK FROM THE (SELECT CAST(TYPE_OBJECT AS TYPE_ARRAY_TBL) FROM DUAL); FOR I IN 1 .. TYPE_OBJECT.COUNT LOOP DELETE FROM T_TEMP WHERE ID = TO_NUMBER(TYPE_OBJECT(I)); END LOOP; COMMIT; END; END PROC_ARRAY_PARAM;--创建包 CREATE OR REPLACE PACKAGE PKG_PARAM AS TYPE ARRAY_PARAMS IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER; --先定义包,这个就相当于一个数组 PROCEDURE PROC_PARAM(PARAMS IN ARRAY_PARAMS); END PKG_PARAM; --创建包体 CREATE OR REPLACE PACKAGE BODY PKG_PARAM AS PROCEDURE PROC_PARAM(PARAMS IN ARRAY_PARAMS) AS I NUMBER := 1; --这个可以不写 BEGIN SAVEPOINT SP1; FOR I IN 1 .. PARAMS.COUNT LOOP DELETE FROM T_TEMP WHERE ID = TO_NUMBER(PARAMS(I)); END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK TO SAVEPOINT SP1; END PROC_PARAM; END PKG_PARAM;
Java调用存储过程:
package com.test.oracle; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; /** 调用存储过程 */ public class ProcTest { public static void main(String[] args) { try { Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@192.168.1.1:1521:orcl"; Connection con = DriverManager.getConnection(url, "sys", "sys"); PreparedStatement pstmt = null; String sql = "{call PROC_ARRAY_PARAM(?)}"; pstmt = con.prepareCall(sql); Object[][] object1 = new Object[10][5]; int max = 3615142;// 由于表有索引 for (int i = 0; i < 10; i++) { object1[i][0] = ++max; object1[i][1] = 222; object1[i][2] = 333; object1[i][3] = 444; object1[i][4] = 555; } oracle.sql.ArrayDescriptor desc = oracle.sql.ArrayDescriptor.createDescriptor("TYPE_ARRAY_TBL", con); oracle.sql.ARRAY array = new oracle.sql.ARRAY(desc, con, object1); pstmt.setArray(1, array); pstmt.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } } }
- Oracle编写带数组参数的存储过程
- Oracle存储过程编写(带输出参数)
- oracle带参数的存储过程
- Oracle带输入输出参数的存储过程
- Oracle带参数的存储过程
- Oracle存储过程的数组参数
- JAVA调用ORACLE带数组输入参数和返回游标结果集的存储过程
- ORACLE带参数的存储过程和不带参数的存储过程
- oracle中,使用存储过程带数组参数的形式向表中添加数据(存储过程,数组参数,序列,触发器,类型,循环)
- oracle带参数的存储过程的执行
- 带输入参数的Oracle的存储过程
- Oracle 中调试、调用(带参数的)存储过程
- oracle调用带in out参数的存储过程
- Java调用Oracle、mysql带out参数的存储过程
- Oracle带输出参数的存储过程和调用
- hibernate4连接Oracle带out参数的存储过程调用
- 带参数的存储过程
- 带参数的存储过程
- 第一周练习题项目一练习二
- linux驱动编译的两种方式
- 使用Hibernate时不能在mysql字段中用desc
- Struts2配置文件详解
- 类库冲突解决方法
- Oracle编写带数组参数的存储过程
- 十五数码问题
- Android GPS 定位 1
- get_permalink(50) wordpress 取得文章的URL 各种类型的
- 结构体对齐的具体含义(#pragma pack)
- 自学C++小记1
- pat 1040 Longest Symmetric String
- rhel6.3 挂载ntfs分区
- Substrings hdu