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.html、https://www.cnblogs.com/kubimiantiao/p/3795778.html
oracle中的数组的更多相关文章
- 向Oracle中传入数组,批量执行SQL语句
1.首先用PL/SQL创建package create or replace package excuteBatchOperate as type sqlStr_Array ) index by bi ...
- Java SpringMvc+hibernate架构中,调用Oracle中的sp,传递数组参数
一.问题 我们调用数据,大都是可以直接获取表中的数据,或者用复杂点的sql语句组成的.但是,有时候,当这样达不到我们要的全部数据的时候,这时,我们就用到了存储过程[sp],如果sp需要参数是数组的话, ...
- oracle中imp命令详解 .
转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...
- 慕课网-安卓工程师初养成-6-3 如何使用 Java 中的数组
来源:http://www.imooc.com/code/1525 Java 中操作数组只需要四个步骤: 1. 声明数组 语法: 或者 其中,数组名可以是任意合法的变量名,如: 2. 分配空间 简 ...
- oracle中imp命令具体解释
oracle中imp命令具体解释 Oracle的导入有用程序(Import utility)同意从数据库提取数据,而且将数据写入操作系统文件.imp使用的基本格式:imp[username[/pass ...
- oracle中110个常用函数介绍
1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dua ...
- 创建类似于Oracle中decode的函数
-- 创建类似于Oracle中decode的函数create or replace function decode(variadic p_decode_list text[])returns text ...
- oracle中动态SQL详解
部分内容参考网上资料 1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情 ...
- Oracle中的AWR,全称为Automatic Workload Repository
Oracle中的AWR,全称为Automatic Workload Repository,自动负载信息库.它收集关于特定数据库的操作统计信息和其他统计信息,Oracle以固定的时间间隔(默认为1个小时 ...
随机推荐
- 虚拟机克隆后修改mac地址和ip地址
(1)虚拟机克隆在新的虚拟机下会有文件产生变化. /etc/udev/rules.d/70-persistent-net.rules 文件中会多一个eth1 网卡的文件 ,eth0 的那行文件是原虚 ...
- Filter学习笔记
博客园的编辑器太丑了,所以我换用了别的Markdown编辑器,并用图片形式上传.
- 开发属于自己的包,并上传到npm上
1.DIY开发包 1.1符合标准的包结构 一个规范的包,它的组成结构,必须符合以下3点要求: 包必须以单独的目录而存在 包的顶级目录下,必须包含package.json这个包管理文件 package. ...
- Spark面试题(四)
1.Spark中的HashShufle的有哪些不足? 1)shuffle产生海量的小文件在磁盘上,此时会产生大量耗时的.低效的IO操作: 2)容易导致内存不够用,由于内存需要保存海量的文件操作句柄和临 ...
- ansible模块及语法
常用模块详解 模块说明及示例: 1.ping模块ping模块 主要用于判断远程客户端是否在线,用于ping本身服务器,返回值是changed.ping示例 ansible clu -m ping 2. ...
- 理解ASP.NET Core - 日志(Logging)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 快速上手 添加日志提供程序 在文章主机(Host)中,讲到Host.CreateDefault ...
- CSS 海盗船加载特效
CSS 海盗船加载特效 <!DOCTYPE html> <html lang="en"> <head> <meta charset=
- SQL告警,执行时间长?教你写一手好 SQL !
博主(编码砖家)负责的项目主要采用阿里云数据库MySQL,最近频繁出现慢SQL告警,执行时间最长的竟然高达5分钟.导出日志后分析,主要原因竟然是没有命中索引和没有分页处理 . 其实这是非常低级的错误, ...
- building sasl.wrapper extention
yum install gcc-c++ python-devel.x86_64 cyrus-sasl-devel.x86_64 pip install pyhs2 ref: https://www.o ...
- 注解@RunWith的作用
@RunWith就是一个运行器 @RunWith(JUnit4.class)就是指用JUnit4来运行 @RunWith(SpringJUnit4ClassRunner.class),让测试运行于Sp ...