ORACLE 中 VARRAY的用法

oracle中变长数组varray,嵌套表,集合使用方法 主要介绍了oracle中变长数组varray,嵌套表,集合使用方法,需要的朋友可以参考下 立即下载

看到同事写的存储过程里面有这样一句:

    TYPE ARRAY_TYPE IS VARRAY(10000) OF VARCHAR2(60);

    感到很茫然,幸好还有网络可以求助,我理解成是:长度为10000的数组,其每个为长度为最大长度为60的varchar2类型。不知是否准确?

1. 声明和初始化VARRAY变量

你不可以直接声明一个VARRAY变量。必须先声明一个包含这个数组最大容量的类型:

  1. TYPE MY_ARRAY_TYPE IS VARRAY(10) OF NUMBER; 

然后,你就可以用这个类型声明VARRAY变量:

  1. V MY_ARRAY_TYPE; 

在你对这个数组进行操作以前,必须先初始化该数组。你既可以在声明它的时候对其初始化,也可以在声明后对其赋值。下面展示了在声明的同时对其进行初始化:

  1. V MY_ARRAY_TYPE := MY_ARRAY_TYPE (); 

2. 从指定的条目处取值

把条目的数目作为下标。下标可以是返回整数值(该值小于或等于数组条目数)的任意表达式,如:

  1. K := V(3);  
  2. I := 2;  
  3. L := V(I+1); 

3. 得到数组的容量

对VARRAY变量使用COUNT()方法。注意,你不需要指定圆括号,因为这个方法没有输入参数:

  1. N_ENTRIES := V.COUNT(); 

这告诉你这个数组中正在使用的条目数。当VARRAY类型被声明的时候,其最大的容量也就被定义了。你可以用LIMIT()方法得到该容量:

  1. ARRAY_CAPACITY := V.LIMIT(); 

4. 遍历VARRAY中的值

你可以使用多种技术。最简单的是使用FOR循环:

  1. FOR I IN 1..V.COUNT() LOOP  
  2. DBMS_OUTPUT.PUT_LINE('V('||I||')=' || V(I));  
  3. END LOOP; 

你也可以使用FIRST()和LAST()方法。FIRST()返回数组的第一个条目的下标(总是1),LAST()返回数组的最后一个条目的下标(与COUNT方法相同)。

  1. FOR I IN V.FIRST()..V.LAST() LOOP  
  2. DBMS_OUTPUT.PUT_LINE('V('||I||')=' || V(I));  
  3. END LOOP; 

你也可以使用PRIOR(n)和NEXT(n)方法,这两个方法分别返回给定条目的前一个和后一个条目的下标。例如,下面的代码用来向后遍历整个数组:

  1. I := V.COUNT();  
  2. WHILE I IS NOT NULL LOOP  
  3. DBMS_OUTPUT.PUT_LINE('V('||I||')=' || V(I));  
  4. I := V.PRIOR(I);  
  5. END LOOP; 

PRIOR(n)和n-1是一样的,NEXT(n)和n+1是一样的,但是PRIOR(1)和NEXT (V.COUNT())则返回NULL。

5. 对VARRAY的扩展

使用EXTEND(k)方法。这个方法可以在VARRAY的最后追加k个新的条目。如果k没有被指定,只增加一个条目。新增的条目没有值(默认为NULL),但是你可以对它们进行初始化。COUNT()和LAST()方法现在可以反映VARRAY新的容量。以下代码向数组中添加两个条目并对其进行初始化:

  1. I := V.LAST();  
  2. V.EXTEND(2);  
  3. V(I+1) := 5;  
  4. V(I+2) := 6; 

注意,你对VARRAY的扩展不可以超过其最大容量(通过LIMIT()方法得到),且在对VARRAY扩展前必须要对其进行初始化。以下代码是无效的:

  1. VT MY_ARRAY_TYPE;  
  2. VT.EXTEND(5); 

下面的代码是有效的:

  1. VT MY_ARRAY_TYPE;  
  2. VT := MY_ARRAY_TYPE();  
  3. VT.EXTEND(5); 

6. 对VARRAY的缩减

使用TRIM(k)方法。这个方法在VARRAY的尾部删除最后k个条目。当k没有被指定时,删除最后一个条目。已被删除的条目的值将丢失。COUNT()和LAST()方法反映了新的容量。下面从VARRAY中删除最后一个条目:

  1. V.TRIM; 

你也可以用以下方式删除数组中的所有条目:

  1. V.TRIM(V.COUNT()); 

或者用具有效果相同的DELETE()方法。该方法删除数组中的所有条目,并把其容量设置为0(也就是说,V.COUNT()现在的返回值为0)。

  1. V.DELETE() 
sql – Oracle中匿名TABLE/VARRAY类型示例详解 前言 本文主要介绍的是关于sql Oracle匿名TABLE/VARRAY类型的相关内容,在Oracle中,我有时会创建一些这样的结构 SELECT * FROM TABLE(STRINGS('a', 'b', 'c')) SELECT * FROM TABLE(NUMBERS(1, 2, 3)) 显然,我可以为上述声明我自己的类型.我可以在TABLE和VARRAY之间进行选择.例如: CREATE TYPE STRINGS AS TABLE OF VARCHAR2(100); CREATE TYPE NUMBERS AS VARRAY(100) OF NUMBER(10); 在这种特殊 立即下载

