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;

  • 相关阅读:
    net core 上传并使用EPPlus导入Excel文件
    mysql 动态行转列
    Net Core2.0 升级到.Net Core 2.1
    把旧系统迁移到.Net Core 2.0 日记 (13) --图形验证码
    把旧系统迁移到.Net Core 2.0 日记 (12) --发布遇到的问题
    TCP传输协议
    css命名规范: BEM 的命名法
    http与https
    网络通信原理和过程
    PWA,SPA,MPA
  • 原文地址:https://www.cnblogs.com/soundcode/p/2312843.html
Copyright © 2011-2022 走看看