精华内容
下载资源
问答
  • Oracle数组

    2018-06-04 15:02:00
    Oracle中的数组分为固定数组和可变数组。 一、固定数组 固定数组:在定义的时候预定义了数组的大小,在初始化数组时如果超出这个大小,会提示ORA-06532:超出小标超出限制! 语法: TYPEarry_varISVARRAY(2)...

    以前没有遇到过数组这种类型,最近遇到了需要数组才能解决问题,找了一下关于数组的用法,现整理下来。

     

    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;

     

      

      

    转载于:https://www.cnblogs.com/chenchengfei/p/9133385.html

    展开全文
  • Oracle_数组

    2017-04-06 18:02:35
    via: ... ...   Oracle数组一般可以分为固定数组和可变数组 集合:是具有相同定义的元素的聚合。Oracle有两种类型的集合: 可变长数组(VARRAY):可以有任意数量的元素,但必须预先定

    via: http://www.cnblogs.com/htht66/archive/2012/02/11/2346743.html

    http://fxz-2008.iteye.com/blog/469766

     

    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'); 

     

      for i in 1..arry_name.count loop  

          dbms_output.put_line(arry_name(i));  

      end loop;  

    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;

    展开全文
  • Oracle数组一般可以分为固定数组和可变数组 集合:是具有相同定义的元素的聚合。Oracle有两种类型的集合: 可变长数组(VARRAY):可以有任意数量的元素,但必须预先定义限制值。 嵌套表:视为表中之表,可以有...

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

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

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

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

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

    固定数组

    -- ============ char array =============== 
    DECLARE 
      -- declare fixed array 
      TYPE arry_var IS VARRAY(2OF 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(10OF 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;

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

    2OF NUMBER 表示数值类型是number

    可变数组

    一维数组

    DECLARE 
      TYPE t_table IS TABLE OF VARCHAR2(30INDEX 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) 
    )

    定义结果集(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 FROMxxuser; 
      FOR i IN 1 .. v_arry_user.COUNT LOOP 
        dbms_output.put_line(v_arry_user(i).user_name); 
      END LOOP; 
    END;

    使用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;



    原文:http://www.cnblogs.com/htht66/archive/2012/02/11/2346743.html

    展开全文
  • Oracle数组的创建、赋值、遍历   一、  创建   1、  语法:   Create Or Replace Type " TypeName " Is Varry(int) Of ...

     

    Oracle 数组的创建、赋值、遍历

     

    一、           创建

     

    1、  语法:

     

    Create Or Replace Type " TypeName " Is Varry(int) Of varryType(int);

    TypeName: 数组名

    Int: 数组最大长度

    varryType(int): 数组里面存放的类型及长度

     

    2、  实例,如下所示:

     

    CREATE OR REPLACE TYPE "VARCHAR_ARRAY" IS VARRAY ( 9999 ) OF NVARCHAR2 ( 2 );

     

    VARCHAR_ARRAY 数组名

    VARRAY ( 9999 ) 数组的最大长度是 9999

    NVARCHAR2 ( 2 ) 数组里面存放的类型是 NVARCHAR2 类型, 每个字符串的最大长度是 2

     

     

    二、           存储过程中数组的赋值、遍历

     

    Procedure testArray(Re_array out VARCHAR_ARRAY)

    Is

    Begin

      Re_array := VARCHAR_ARRAY(); -- 初始化数组

     

    For i in 1 .. 10 Loop

    -- 给数组赋值

       Re_array.extend; -- 扩展数组, 以便于给数组赋值

       Re_array(i) := i; -- 赋值的时候,下标必须从 1 开始,否则会出现 下标超出数量 的错误

      End Loop ;

     

    -- 遍历数组

      For i in 1 .. Re_array.count Loop

       dbms_output.put_line(i || ' : ' || Re_array(i));

      End Loop ;

     

    End ;

     

     

    以上方法均由本人亲测通过,如有问题,请留言

    展开全文
  • create or replace procedure po_test_varray ( oi_return out integer ) /** head ...
  • Oracle数组的创建、赋值、遍历

    千次阅读 2014-08-29 11:23:45
    Oracle数组的创建、赋值、遍历   一、创建  www.2cto.com   1、 语法:   Create Or Replace Type " TypeName " Is Varry(int) Of varryType(int); TypeName: 数组名 Int: 数组最大...
  • Oracle Procedure 数组参数的应用

    千次阅读 2010-01-11 12:46:00
    因对Oracle 数组参数的转换花了些时间,所以记录下来,分享一下。言归正传: 如果入参为字符串数组、整形数组或者GUID数组等等,并且把它作为一个查询条件,有两种方法可以做到。我采用了package,后面将介绍原因。...
  • Oracle数组 遍历结果集 不用游标

    千次阅读 2018-12-14 16:34:21
    应该将re声明为red类型的数组,加下面: 1 2 3 4 5 6 7 8 9 10 declare type emp_type  is   table   of   emp%rowtype...
  • Oracle数组(转)

    2012-06-27 11:17:00
    看着这段由代表性的代码,不由想起自己以前独自摸索Oracle数组类型的那种不弄明白决不姑息的激情。  这段代码也还不错,通过简单的实例就把主要的数组类型都罗列出来叻,好的素材 不由又激发其我回答写写的欲望叻...
  • public class ClassArrayDemo { int age; String name; ClassArrayDemo(int age, String name) { this.age = age; this.name = name; } @Override public String toString() { return "[" + name + ",... }
  • mybatis map中存放数组进行foreach遍历

    千次阅读 2019-10-28 14:43:12
    1.入参 JSON格式 { "id":"1234567" "type": [1, 2, 3] } 2.mapper 方法 List<Map<String, Object>> query(Map<String, Object>...foreach中collection="type" 为入参中map 的ke...
  • 里面存放用户手机号码,现在要求批量保存至少几百的的手机号码,保存之前需要分别验证这些手机号码是否在数据库中已存在。 思路:1)、在每个号码保存之前,查询数据库,是不是已经有了。 缺点...
  •   在写处理分钟气象观测入库的时候,我使用下面的字符数组存放账号密码,然后在登录数据库的时候就出错了。   就使用了gdb调试程序,发现...  所以要注意:当使用字符数组存放信息时,要注意是否还有0。 ...
  • 小议Oracle中构造数组

    2009-03-21 17:42:41
    =========================================================== 小议Oracle中构造数组 ==============================...
  • 将字节数组存放oracle中的blob中

    千次阅读 2014-03-27 16:15:50
    看到网上好多网友说想把字节数组存入到oracle中必须用流的方式,这种方式确实可以,但是还有一种方式可以简单的把字节数组存放oracle。 1.改变一下oracle的连接方式 用oci的连接方式连接 2.如果光改变...
  • Oracle存储过程传递数组参数

    千次阅读 2012-02-24 21:22:55
    今天晚上,和同事聊起Oracle存储过程传递数组参数能否使用数据,之后就在自己的电脑上试试,试了试是可以使用。 代码: 先要定义一个类型myvarray_list 数组的长度是10,数组存放的数据类型是varchar2。 SQL> ...
  • --创建一个对象,用来存放返回值 list_out.extend(list_in.count);--给数组扩容 --循环获取传入的数据,并将数据插入数据库 while v_count dbms_output.put_line(list_in(v_count).name); insert into table_...
  • 在使用oracle进行批量插入的时,如果数据量较小可以使用install all的语法进行批量插入。... 使用存储过程批量插入很显然要接收一个数组当参数,而且这个数组里的元素类型应该和java里自定义的数据模型对应。
  • Oracle中使用字符串数组参数

    千次阅读 2008-12-09 10:37:00
    今天在项目中需要使用一个字符串数组参数,其实本来打算在cs文件中拼接字符串的,不过leader说可以在Oracle中使用数组参数,所以就看看了…… 其具体过程如下: 1、需要的类的命名空间: A、Oracle.DataAccess....
  • 数组做为参数传入Oracle存储过程操作数据库 数组里存储的是String、int、lang等基本数据类型或引用数据类型(不包括java bean) ...意思是创建一个名称为msg_array,存放类型为整型的数组类型 二、在or...
  • PL/SQL记录和表 1.使用%TYPE  (用于基本数据类型) 例1 (用户并不知道Course_No的数据类型,只知道他是基于Student_No数据类型的,随着Student_No的类型变化而变化):...类似C语言中的数组,在ORACLE7.3及以前...
  • oracle存储过程接收自定义数组类型参数2016年10月29日 09:53:23ntuloser阅读数:1092标签:oraclejava存储mybatis更多个人分类:数据库版权声明:本文为博主原创文章,未经博主允许不得转载。 ...
  • 数组

    2019-09-26 10:09:02
    数组 学习路线:数据如何存储 ...RDB:MySQL、Oracle、PostgreSQL、SQLlite… NoSQL:Redis、MongoDB、Memcashed… 数据库的集群 数据库的水平拆分、垂直拆分 HBase…大数据存储 … 数...
  • 一, 引入jar包 nls_charset12.jar 、orai18n.jar 二、oracle 创建对象  create or replace type questionAnswer as object(  answer_no varchar2(10),  answer_content varchar2(1000)  )

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,151
精华内容 9,660
关键字:

oracle存放数组