zoukankan      html  css  js  c++  java
  • Record和PL/SQL表

    一,什么是记录Record和PL/SQL表?
     


     记录Record:由单行多列的标量类型构成的临时记录对象类型。类似于多维数组。
     PL/SQL表:由多行单列的索引列和可用列构成的临时索引表对象类型。类似于一维数组和键值对。
     
     都是用户自定义数据类型。
     
    二,Record + PL/SQL表 用途是什么?
     Record + PL/SQL表可以进行数据的多行多列存储。这样我们就可使用Record + PL/SQL表在需要时封装一个临时的表对象,进行传递和操作。
     通过Record自定义表结构,封装一条记录。PL/SQL表声明 可用列 类型 为Record类型(将可用列指向Record类型变量),每个索引对应一个Record类型变量。
     
     
    三,使用Record + PL/SQL表进行数据的多行多列存储
     ①声明Record类型和PL/SQL表,
     其中PL/SQL表的索引列为主键约束和唯一约束列或自增Integer。可用列为Record类型或%RowType类型。
     
     ②填充PL/SQL表可用列(Record类型):通过索引指向Record,使用Record访问记录成员。
       语法:
       PL/SQL表名(索引列值).记录成员 := 记录成员类型值;
       或
       PL/SQL表名(索引列值) := Record类型变量;
       --注意其PL/SQL表中声明的可用列要和这里赋值的Record类型变量结构一样
     ③访问PL/SQL表
     
     下面是例子:
     
     例子:
     Declare
      Type RecType Is Record
      (
       rno  empa.empno%type,
       rname empa.ename%type,
       rsal  empa.sal%type
      );
      Type TabType Is Table Of  RecType  Index By Binary_Integer;
      MyTab TabType;
      vN Number;
     Begin
      --填充
      vN := 1;
      For varR In (Select  *  From empa Order By empno ASC)
      Loop
       MyTab(vN).rno  := varR.empno;
       MyTab(vN).rname := varR.ename;
       MyTab(vN).rsal := varR.sal;
       vN := vN + 1;
      End Loop;
      --访问
      vN := MyTab.First;
      For varR In vN..MyTab.count
      Loop
       DBMS_OUTPUT.PUT_LINE(vN ||''   ''||MyTab(vN).rno||''   ''||MyTab(vN).rname||''   ''||MyTab(vN).rsal);
       vN := MyTab.Next(vN);
      End Loop;
     End;
     
     例子:利用记录Record可用整体赋值的特性来填充PL/SQL表
     Declare
      Type RecType Is Record
      (
       rno  empa.empno%type,
       rname empa.ename%type,
       rsal  empa.sal%type
      );
      Type TabType Is Table Of  RecType  Index By Binary_Integer;
      MyTab TabType;
      vN Number;
     Begin
      --填充
      vN := 1;
      For varR In (Select  empno, ename, sal  From empa Order By empno ASC)
       Loop
          MyTab(vN) := varR; --记录整体赋值
          vN := vN + 1;
        End Loop;
        --访问
        vN := MyTab.First;
      For varR In vN..MyTab.count
      Loop
       DBMS_OUTPUT.PUT_LINE(vN ||''   ''||MyTab(vN).rno||''   ''||MyTab(vN).rname||''   ''||MyTab(vN).rsal);
       vN := MyTab.Next(vN);
      End Loop;
     End;
     
     例子:使用主键约束和唯一约束列做为索引列(使用EMP表中的empno作为索引列)
       和使用自定义Record类型作为可用列
     Declare
      Type RecType Is Record
      (
       rno empa.empno%Type,
       rname empa.ename%Type,
       rsal empa.sal%Type
      );
      Type TabType Is Table Of RecType Index By  Binary_Integer;
      MyTab TabType;
      vN empa.empno%Type;
     Begin
      --填充
      For varR In (Select empno,ename,sal From empa Order By empno)
      Loop
       MyTab(varR.empno) := varR;
      End Loop;
      --访问
      vN := MyTab.First;
      For varR In 1..MyTab.Count
      Loop
       DBMS_OUTPUT.PUT_LINE(MyTab(vN).rno||''   ''||MyTab(vN).rname||''   ''||MyTab(vN).rsal);
       vN := MyTab.Next(vN);
      End Loop;
     End;
     
     例子:使用主键约束和唯一约束列做为索引列(使用EMP表中的empno作为索引列)
        和使用%RowType类型作为可用列
     Declare
      Type TabType Is Table Of empa%RowType Index By Binary_Integer;
      MyTab TabType; 
      vN empa.empno%Type;
     Begin
      --填充
      For varR In (Select * From empa Order By empno)
      Loop
       MyTab(varR.empno) := varR;
      End Loop;
      --访问
      vN := MyTab.First;
      For varR In 1..MyTab.Count
      Loop
       DBMS_OUTPUT.PUT_LINE(MyTab(vN).empno||''   ''||MyTab(vN).ename||''   ''||MyTab(vN).sal);
       vN := MyTab.Next(vN);
      End Loop;
     End;

  • 相关阅读:
    儿童文学经典
    育儿经
    彭博新闻社网站10月1日报道称,人民币1日获得了全球储备货币的地位。据认为,这个具有里程碑意义的事件将为中国债券市场注入活力,因为据预计,这会促使多达1万亿美元的资金在未来五年里流入该国债市。
    山西宗教文化漫谈(三)一五台山:四大佛山之首
    山西宗教文化漫谈(一)
    山西宗教文化漫谈(四)——云冈:东方艺术宝库
    山西宗教文化漫谈(六)--西山大佛
    nginx配置入门
    .zip/.rar打包与解压
    centos一键安装lnmp成功后无法访问ip(解决办法)
  • 原文地址:https://www.cnblogs.com/soundcode/p/2312843.html
Copyright © 2011-2022 走看看