• [Oracle整理]Oracle之数组


    说明:本内容是工作用到的知识点整理,来自工作中和网络。
    代码于Oracle9上测试。

    Oracle数组一般可以分为固定数组和可变数组

    集合:是具有相同定义的元素的聚合。Oracle有两种类型的集合:

    可变长数组(VARRAY):可以有任意数量的元素,但必须预先定义限制值。

    嵌套表:视为表中之表,可以有任意数量的元素,不需要预先定义限制值。

    PL/SQL中是没有数组(Array)概念的。但是如果程序员想用Array的话,就得变通一下,用TYPE   Table   of   Record来代替多维数组,一样挺好用的。

    固定数组

    -- ============ char array ===============
    DECLARE
      -- declare fixed array
      TYPE arry_var IS VARRAY(2) OF VARCHAR2(10);
      arry_name arry_var;
    BEGIN
      -- init array
      arry_name := arry_var('tom', 'jim','tim');

      dbms_output.put_line(arry_name(1));
      dbms_output.put_line(arry_name(2));
    END;
    -- ================ number array ========
    DECLARE
      -- declare fixed array
      TYPE arry_num IS VARRAY(10) OF NUMBER;
      arry_top arry_num;
    BEGIN
      -- init array
      arry_top := arry_num(1,2,3);

      dbms_output.put_line(arry_top(1));
      dbms_output.put_line(arry_top(2));
    END;

    1 VARRAY(10)变数数组大小为10

    2OF NUMBER 表示数值类型是number

    可变数组

    一维数组

    DECLARE
      TYPE t_table IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
      v_table t_table;
      v_cnt   NUMBER;
    BEGIN
      v_table(1) := '1';
      v_table(2) := '3';
      v_table(3) := '9';

      v_cnt := v_table.COUNT;
      FOR i IN 1 .. v_cnt LOOP
        dbms_output.put_line(v_table(i));
        END LOOP;
    END;

    多维数组

    1 Create Table

    create table XXUSER
    (
      USER_ID   NUMBER,
      USER_NAME VARCHAR2(255),
      SEX       VARCHAR2(2),
      AGE       NUMBER(3),
      ADDRESS   VARCHAR2(2000)
    )

    2 定义结果集(Record

    存放xxuser的部分字段

    DECLARE
      -- only 2 fileds
      TYPE t_record_user IS RECORD(
        user_id   xxuser.user_id%type,
        user_name xxuser.user_name%type);

      TYPE t_user IS TABLE OF t_record_user INDEX BY BINARY_INTEGER;

      v_arry_user t_user;
    BEGIN
      SELECT user_id, user_name BULK COLLECT INTO v_arry_user FROM xxuser;
      FOR i IN 1 .. v_arry_user.COUNT LOOP
        dbms_output.put_line(v_arry_user(i).user_name);
      END LOOP;
    END;

    3 使用ROWTYPE

    存放xxuser的全部字段,比Record简洁。

    DECLARE
     
    -- ALL,XXUser(user_id, user_name, sex, age, address)

      TYPE t_user IS TABLE OF xxuser%ROWTYPE INDEX BY BINARY_INTEGER;

      v_arry_user t_user;
    BEGIN
      SELECT *
    BULK COLLECT INTO v_arry_user FROM xxuser;
      FOR i IN
    1
    .. v_arry_user.COUNT LOOP
        dbms_output.put_line(v_arry_user(i).user_name || v_arry_user(i).sex);
      END LOOP;
    END;

     

    异常

    image

    人的一生应该这样度过:当他回首往事的时候,不会因为虚度年华而悔恨,也不会因为碌碌无为而羞愧。
  • 相关阅读:
    谷粒商城学习——P41vue组件化
    谷粒商城学习——P40计算属性、侦听器、过滤器
    谷粒商城学习——P38-39Vue-指令-单向绑定&双向绑定&v-onv-forv-if
    谷粒商城学习——P37vue基本语法——双向绑定、事件处理
    谷粒商城学习——P36Vue介绍与HelloWord
    谷粒商城学习——P35模块化
    谷粒商城学习——P34Promise异步编排
    Windows tcp/ip(CVE-2020-16898)远程代码执行蓝屏漏洞复现
    QQ群关系可视化3D查询搭建
    Skywalking 8.1 Docker 服务端部署
  • 原文地址:https://www.cnblogs.com/htht66/p/2346743.html
Copyright © 2020-2023  润新知