Oracle 系列:PL/SQL表


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表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值