oracle中的數組


Oracle中的數組分為固定數組和可變數組。

一、固定數組
固定數組:在定義的時候預定義了數組的大小,在初始化數組時如果超出這個大小,會提示ORA-06532:超出小標超出限制!
語法:
        TYPE arry_var IS VARRAY(2) OF VARCHAR2(10);--定義了一個存放2個char類型的數組
例:


 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;


 

二、可變數組
可變數組:在數組中可以有任意數量的元素,元素的類型要預先定義,數組的下標可以設置為自增.
1、一維數組
1)下標為自增長,table 表示可變長度,index by bybinary_integer子句代表以符號整數為索引
語法:
      TYPE t_table IS TABLE OF VARCHAR2(30) INDEX BYBINARY_INTEGER;
例:


 

DECLARE
       TYPE t_table IS TABLE OF VARCHAR2(30) INDEX BYBINARY_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 3 9 ,此處的1 3 9是以字符型存放在數組中
注:Oracle中的數組下標是從1開始的,下標必須是連續的。


 

2、多維數組
多維數組:可以看作是嵌套表,視為表中之表,可以有任意數量的元素,不需要預先定義限制值。
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
       );--此處只用到了xxuser表中的兩個字段
      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; --BULK COLLECT表示將批量查詢數據直接插入collection中,而不是通過cursur一條條插入;在現在的程序中大部分實現是通過游標插入的。
       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;


 

/*
1.COUNT 返回集合中元素的個數
2.DELETE 刪除集合中所有元素
3.DELETE(x) 刪除元素下標為x的元素 對VARRAY非法
4.DELETE(x,y) 刪除元素下標從X到Y的元素 對VARRAY非法
5.EXIST(x) 如果集合元素x已經初始化,則返回TRUE, 否則返回FALSE
6.EXTEND 在集合末尾添加一個元素 對Index_by非法
7.EXTEND(x) 在集合末尾添加x個元素 對Index_by非法
8.EXTEND(x,n) 在集合末尾添加元素n的x個副本 對Index_by非法
9.FIRST 返回集合中的第一個元素的下標號,對於VARRAY集合始終返回1。
10.LAST 返回集合中最后一個元素的下標號, 對於VARRAY返回值始終等於COUNT.
11.LIMIT 返回VARRY集合的最大的元素個數 Index_by集合和嵌套表無用
12.NEXT(x) 返回在第x個元素之后及緊挨着它的元素值,如果x是最后一個元素,返回null.
13.PRIOR(x) 返回在第x個元素之前緊挨着它的元素的值,如果x是第一個元素,則返回null。
14.TRIM 從集合末端開始刪除一個元素 對於index_by不合法
15.TRIM(x) 從集合末端開始刪除x個元素
var_array.next(3); //返回var_array(3)
*/

 

轉自:https://www.cnblogs.com/chenchengfei/p/9133385.htmlhttps://www.cnblogs.com/kubimiantiao/p/3795778.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM