`

Oracle数组的使用

阅读更多

下面这组信息比较有用,列出来以备参考:

除了构造函数外,集合还有很多内建函数,这些函数称为方法。
调用方法的语法如下:
collection.method
下表中列出oracle中集合的方法
方法 描述 使用限制
COUNT 返回集合中元素的个数
DELETE 删除集合中所有元素
DELETE() 删除元素下标为x的元素,如果x为null,则集合保持不变          对VARRAY非法
DELETE(,) 删除元素下标从X到Y的元素,如果X>Y集合保持不变             对VARRAY非法
EXIST() 如果集合元素x已经初始化,则返回TRUE, 否则返回FALSE
EXTEND 在集合末尾添加一个元素                                       对Index_by非法
EXTEND() 在集合末尾添加x个元素                                      对Index_by非法
EXTEND(,) 在集合末尾添加元素n的x个副本                              对Index_by非法
FIRST 返回集合中的第一个元素的下标号,对于VARRAY集合始终返回1。
LAST 返回集合中最后一个元素的下标号, 对于VARRAY返回值始终等于COUNT.
LIMIT 返回VARRY集合的最大的元素个数,对于嵌套表和对于嵌套表和Index_by为null Index_by集合无用
NEXT() 返回在元素x之后及紧挨着它的元素的值,如果该元素是最后一个元素,则返回null.
PRIOR() 返回集合中在元素x之前紧挨着它的元素的值,如果该元素是第一个元素,则返回null。
TRI M 从集合末端开始删除一个元素                                    对于index_by不合法
TRIM() 从集合末端开始删除x个元素                                    对index_by不合法


使用实例:
Set serveroutput on
Declare
    type my_text_table_type is table of varchar2(200)
     index by binary_integer;
    l_text_table my_text_table_type;
    l_index number;
begin
for emp_rec in (select * from emp) loop
   l_text_table(emp_rec.empno):=emp_rec.ename;
end loop;
   l_index:= l_text_table.first;--使用first方法
       loop
              exit when l_index is null;
              dbms_output.put_line(l_index ||’:’|| l_text_table(l_index));
              l_index :=l_text_table.next(l_index);
       end loop;
end;


实例:
CREATE OR REPLACE PROCEDURE sample  
is  
    TYPE R_REC IS RECORD(INT     NUMBER(6,2), CHR    VARCHAR2(100));
    TYPE T_REC IS TABLE OF R_REC INDEX BY BINARY_INTEGER;
 
    A_ZEI T_REC;    
    IX      NUMBER(10);    
BEGIN  
    FOR IX IN 1..1000 LOOP  
        A_ZEI(IX).INT := IX;
        A_ZEI(IX).CHR := TO_CHAR(A_ZEI(IX).INT,'9,999,999.99');  
    END LOOP;  
   
END;  



CREATE OR REPLACE PROCEDURE P_EMP
IS
     TYPE T_EMP IS TABLE OF EMP%ROWTYPE INDEX BY BINARY_INTEGER;
   
     A_EMP T_EMP;
     I        BINARY_INTEGER := 0;
BEGIN
   
     FOR REC IN (SELECT EMPNO,ENAME FROM EMP) LOOP
        I := I + 1;
        A_EMP(I).EMPNO := REC.EMPNO;
        A_EMP(I).ENAME := REC.ENAME;
     END LOOP;
   
     FOR K IN 1..I LOOP
        DBMS_OUTPUT.PUT_LINE( A_EMP(K).EMPNO || '       ' || A_EMP(K).ENAME);
     END LOOP;
END;
    集合:是具有相同定义的元素的聚合。Oracle有两种类型的集合:

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

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


在PL/SQL中是没有数组(Array)概念的。但是如果程序员想用Array的话,就得变通一下,用TYPE 和Table of Record来代替多维数组,一样挺好用的。
emp_type 就好象一个table 中的一条record 一样,里面有id, name,gender等。emp_type_array 象个table, 里面含有一条条这样的record (emp_type),就象多维数组一样。

--单维数组
DECLARE
TYPE emp_ssn_array IS TABLE OF NUMBER
INDEX BY BINARY_INTEGER;

best_employees emp_ssn_array;
worst_employees emp_ssn_array;

BEGIN
best_employees(1) := '123456';
best_employees(2) := '888888';

worst_employees(1) := '222222';
worst_employees(2) := '666666';

FOR i IN 1..best_employees.count LOOP
DBMS_OUTPUT.PUT_LINE('i='|| i || ', best_employees= ' ||best_employees(i)
|| ', worst_employees= ' ||worst_employees(i));
END LOOP;

END;

--多维数组
DECLARE

TYPE emp_type IS RECORD
( emp_id employee_table.emp_id%TYPE,
emp_name employee_table.emp_name%TYPE,
emp_gender employee_table.emp_gender%TYPE );

TYPE emp_type_array IS TABLE OF emp_type INDEX BY BINARY_INTEGER;

emp_rec_array emp_type_array;
emp_rec emp_type;

BEGIN
emp_rec.emp_id := 300000000;
emp_rec.emp_name := 'Barbara';
emp_rec.emp_gender := 'Female';

emp_rec_array(1) := emp_rec;

emp_rec.emp_id := 300000008;
emp_rec.emp_name := 'Rick';
emp_rec.emp_gender := 'Male';

emp_rec_array(2) := emp_rec;

FOR i IN 1..emp_rec_array.count LOOP
DBMS_OUTPUT.PUT_LINE('i='||i
||', emp_id ='||emp_rec_array(i).emp_id
||', emp_name ='||emp_rec_array(i).emp_name
||', emp_gender = '||emp_rec_array(i).emp_gender);
END LOOP;

END;
-------------- Result --------------
i=1, emp_id =300000000, emp_name =Barbara, emp_gender = Female
i=2, emp_id =300000008, emp_name =Rick, emp_gender = Male
用下面语句声明数组类型
type intarray is varry(30) of integer;

用下面语句声明一个数组变量
declare
A intarray;用下面语句声明数组类型
type intarray is varry(30) of integer;

用下面语句声明一个数组变量
declare
A intarray;用下面语句声明数组类型
type intarray is varry(30) of integer;

用下面语句声明一个数组变量
declare
A intarray;

分享到:
评论

相关推荐

    ORACLE数组使用方法

    ORACLE 数组使用方法 Oracle 数组是一种复杂的数据类型,可以存储多个元素,数组可以分为固定数组和可变数组两种类型。在 Oracle 中,数组可以用来存储大量的数据,并且可以通过索引来访问数组中的元素。 固定数组...

    oracle数组

    Oracle 数组 Oracle 数组是 Oracle 数据库中的一种复杂数据类型,可以存储多个元素。数组可以是固定大小的,也可以是可变大小的。在 Oracle 中,数组可以用来存储多个元素,并且可以对数组进行各种操作,例如遍历、...

    oracle中的数组使用

    oracle中的数组使用 oracle中的数组使用 oracle中的数组使用 oracle中的数组使用 oracle中的数组使用 oracle中的数组使用

    oracle数组实现

    ### Oracle数组实现概述 在Oracle数据库中,数组是一种非常有用的数据结构,用于存储相同类型的多个元素。它可以帮助我们更高效地处理大量数据,并简化代码逻辑。Oracle提供了几种不同的方式来实现数组,包括VAR...

    oracle数组存储过程批量插入

    数组在Oracle中的使用通常涉及定义PL/SQL类型,这允许我们创建索引数组以存储特定数据类型。 首先,我们创建一个名为`MSGPAG`的包,其中定义了一个名为`MSG_ARRAY`的类型,它是一个索引为整数的VARCHAR2数组。然后...

    oracle数组存储过程批量插入.pdf

    本文主要讲解了如何使用 Oracle 数组存储过程来实现批量插入功能。通过创建一个存储过程,使用数组作为参数来传递大量数据,然后在存储过程中进行批量插入操作。 首先,需要创建一个类型来定义数组,这个类型可以...

    ORACLE存储过程中定义数组并且判断某值是否在数组中.txt

    ORACLE存储过程中定义数组并且判断某值是否在数组中。有例子可執行、 、有例子可執行、

    oracle数组定义与使用.pdf

    以下是对Oracle数组定义与使用的详细说明: 1. 定义数组: - 固定长度的一维数组:使用`VARRAY`(Variable Array)关键字,如`type type_array is varray(10) of varchar2(20)`,这里定义了一个包含10个元素,每个...

    oracle_split_函数_返回数组

    在Oracle数据库中,由于内置函数不直接支持像Java中的`split`那样拆分字符串并返回数组,因此开发者需要自定义函数来实现这一功能。这里提到的两种方法都是为了解决这个问题,即根据指定的分隔符将字符串拆分为一个...

    Oracle学习笔记(嵌套表、可变数组)

    Oracle学习笔记(嵌套表、可变数组),有具体的代码案例供大家参考

    oracle数组存储过程批量插入.docx

    在C#代码中,使用`OracleCommand`创建了一个命令对象,设置其命令类型为存储过程,并通过`OracleParameter`来传递数组参数。 在Java环境中,批量插入数据的处理方式略有不同。首先,需要在数据库中创建一个对象类型...

    oracle存储过程返回多行多列的结构化数组,java调用并解析

    总结来说,本示例展示了如何在Oracle存储过程中定义和使用结构化数组,以及如何在Java中调用这些存储过程并解析返回的多行多列数据。通过这种方式,你可以高效地处理复杂的数据结构,同时利用Java的灵活性来处理这些...

    Spring访问传入数组参数的Oracle存储过程

    1. **创建Oracle数组类型**:在Oracle数据库中,首先需要定义一个PL/SQL类型的数组,比如`NUMBER_TABLE`,它是一个可以存储数字的数组类型。 ```sql CREATE TYPE NUMBER_TABLE AS TABLE OF NUMBER; ``` 2. **创建...

    Oracle定义联合数组及使用技巧

    Oracle中的联合数组,也称作PL/SQL表,是一种特殊的数据结构,仅能在PL/SQL环境中使用,不能直接用于数据库表。联合数组不需要初始化,没有特定的构造函数语法,因此在赋值前无需预分配存储空间,也无需使用EXTEND...

    整理:oracle pl/sql 入门+ 数组使用+游标+动态SQL

    在这个“整理:Oracle PL/SQL 入门+数组使用+游标+动态SQL”文档中,我们将深入探讨这四个关键概念。 1. Oracle PL/SQL入门: - PL/SQL的基本结构:PL/SQL由声明部分、执行部分和异常处理部分组成,用于定义变量、...

    c#调用Oracle UDT自定义结构数组类型源代码

    在IT行业中,数据库操作是应用程序开发中的重要环节,尤其是在企业级应用中,Oracle数据库因其强大的功能和稳定性而被广泛使用。然而,与不同编程语言的交互可能会遇到挑战,比如C#这种.NET框架下的语言。本篇文章将...

    oracle class12.jar nls_charset12.jar存储过程接收数组空值

    在Oracle数据库环境中,有时我们需要通过存储过程传递数组参数来处理批量数据。然而,在实际操作中,我们可能会遇到一个问题,那就是如何正确地处理数组中的空值(NULL)或空元素。"oracle class12.jar nls_charset...

    oracle可变数组

    在Oracle数据库中,可变数组(VARRAY)是一种特殊类型的集合数据结构,类似于我们通常理解的数组,但提供了更强大的功能和灵活性。根据给定文件中的描述,“可变数组与嵌套表相似,也是一种集合。一个可变数组是对象...

Global site tag (gtag.js) - Google Analytics