ORACLE PL/SQL从入门到精通笔记-记录与集合之集合方法篇(七)

此书及其相关资源下载方法:关注微信公众号,点击功能介绍-书籍链接下载,即可获取

说明

本文主要介绍如下知识点:

  • 3.集合方法
    7.1.使用EXISTS方法
    7.2.使用COUNT方法
    7.3.使用LIMIT方法
    7.4.FIRST和LAST方法
    7.5.PRIOR和NEXT方法
    7.6.EXTEND方法
    7.7.TRIM方法
    7.8.DELETE方法
    7.9.集合的异常处理

    7.10.使用批量绑定

    7.11.使用BULK COLLECT

本文集合方法直接使用代码讲解,更加浅显易懂

DECLARE
  TYPE projecrlist IS VARRAY(50) OF VARCHAR2(16); --定义一个变长数组
  project_list projecrlist := projecrlist('序列1',
                                          '序列2',
                                          '序列3',
                                          '序列4',
                                          '序列5');
  TYPE idx_table IS TABLE OF VARCHAR(12) INDEX BY PLS_INTEGER; --定义一个索引表
  v_emp idx_table;
  TYPE dept_type IS VARRAY(20) OF NUMBER; --定义一个嵌套表
  dept_table dept_type := dept_type(10, 30, 70); --实例化嵌套表,分配是三个元素
  TYPE deptno_type IS TABLE OF hyz_emp.ename%TYPE; --嵌套表
  nums deptno_type; --定义嵌套表变量,暂不初始化
BEGIN
  dbms_output.put_line('---------------------exists用法---------------------');
  IF project_list.exists(5) THEN
    dbms_output.put_line('存在,其值为:' || project_list(5));
    dbms_output.put_line('---------------------limit用法---------------------');
    dbms_output.put_line('变长数组的上限数量为' || project_list.limit || '个');
    dbms_output.put_line('---------------------count用法---------------------');
    dbms_output.put_line('变长数组的当前数量为' || project_list.count || '个');
    dbms_output.put_line('---------------------first和last用法---------------------');
    dbms_output.put_line('变长数组的第一个数据下标为' || project_list.first || '个');
    dbms_output.put_line('变长数组最后个数据下标为' || project_list.last || '个');
    dbms_output.put_line('---------------------prior和next用法---------------------');
    dbms_output.put_line('project_list表上一个值是' || (project_list.prior(3)));
    dbms_output.put_line('project_list表下一个值是' || (project_list.next(3)));
    dbms_output.put_line('---------------------extend用法---------------------');
    project_list.extend; --为project_list追加一个元素
    project_list(6) := '序列6';
    dbms_output.put_line('追加了:' || project_list(6));
    project_list.extend(2); --为project_list追加两个元素
    project_list(7) := '序列7';
    project_list(8) := '序列8';
    dbms_output.put_line('追加了:' || project_list(7) || '-' ||
                         project_list(8));
    project_list.extend(3, 2); --把第二个元素赋值三份到末尾
    dbms_output.put_line('追加了三份相同的值:' || project_list(9) || '-' ||
                         project_list(10) || '-' || project_list(11));
    dbms_output.put_line('---------------------trim用法---------------------');
    dbms_output.put_line('原元素个数:' || project_list.count);
    project_list.trim(); --删除末端一个元素   
    project_list.trim(2); --删除末端两个元素      
    dbms_output.put_line('目前元素个数:' || project_list.count);
    dbms_output.put_line('---------------------delete用法(只能用于索引表和嵌套表)---------------------');
    v_emp(-10) := '小明';
    v_emp(0) := '小王';
    v_emp(10) := '小黑';
    v_emp(20) := '小白';
    v_emp(30) := '小牛';
    dbms_output.put_line('原元素个数:' || v_emp.count);
    /*    project_list.delete(2); --删除第二个元素,变长数组不支持
    project_list.delete(2,3); --删除第二到三个元素,变长数组不支持
    */
    v_emp.delete(2); --删除第二个元素,如果元素不存在,不会有操作
    v_emp.delete(3, 4); --删除第3到4的元素,如果元素不存在,不会有操作
    dbms_output.put_line('现元素个数:' || v_emp.count); --实际上没变,删除失败
    v_emp.delete(10); --删除第二个元素
    v_emp.delete(-10, 0); --删除第-10到0的元素
    dbms_output.put_line('现元素个数:' || v_emp.count); --成功删除,-10,0,10
    v_emp.delete; --删除所有元素
    dbms_output.put_line('现元素个数:' || v_emp.count);
    dbms_output.put_line('---------------------批量绑定---------------------');
    dbms_output.put_line('现元素个数:' || dept_table.count);
    --FORALL不是循环语句,所以不需要LOOP...LOOP END;
    FORALL i IN dept_table.first .. dept_table.last --循环变量嵌套表元素
      DELETE scott.emp s WHERE s.deptno = dept_table(i);
    --COMMIT;--由于是例子,可以不使用COMMIT;保持原表不变....
    ROLLBACK; --由于是例子,可以使用ROLLBACK;保持原表不变....
    SELECT s.ename
      BULK COLLECT
      INTO nums
      FROM hyz_emp s
     WHERE s.deptno = 20;
    FOR i IN 1 .. nums.count LOOP
      dbms_output.put_line('nums:(' || i || ')=' || nums(i));
    END LOOP;
  ELSE
    dbms_output.put_line('不存在');
  END IF;
END;

本人是一枚程序猿,如果觉得整理的不错,请关注个人微信公众号(扫一扫):

猜你喜欢

转载自blog.csdn.net/huyingzuo/article/details/80117065
今日推荐