• 记录表TABLE的使用详解


    定义记录表(或索引表)数据类型与记录类型相似,但它是对记录类型的扩展。它可以处理多行记录,类似于高级中的二维数组,使得可以在PL/SQL中模仿数据库中的表。 

    定义记录表类型的语法如下: 

    1
    2
    TYPE table_name IS TABLE OF element_type [NOT NULL]
    INDEX BY [BINARY_INTEGER | PLS_INTEGER | VARRAY2];

    记录表中的方法:

    方法

    描述

    EXISTS(n)

    如果集合的第n个成员存在,则返回true

    COUNT

    返回已经分配了存储空间即赋值了的成员数量

    FIRST

    LAST

    FIRST:返回成员的最低下标值

    LAST:返回成员的最高下标值

    PRIOR(n)

    返回下标为n的成员的前一个成员的下标。如果没有则返回NULL

    NEXT(N)

    返回下标为n的成员的后一个成员的下标。如果没有则返回NULL

    TRIM

    TRIM:删除末尾一个成员

    TRIM(n) :删除末尾n个成员

    DELETE

    DELETE:删除所有成员

    DELETE(n) :删除第n个成员

    DELETE(m, n) :删除从n到m的成员

    EXTEND

    EXTEND:添加一个null成员

    EXTEND(n):添加n个null成员

    EXTEND(n,i):添加n个成员,其值与第i个成员相同

    LIMIT

    返回在varray类型变量中出现的最高下标值

    例1:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DECLARE
      TYPE dept_table_type IS TABLE OF
           dept%ROWTYPE INDEX BY BINARY_INTEGER;
      my_dname_table dept_table_type;
      v_count number(2) :=4;
    BEGIN
      FOR int IN 1 .. v_count LOOP
        SELECT INTO my_dname_table(int) FROM dept WHERE deptno=int*10;
      END LOOP;
      FOR int IN my_dname_table.FIRST .. my_dname_table.LAST LOOP
      DBMS_OUTPUT.PUT_LINE('Department number: '||my_dname_table(int).deptno);
      DBMS_OUTPUT.PUT_LINE('Department name: '|| my_dname_table(int).dname);
      END LOOP;
    END;

     

     

    例2&3:按一维数组使用记录表例 & 按二维数组使用记录表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    DECLARE
    --定义记录表数据类型
       TYPE reg_table_type IS TABLE OF varchar2(25)
       INDEX BY BINARY_INTEGER;
    --声明记录表数据类型的变量
       v_reg_table REG_TABLE_TYPE;
        
    BEGIN
       v_reg_table(1) := 'Europe';
       v_reg_table(2) := 'Americas';
       v_reg_table(3) := 'Asia';
       v_reg_table(4) := 'Middle East and Africa';
       v_reg_table(5) := 'NULL';
     
       DBMS_OUTPUT.PUT_LINE('地区名称:'||v_reg_table (1)||'、'
                                        ||v_reg_table (2)||'、'
                                        ||v_reg_table (3)||'、'
                                        ||v_reg_table (4));
       DBMS_OUTPUT.PUT_LINE('第5个成员的值:'||v_reg_table(5));
    END;

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    DECLARE
    --定义记录表数据类型
       TYPE emp_table_type IS TABLE OF employees%ROWTYPE
       INDEX BY BINARY_INTEGER;
    --声明记录表数据类型的变量
       v_emp_table EMP_TABLE_TYPE;
    BEGIN
       SELECT first_name, hire_date, job_id INTO
       v_emp_table(1).first_name,v_emp_table(1).hire_date, v_emp_table(1).job_id
       FROM employees WHERE employee_id = 177;
       SELECT first_name, hire_date, job_id INTO
       v_emp_table(2).first_name,v_emp_table(2).hire_date, v_emp_table(2).job_id
       FROM employees WHERE employee_id = 178;
     
       DBMS_OUTPUT.PUT_LINE('177雇员名称:'||v_emp_table(1).first_name
                 ||'  雇佣日期:'||v_emp_table(1).hire_date
                 ||'  岗位:'||v_emp_table(1).job_id);
       DBMS_OUTPUT.PUT_LINE('178雇员名称:'||v_emp_table(2).first_name
                 ||'  雇佣日期:'||v_emp_table(2).hire_date
                 ||'  岗位:'||v_emp_table(2).job_id);
    END;
  • 相关阅读:
    B1005 继续(3n+1)猜想 (25分)
    B1091 N-自守数 (15分)
    B1086 就不告诉你 (15分)
    B1081 检查密码 (15分)
    个人博客作业Week1
    2015个人项目(修改除法要求)
    2014个人博客列表
    最佳个人博客、团队博客评分
    最终评审时间确定
    最终复审要求
  • 原文地址:https://www.cnblogs.com/rxhuiu/p/9106949.html
Copyright © 2020-2023  润新知