相关推荐

【机器人】机械臂控制入门技术栈分享

机械臂控制入门技术栈分享1.前言2.机器人控制入门技术栈2.1.空间描述和变化2.2.运动学分析2.3.动力学建模2.4.控制入门学习3.进阶部分3.1.机器人参数辨识3.2.非线性控制3.3.现代机器人描述方法:指数坐标4.总结 1.前言 今天看到优快云上有个分享个人技术栈的活动,虽然我不是一个正规的程序员,也不搞前端、后端这些,但我一直在优快云上通过写博客对我的学习进行总结,于是我突发奇想,不如我也写一下我的个人技术栈,针对机械臂控制入门的,因为我水平也不高,所以本文内容也许不够饱满,也不够准确,但

要恰饭得嘛 5859

Oracle_Type和Varray

zhanzehong的专栏 345

Aix升级和安装ssh配置过程

Aix升级和安装ssh配置过程Aix升级和安装ssh配置过程配置前背景配置步骤 Aix升级和安装ssh配置过程 部门IBM小型机的Aix操作系统需要进行ssh补丁修复,修复其实就是ssh版本你的升级,对升级的过程和中途遇到的问题做了记录如下。 配置前背景 操作系统: gdboss2/>uname -u //操作系统的Aix5.3 IBM,020693E5P gdboss2/&gt...

阿阿阿唱的博客 2992

oracle可变数组(VARRAY)

一、可变数组的定义:   可变数组与嵌套表相似,也是一种集合。一个可变数组是对象的一个集合,其中每个对象都具有相同的数据类型。可变数组的大小由创建时决定。在表中建立可变数组后,可变数组在主表中作为一个列对待。从概念上讲,可变数组是一个限制了行集合的嵌套表。   可变数组,允许用户在表中存储重复的属性。例如:假设用户有一个project表,并在项目中指定了工作人员,一个项目可以有多个工人,而一个工人也可以为多个项目工作。在严格的关系模型中,用户可以创建一个project表,一个worker表和存储它们之间

wo2han123456的博客 2642

Visual studio 2013 配置 Halcon 13 (非抄袭)

Visual studio 2013 配置 Halcon 13.0.2.2 (其他版本适用) 针对网上抄袭的配置方法均不可用,写了一篇亲试可行的配制方法。如下: 1.下载Halcon安装后(C:\Program Files\MVTec\HALCON-13.0) 添加环境变量,(按下win按键,键入“环境变量”,出现 “编辑系统环境变量”后按下enter即可打开,下方找到“环境变量”按钮)的系...

huyanjackson的专栏 1042

【ROS机器人系统】实验4 ROS简单应用:激光SLAM与导航

ROS简单应用:激光SLAM与导航 (1)了解机器人和SLAM之间关系 (2)了解激光SLAM (3)了解gmapping和导航

南京大学软件工程硕士在读 2146

oracle数据库中type是什么,oracle当中的type和varray

