zoukankan      html  css  js  c++  java
  • [Oracle整理]Oracle之数组

    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

  • 相关阅读:
    IfcLightSourceSpot
    IfcLightSourcePositional
    IfcLightSourceGoniometric
    IfcLightSourceDirectional
    IfcLightSourceAmbient
    IfcLightSource
    从一系列的图片文件夹中随机抽取图片
    IfcPolygonalBoundedHalfSpace
    IfcBoxedHalfSpace
    IfcHalfSpaceSolid
  • 原文地址:https://www.cnblogs.com/starliang/p/5669608.html
Copyright © 2011-2022 走看看