oracle pl/sql 数组使用

本文详细介绍了PL/SQL中的三种数组类型及其定义、初始化和使用方法,并通过实例展示了如何在实际场景中运用这些数组类型进行数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pl/sql 有三种数组类型,到现在为止只用过叫“关联数组集合类型”的数组。

一、定义类型
type <我们自己的数组类型的名字> is table of <datatype>[[color=red]not null[/color]] index by index_type;

其中 datatype是必须的。index by index_type 可以省略。如:

-- Public type declarations
-- TYPE < TYPENAME > IS < DATATYPE >;
TYPE SEQID_AAT IS TABLE OF D_INV_ALARM_SEQ.SEQ_ID%TYPE INDEX BY BINARY_INTEGER;

类型定义一般放在包体或者包头的定义类型的区域。
index by 的数据类型可以是BINARY_INTEGER以及它的子类,
下面的都是有效的:
index by binary_integer
index by pls_integer
index by positive
index by natural
index by singtype (只有 -1、0、1三个值)
index by varchar2(32767)
index by table.column%type
index by cursor.column%type
index by package.variable%type
index by package.subtype

二、初始化
我这里定义的数组的index by类型是 binary_integer。

BEFORE_FIRST_TAB SEQID_AAT; --声明一个数组
SELECT A.SEQ_ID BULK COLLECT
BULK COLLECT INTO BEFORE_FIRST_TAB
FROM D_INV_ALARM_SEQ A
WHERE A.SEQ_NUM < V_SEQ_NUM;

注意事项:数组的下标是由数据库提供的,下标从1开始。
三、使用数组
呵呵使用一个数组(或者集合),专家们喜欢加遍历。

FOR SEQ_INDEX IN 1 .. BEFORE_FIRST_TAB.COUNT LOOP
UPDATE D_INV_ALARM_SEQ A
SET A.SEQ_NUM = A.SEQ_NUM + IN_LENGTH
WHERE A.SEQ_ID = BEFORE_FIRST_TAB(SEQ_INDEX);
END LOOP;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值