Oracle 系列: PL/SQL表
一,什么是PL/SQL表?
首先PL/SQL表和记录(Record)一样,都是复合数据类型。可以看做是一种用户自定义数据类型。
PL/SQL表由多列单行的标量构成的临时索引表对象。组成类似于一维数组。
区别和联系记录(Record)的单行多列和物理存储数据的表。
Record + PL/SQL表可以进行数据的多行多列存储。
生命周期在程序块内。
二,PL/SQL表的组成结构
PL/SQL表只有两列,其中第一列为索引列为Integer类型索引列,9i后可以支持字符索引。第二列为用户自定义列,声明用户可用列类型.
通过索引列中的索引值来操作PL/SQL表中对应的用户自定义列。类似于键值对。
确保索引值的唯一性。如果索引值重复不会报错,会覆盖前面的值。
三,如何创建和使用PL/SQL表?
①声明PL/SQL表类型对象
语法:
TYPE PL/SQL表名 IS TABLE OF 可用列类型 [NOT NULL]
INDEX BY BINARY_INTEGER;
可用列类型可以为Oracle的数据类类型以及用户自定义类型;
属性方法:
count --返回pl/sql表的总行数;
delect --删除pl/sql表的所有内容;
delect(行数) --删除pl/sql表的指定的行;
delct(开始行,结束行) --删除pl/sql表的多行;
first --返回表的第一个INDEX;
next(行数) --这个行数的下一条的INDEX;
last --返回表的最后一个INDEX;
②声明PL/SQL表类型变量:
语法:
PL/SQL表类型变量名 PL/SQL表类型;
③数据填充和访问
语法:
PL/SQL表类型变量名(索引列值) := 填充声明类型值;
PL/SQL表类型变量名.属性方法名;
例子:
Declare
Type MyTabType Is Table Of VarChar2(10) Index By Binary_Integer;
MyTab MyTabType;
vN Number(4);
Begin
MyTab(1) := 'A';
MyTab(2) := 'B';
MyTab(3) := 'C'; --覆盖前面索引值为3对应的列值B
vN := MyTab.First;
DBMS_OUTPUT.PUT_LINE('First index:'||' '||vN ||' ');
vN := MyTab.Last;
DBMS_OUTPUT.PUT_LINE('last index:'||' '||vN);
DBMS_OUTPUT.PUT_LINE('删除index 3 后 First值:'||' '||MyTab(MyTab.First));
DBMS_OUTPUT.PUT_LINE('Last值:'||' '||MyTab(MyTab.Last));
End;
例子:使用循环填充和访问PL/SQL表
Declare
Type MyTabType Is Table Of VarChar2(10) Index By Binary_Integer;
MyTab MyTabType;
vN Number(10);
Begin
For varE In (select empno,ename from empa order by ename)
Loop
MyTab(varE.empno) := varE.ename;
End Loop;
vN := MyTab.First;
For i in 1..MyTab.count
Loop
dbms_output.put_line(vN||' '||myTab(vN));
vN := myTab.next(vN);
End Loop;
End;
例子:向PL/SQL表中插入数据
Declare
Type MyTabType Is Table Of VarChar2(10) Index By Binary_Integer;
MyTab MyTabType;
Begin
MyTab(1) := 'A';
MyTab(2) := 'B';
MyTab(3) := 'C';
DBMS_OUTPUT.PUT_LINE('index 3:'||' '||MyTab(3));
MyTab(3) := 'D'; --覆盖前面索引值为3对应的列值B
DBMS_OUTPUT.PUT_LINE('index 3:'||' '||MyTab(3));
End;
下一文:Oracle系列:Record + PL/SQL表