oracle当中有两种性质的type,一种是定义类型,另外一种是声明当前的元素的类型为已知的一个类型1、定义类型:CREATE OR REPLACE TYPE ED_DYNAMIC_PROC_OBJ AS OBJECT (TYPE NUMBER(2), /* 类型: 1:我的消息,2:XXX...

weixin_36009861的博客 3981

[QMT和ptrade量化交易小白入门]-109、小市值选股的基础上用六脉神剑评分,回测年化可到132%

本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1868

oracle—varray

VARRAY(变长数组)通俗的讲就是一个存储有序的元素集合,而其每个元素都有一个相关索引,该索引相对应元素在数组中的位置。变长数组存在大小的限制,但是可以动态进行更改。 Create Type varray_phone as varray(3) of varchar2(50);    1. 声明和初始化VARRAY变量 不可以直接声明一个VARRAY变量。必须先声明一个包含...

weixin_30306905的博客 339

VMware ESXi 系统里创建虚拟机,虚拟磁盘日志损坏,如何或者把数据备份?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1642

(四)美赛画图篇:画图模板+画图工具

美赛画图篇:画图模板+画图工具(一)画图模板(二)画图工具 因为散点图、折线图等多与数据有关,且需相关软件生成,故此处多是通用模板。直接替换文字内容即可。 (一)画图模板 1、Visio圆圈图 适合于:指标体系(E题常用) 点击下载:1 C币 如果不想花费且时间充足,悄咪咪地说,在visio-模板搜索可以找到很多。(稍微会耗一点时间) 2、简单指标体系图PPT 适合于指标体系 点击下载:0 C币...

weixin_43689393的博客 1万+

oracle 集合是否相当,Oracle三种集合数据类型的比较

http://www.sina.com.cn2008年12月26日 19:37比特网ChinaBytePL/SQL中没有数组的概念,他的集合数据类型和数组是相似的。在7.3以前的版本中只有一种集合,称为PL/SQL表,在这之后又有两种集合数据类型:嵌套表和varray。其中varray集合中的元素是有数量限制的,index_by表和嵌套表是没有这个限制的。index-by表是稀疏的,也就是...

weixin_31940835的博客 131

29.Labview界面设计 --- (下篇)自定义控件库、界面布局与外观设计

1.自定义控件外观(自定义控件)1.1 自定义外观库1.2 手动自定义控件外观2. 前面板控件布局方式(控件排布)2.1 模块化控制布局方式2.2 数据采集布局方式3. 前面板外观优化项(背景设计)3.1 前面板背景设计3.2 前面板窗口整理本节第一部分教大家安装一种可以直接用的自定义控件库,第二部分教大家如何自己设计控件并保存调用。

关注我,更多技术问题欢迎私聊~ 4783

oracle index-by table的遍历

Oracle的数据集合类型,分三种: Varray:固定长度(其他方法可扩展),连续的数组。对应其他程序中的数组。 Nested table:长度不固定,不连续。对应其他程序中的set,list等。 Associative Arrays(Known as index-by table):有索引的集合。对应其他程序中的hashMap。 前面的两种集合类型,遍历都比较简单,有很多种方法来遍历。

playAround的专栏 4625

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Oracle复合数据类型示例

--Recode数据类型 declare v_deptinfo scott.dept%rowtype; type dept_record is RECORD(   v1 scott.dept.deptno%type,   v2 scott.dept.dname%type,   v3 scott.dept%rowtype--可以声明ROWTYPE类型 ); v_deptrecord

Jston的专栏 903

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

oracle存储过程定行记录类型,oracle存储过程2

PL/SQL记录(record)主要用于处理单行多列数据。当使用RECORD时,既可以自定义记录的类型和变量,也可以使用%ROWTYPE属性定义记录变量。TYPE type_name IS RECORD(field_declaration,...);自定义记录类型,type_name用于指定记录类型的名称,field_declaration用于定义记录成员。declaretype type_par...

weixin_33268205的博客 504

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Oracle index by table(Associative array) used in PostgreSQL

Oracle plSQL中支持3种集合变量, index-by table, varray, nest table。 其中index-by table是不限元素个数,支持字符串或INT下标。 用法举例: DECLARE  -- Associative array indexed by string:    TYPE population IS TABLE OF NUMBER  -

postgrechina的博客 557

Oracle array usage

一维数组 Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 SET SERVEROUT O...

cscy21287的博客 151

Oracle扩展PL/SQL简介(三)

5.    复合数据类型1)    记录类型:●    自定义记录类型记录有益于处理单行多列的数据,当使用PL/SQL记录时,即可以自定义记录类型和记录变量,也可以使用%rowtype属性直接定义记录变量  type emp_record_type is record(     v_name  varchar2(32),       v_salary number(8,2)

(Andrew)的专栏 925

人大金仓数据库PLSQL基本数据类型

使用列属性或变量名加上%TYPE用来标识字段类型用来表示一个和已有表字段具有相同类型的类型除继承字段类型外,不能继承字段的其他属性例如:不能继承在字段上定义的NOT NULL属性或者DEFAULT属性。

arthemis_14的博客 1184

oracle 自定义类型,RECORD、VARRAY、TABLE的使用详解

ORACLE中RECORD、VARRAY、TABLE的使用详解,oracle 自定义类型,oracle自定义结果集

Jaelyn的博客 7856

oracle复合索引 表分区,oracle 复合类型 (索引表,嵌套表,数组array)

/* 回顾oracle 复合类型 (记录和集合) */ /* 1.记录是为了更方便的处理单行多列,而集合是为了更方便的处理单列多行 */ -- (一 )记录 /* 1. 首先创建一个简单表开始 */ create table test_complex( id varchar2(20), ...

weixin_39819152的博客 134

ibatis存储过程中,Oracle VARRAY自定义数据类型做IN参数的处理。

(1)在oracle中有如下自定义数据类型。 [code="sql"]create or replace type IdArray as VARRAY(255) of NUMBER; [/code](2)同时定义了一个存储过程/包。 [code="sql"]CREATE OR REPLACE PACKAGE pkg_auth IS PROCEDURE UserAdd(v_...

海风轻轻吹 282

ORACLE中RECORD、VARRAY、TABLE的使用详解

ORACLE中RECORD、VARRAY、TABLE的使用详解

专注于ORACLE 6万+

oracle varray长度,Oracle VARRAY

Oracle VARRAYiAnywhere Solutions 12 - Oracle ODBC 驱动 支持在存储过程中使用 Oracle VARRAY。与在存储过程编写的上载脚本(upload_insert、upload_update 和 upload_delete)中不使用VARRAY 相比,在存储过程编写的上载脚本中使用 VARRAY 可以提高 MobiLink 服务器的性能。通常不具有存...

weixin_33520510的博客 493
上一篇: ORACLE的 SQL优化
下一篇: 应用Apache Axis2 实现Webservice发布
johnnydev
博客等级 码龄15年 16粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值