返回单个PL/SQL表,元素为标量类型
创建类型,包头,包体
create or replace type tab_array is table of varchar2(38);
/
create or replace package addnum
is
procedure abc(e_name in tab_array,t_name out tab_array);
end;
/
create or replace package body addnum is
procedure abc
(e_name in tab_array,t_name out tab_array)
is
begin
for i in 1..e_name.count loop
insert into t(name) values(e_name(i));
end loop;
select name bulk collect into t_name from t;
end;
end;
/
JDBC操作
package com.lovo;
import java.sql.Connection;
import java.sql.DriverManager;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.Datum;
public class JDBCMain {
public static void main(String[] args) throws Exception {
new oracle.jdbc.driver.OracleDriver();
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.99:1521:HXM", "me", "123");
String[] strs = new String[]{"abc","cba"};
OracleCallableStatement call = (OracleCallableStatement) conn.prepareCall("{call addnum.abc(?,?)}");
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("TAB_ARRAY", conn); /*TAB_ARRAY是类型名,必须大写*/
call.setArray(1, new ARRAY(descriptor,conn,strs));
call.registerOutParameter(2, OracleTypes.ARRAY,"TAB_ARRAY");
call.execute();
ARRAY arr = call.getARRAY(2);
Datum[] dat = arr.getOracleArray();
for(int i=0;i<dat.length;i++){
System.out.println(dat[i]);
}
conn.close();
}
}
返回单个对象
建立对象类型
create or replace type t_obj as object
(id int,
name varchar2(20)
);
建立对象表
create table t of t_obj;
insert into t values(t_obj(1,'abc1'));
insert into t values(t_obj(2,'abc2'));
insert into t values(t_obj(3,'abc3'));
insert into t values(t_obj(4,'abc4'));
insert into t values(t_obj(5,'abc5'));
建立包头和包体
create or replace package addnum
is
procedure abc(e_name in int,t_per out t_obj);
end;
/
create or replace package body addnum is
procedure abc
(e_name in int,t_per out t_obj)
is
begin
select value(p) into t_per from t p where p.id=e_name;
end;
end;
/
jdbc操作
TypeDescriptor td = TypeDescriptor.getTypeDescriptor("T_OBJ", (OracleConnection) conn);
OracleCallableStatement call = (OracleCallableStatement) conn.prepareCall("{call addnum.abc(?,?)}");
call.setInt(1, 3);
call.registerOutParameter(2, OracleTypes.STRUCT, "T_OBJ");
call.execute();
STRUCT str = call.getSTRUCT(2);
Object[] objs = str.getAttributes();
for(int i=0;i<objs.length;i++){
System.out.println(str.getDescriptor().getMetaData().getColumnName(i+1) + "," + objs[i]);
}
返回1个表,元素是对象
建立对象类型,表类型,包头,包体
create or replace type t_obj as object
(id int,
name varchar2(20)
);
/
create or replace type t_table is table of t_obj;
/
create or replace package addnum
is
procedure abc(e_name in int,t_per out t_table);
end;
/
create or replace package body addnum is
procedure abc
(e_name in int,t_per out t_table)
is
begin
select value(p) bulk collect into t_per from t p;
end;
end;
/
jdbc操作
TypeDescriptor td = TypeDescriptor.getTypeDescriptor("T_TABLE", (OracleConnection) conn);
OracleCallableStatement call = (OracleCallableStatement) conn.prepareCall("{call addnum.abc(?,?)}");
call.setInt(1, 1);
call.registerOutParameter(2, OracleTypes.ARRAY,"T_TABLE");
call.execute();
ARRAY arr = call.getARRAY(2);
Datum[] dat = arr.getOracleArray();
for(int i=0;i<dat.length;i++){
STRUCT struct = (STRUCT) dat[i];
Object[] objs = struct.getAttributes();
System.out.println("id:" + objs[0] + ",name:" + objs[1]);
}
在oracle 10g上测试通过
分享到:
相关推荐
- **创建程序**:在PL/SQL Developer中新建一个PL/SQL程序,可以是存储过程、函数或其他类型的程序单元。 - **保存程序**:保存程序以便后续使用或修改,支持多种文件格式。 - **修改程序**:对已存在的程序进行编辑...
在 Oracle 数据库中,对象是指数据库中的表、视图、存储过程等实体。了解如何创建、修改和删除这些对象对于管理和维护数据库至关重要。 ##### 示例 - **创建一个名为 EMPLOYEE_VIEW 的视图**: ```sql CREATE ...
在Oracle数据库环境中,PL/SQL被广泛用于开发存储过程、函数、触发器、游标和包,以实现复杂的业务逻辑和数据处理任务。本文将深入探讨Oracle PL/SQL的相关知识点,并结合Java进行集成开发。 1. **PL/SQL基础** - ...
6. 使用PL/SQL Developer时,你可以创建、编辑、运行和调试PL/SQL块,管理表、视图、存储过程、函数和其他数据库对象。工具还提供了语法高亮、代码自动完成、错误检查等功能,极大地提高了开发效率。 在Java和...
Oracle数据库则是一种广泛使用的商业关系型数据库系统,支持复杂的业务逻辑,其中存储过程是预编译的SQL和PL/SQL代码块,可以提高性能和代码复用。 ### 存储过程的理解 存储过程是数据库中的一个程序单元,它可以...
下面我们将深入探讨Oracle PL/SQL存储过程的基础知识、基本语法以及一些常见问题。 **Oracle 存储过程基础知识** 1. **定义与创建**:存储过程由一系列的PL/SQL语句组成,包括变量声明、控制结构、SQL语句等,通过...
根据提供的文档信息,本文将详细解析《PL_SQL_Oracle_Or_Jdbc.pdf》中的关键知识点。这份PDF文档涉及Oracle数据库的基础知识以及通过JDBC进行Oracle数据库操作的相关内容。接下来,我们将按照文档章节顺序来深入探讨...
通过上述步骤,我们不仅创建了一个使用索引表作为输出参数的PL/SQL存储过程,还演示了如何在Java程序中调用该存储过程并处理返回的结果。这种方法特别适用于需要返回大量数据的情况,同时也充分利用了Oracle数据库的...
Java中调用存储过程通常使用JDBC的CallableStatement对象,例如: ```java CallableStatement cs = connection.prepareCall("{ call procedure_name(?, ?) }"); cs.setInt(1, arg1); cs.setDouble(2, arg2); ...
过程和函数都可以接受IN和OUT类型的参数,其中IN参数用于传递数据到过程或函数中,而OUT参数则用于从过程或函数返回数据。 ### 使用场景 - **单个返回值**:当只需要一个返回值时,使用存储函数。 - **多个返回值**...
Oracle存储过程可以包含SQL语句、PL/SQL块、Java语句,其最显著的优点是代码可复用性高,维护成本低。在Oracle数据库中,创建存储过程必须具备CREATE PROCEDURE系统权限,若存储过程可供其他schema的用户使用,还...
Oracle存储过程是数据库管理系统中的一种重要功能,它允许程序员或DBA编写一组SQL语句和PL/SQL代码,然后以单个对象的形式存储在数据库中。这样,这些过程可以被多次调用,减少了网络流量,提高了性能,并且使得代码...
3. **返回列表**:如果存储过程返回多行数据,可以使用`OracleCallableStatement`的`getCursor()`方法获取游标,然后遍历结果集。 **在存储过程中做简单动态查询** 1. **本地动态SQL**:使用`EXECUTE IMMEDIATE`...
这种存储过程有一个或多个输出参数,可以返回单个值。例如,`TESTB`存储过程接收一个输入参数`PARA1`和一个输出参数`PARA2`,根据`PARA1`查询`TESTTB`表并返回结果到`PARA2`。在Java中,我们需要在`...
2. **有返回值的存储过程**:使用`OUT`参数或`RETURN`语句返回单个值,Java调用时同样通过CallableStatement,指定输出参数。 3. **返回列表**:使用`REF CURSOR`类型作为`OUT`参数,返回一个游标,Java中需遍历并...
- **返回列表**:如果存储过程返回一个结果集,可以使用REF CURSOR类型作为OUT参数,Java中同样使用CallableStatement处理。 在存储过程中实现动态SQL是一种常见的需求,主要分为本地动态SQL和远程动态SQL。本地...
11. PL/SQL:PL/SQL是Oracle的Procedural Language/SQL,结合了SQL和过程编程。选项b和c正确,变量、类型和异常需在DECLARE中声明。选项a错误,PL/SQL支持嵌套。选项d错误,BEGIN和END之间可以仅有SQL语句,但通常...
3. **PL/SQL支持**:Oracle特有的过程化语言PL/SQL可以在SQL Plus中编写和执行,使得复杂的业务逻辑得以实现。 4. **动态SQL**:SQL Plus支持动态SQL,允许在运行时构建和执行SQL语句,增强了灵活性。 5. **数据...
在Oracle数据库管理中,PL/SQL(Procedural Language/Structured Query Language)是Oracle提供的一种过程化语言,它结合了SQL的查询能力与程序设计语言的功能。本压缩包"利用PLSQL实现分页查询代码.rar"主要关注的...