当前位置:首页 » 存储配置 » oracle存储过程数组

oracle存储过程数组

发布时间: 2022-07-23 08:44:16

‘壹’ oracle中存储过程怎么定义一个数组

在PL/sql中是没有数组(Array)概念的。但是如果程序员想用Array的话,就得变通一下,用TYPE 和Table of Record来代替多维数组

‘贰’ oracle测试存储过程传入数组怎么传

这个是我自己写的一个例子,你看看:
在命令窗口执行以下语句,创建自定义类型NESTEDARRAY。
create or replace TYPE NESTEDARRAY IS TABLE OF NUMBER;

在存储过程中使用自定义类型NESTEDARRAY。
PROCEDURE GET_ARR_RESULT(INPUTARRAY IN NESTEDARRAY, AR OUT NESTEDARRAY) IS
BEGIN
AR := NESTEDARRAY();

FOR I IN 1 .. INPUTARRAY.COUNT LOOP
AR.EXTEND;
AR(I) := I|| INPUTARRAY(I);
END LOOP;
END GET_ARR_RESULT;

java代码:
import java.sql.Connection;
import java.sql.SQLException;

import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.Datum;

/**
* Java获取Oracle存储过程返回自定义类型
* @author lucky star
*
*/
public class OracleTypeResultTest {

/**
* @param args
*/
public static void main(String[] args) {
Connection con = null;
OracleCallableStatement ocs = null;
String sql = "{call test.GET_ARR_RESULT(?,?)}";

try {
con = DBUtil.dbUtil.getConnection();
ocs = (OracleCallableStatement) con.prepareCall(sql);
String[] params = {“10001”,”10003”};
ArrayDescriptor arrayDesc = ArrayDescriptor.createDescriptor("NESTEDARRAY", con);
ARRAY inputArray = new ARRAY(arrayDesc, con, params);
ocs.setARRAY(1, inputArray);
ocs.registerOutParameter(2,OracleTypes.ARRAY,"NESTEDARRAY");
ocs.execute();

ARRAY array = ocs.getARRAY(2);
Datum[] datum = array.getOracleArray();
for (int i=0;i<datum.length;i++) {
System.out.println(datum[i].intValue());
}

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(ocs!=null)ocs.close();
if(con!=null)con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}

用VARCHAR2测试,发现存储过程中无法获取到传入的数组的值。
不过,将自定义类型由varchar2改成NVarchar2就成功了。

‘叁’ oracle 存储过程,如何传入一个数组

这个是不行的,数组内容必须首先在存储过程里定义好数组类型,然后给予定义好的数据类型定义数组型变量。存储过程的入参是做不到的。一般情况下,采用字符串的方式,并给每项用特定的分隔符的方式传入,然后在存储过程中按照分隔符解析出每一项,插到存储过程的定义的数组的每一项上去。

‘肆’ oracle 存储过程 数组循环

declare
type typ_rec is record of (student.name%type, student.age%type); --集合变量
type typ_tab is table of typ_rec index by binary_integer; --以集合变量为单位的table数组
rec_sql typ_rec;
another_rec student%rowtype; --跟rec_sql一样
begin
--for循环里的rec_tmp不用定义,可以自动生成的
for rec_tmp in (select t.name, t.age from student t) loop
dbms_output.putline(rec_tmp.name || ' ''s age + 1 = ' || to_char(rec_tmp.age + 1) );
end loop;
exception
when others then
return;
end;

‘伍’ oracle存储过程怎么将变量扔进数组

先自定义集合类型变量类型,然后定义对应的变量,直接把集合类型穿给存储过程就可以了,不用在存储过程中搞,应用程序中搞好传过去就可以了,我都是这样搞的

‘陆’ Oracle 存储过程 数组做参数 求实例

packtest.test(v_string,v_int);
你的v_string输入参数没有初始化。
v_string system.packtest.string_array := system.packtest.string_array('a','b','c');

‘柒’ oracle中的存储过程可以用数组吗

首先你需要定义一个数组类型,然后定义这个数组变量declaretypea_typeistableofnumber;--typea_typeisarray(10)ofnumber;--下面一种定义方式则指定了该数组的最大元素个数aa_type:=a_type();--定义并初始化一个数组变量begina.extend(3);--数组扩展到3个元素a(1):=1;a(2):=10;a(3):=100;end;另外数组还有一下方法和属性first--第一个元素下标last--最后一个元素下标count--数组元素个数prior(n)--下标n的前一个元素下标next(n)--下标n后一个元素下标extend(n)--添加n个数组元素,不带参数添加一个数组元素delete(n)--删除数组中下标为n的元素,不带参数删除整个数组元素

‘捌’ oracle 存储过程中如何使用数组,请给一个能调试成功的例子

oracle这么强大的数据库能使用数组的
在oracle中,数组主要是用来存储批量数据,一次性的对数据库进行插入,更新,删除操作。
下面给你一个批量插入的例子,其他都类似的
这是我的blog上面有例子,你自己看看吧。
http://zhuwei511.blog.sohu.com/

‘玖’ oracle存储过程中如何使用数组

首先你需要定义一个数组类型,然后定义这个数组变量
declare
type a_type is table of number;
-- type a_type is array(10) of number;
-- 下面一种定义方式则指定了该数组的最大元素个数

a a_type := a_type(); -- 定义并初始化一个数组变量
begin
a.extend(3); -- 数组扩展到3个元素
a(1) := 1;
a(2) := 10;
a(3) := 100;
end;

另外数组还有一下方法和属性
first -- 第一个元素下标
last -- 最后一个元素下标
count -- 数组元素个数
prior(n) -- 下标 n 的前一个元素下标
next(n) -- 下标 n 后一个元素下标
extend(n) -- 添加 n 个数组元素,不带参数添加一个数组元素
delete(n) -- 删除数组中下标为 n 的元素,不带参数删除整个数组元素

‘拾’ 怎样在oracle存储过程中定义数组

首先你需要定义一个数组类型,然后定义这个数组变量
declare
type a_type is table of number;
-- type a_type is array(10) of number;
-- 下面一种定义方式则指定了该数组的最大元素个数

a a_type := a_type(); -- 定义并初始化一个数组变量
begin
a.extend(3); -- 数组扩展到3个元素
a(1) := 1;
a(2) := 10;
a(3) := 100;
end;

另外数组还有一下方法和属性
first -- 第一个元素下标
last -- 最后一个元素下标
count -- 数组元素个数
prior(n) -- 下标 n 的前一个元素下标
next(n) -- 下标 n 后一个元素下标
extend(n) -- 添加 n 个数组元素,不带参数添加一个数组元素
delete(n) -- 删除数组中下标为 n 的元素,不带参数删除整个数组元素

热点内容
买的腾讯服务器是装在电脑上吗 发布:2025-01-15 23:25:58 浏览:411
如何查看电脑的配置是不是i5 发布:2025-01-15 23:24:21 浏览:434
PI数据库 发布:2025-01-15 23:14:42 浏览:882
我的世界手机版暖心服务器 发布:2025-01-15 23:05:02 浏览:169
xts压缩比 发布:2025-01-15 23:02:41 浏览:424
怎么看联系人存储位置 发布:2025-01-15 22:47:14 浏览:794
旗舰560配置的是什么发动机 发布:2025-01-15 22:40:59 浏览:626
sql多表连接查询 发布:2025-01-15 22:33:12 浏览:221
android网络休眠 发布:2025-01-15 22:32:12 浏览:350
怎么不下鲁大师查看电脑配置 发布:2025-01-15 22:30:23 浏览:311