oracle 数组 exists,oracle索引表和嵌套表、数组

首先区分几个概念问题:

在平时编程中,对于单行单列,我们可以使用标量变量,对于单行多列,我们可以使用PL/SQL记录,而对于单列多行,我们就要用PL/SQL集合

PL/SQL集合相当于高级编程语言数组的一种复合型变量,包括:索引表(PL/SQL表),嵌套表(NESTED TABLE),变长数组(VARRAY)三种

索引表和嵌套表的区别:

相同点:两者元素个数都没有限制,而变长数组有元素个数限制

不同点:1.定义方法不同:

TYPE TP_DEXINT IS TABLE OF NUMBER INDEX BY PLS_INTEGER;--索引表定义 【1】

TYPE TP_DEXBIN IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;--索引表定义【2】

TYPE TP_DEXVAR IS TABLE OF NUMBER INDEX BY varchar2(10);--索引表定义

TYPE TP_QT IS TABLE OF NUMBER; --嵌套表定义

备注:【1】【2】的区别是什么?两者都是整型类型,【2】类型变量值是计算是

ORACLE模拟执行的,不会出现溢出,但是执行速度较慢,因为它是由ORACLE模拟执行,而

Pls_Integer的执行是由硬件即直接由CPU来运算,因而会出现溢出,但其执行速度较前者快

2.索引表下标可以为负值,而嵌套表下标必须从1开始(默认)

T_DEX TP_DEX

T_DEX(-5):=1; --下标可以为负值

T_DEX('王显伟'):=‘137********’;

3.使用嵌套表变量时,必须首先使用构造方法初始化嵌套表变量,然后才以在块内引用嵌套表元素

T_DEXVAR TP_DEXVAR :=TP_DEXVAR('1');

4.在表列中使用嵌套表类型,必须首先使用CREATE TYPE命令建立嵌套表类型,使用嵌套表类型作为

表列的数据类型时,必须要为嵌套表列指定专门的存储表

create type phone_type is table of varchar2(20);

create table employee(

id number(4),name varchar2(10),sal number(6,2),

phone phone_type

)nested table phone store as phone_table;

当定义嵌套表类型时,ORACLE自动为该类型生成相应的构造方法.当为嵌套表列插入数据时,需要

使用嵌套表的构造方法

begin

insert into employee values(1,'scott',800,phone_type('0471-*******','138********'));

end;

--下面内容引自网络,不在整理

8.10集合方法:ORACLE提供的用于操纵集合变量的内置函数或过程,其中EXISTS,COUNT,LIMIT,FIRST,NEXT,FRIOR和NEXT是函数

而EXTEND,TRIM和DELETE则是过程

集合方法只能在PL/SQL语句中使用,不能在SQL语句中使用.

集合方法EXTEND和TRIM只适用于嵌套表和VARRAY,而不适合于索引表

1.EXISTS:用于确定

集合元素是否存在

declare

type ename_table_type is table of emp.ename%type;

ename_table ename_table_type;

begin

if ename_table.exists(1) then

ename_table(1):='SCOTT';

else

dbms_output.put_line('必须初始化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值