- 浏览: 1100300 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
skyesx:
这是2PC实现,更常用的是一个柔性事务的实现,可以参考http ...
Spring分布式事务实现 -
ddbird:
这第一句就不严谨“分布式事务是指操作多个数据库之间的事务”,显 ...
Spring分布式事务实现 -
呵呵6666:
基于互联网支付系统的微服务架构分布式事务解决方案http:// ...
Spring分布式事务实现 -
小黄牛:
写得不错,交流群:472213887
Spring分布式事务实现 -
jiaoqf321456:
这明明是用的apache的压缩,给ant.jar有半毛钱关系吗 ...
使用ant.jar进行文件zip压缩
PL/SQL集合类型是类似于高级语言数组的一种复合数据类型,集合类型包括索引表(PL/SQL表)、嵌套表(Nested Table)和变长数组(VARRAY)三种类型。
<一>、索引表
索引表也称为PL/SQL表,它是Oracle早期版本用于处理PL/SQL数组的数据类型。索引表的元素个数没有限制,并且下标可以为负值。注意,索引表只能作为PL/SQL复合数据类型使用,而不能作为表列的数据类型使用。
语法:
说明:从Oracle9i开始,索引表下标不仅允许使用数据类型BINARY_INTEGER、PLS_INTEGER,而且允许使用数据类型VARCHAR2。
示例一:
示例二:
<二>、嵌套表
嵌套表的元素下标从1开始,并且元素个数没有限制。嵌套表数组元素值可以是稀疏的。
注意:索引表类型不能作为表列的数据类型使用,但嵌套表类型可以作为表列的数据类型。
语法:
1.在PL/SQL块中使用嵌套表
2.在表列中使用嵌套表
在表列中使用嵌套表类型,必须首先使用CREATE TYPE命令建立嵌套表类型。另外注意,必须要为嵌套表列指定专门的存储表。
示例如下:
(1)在嵌套表中插入数据
当定义嵌套表类型时,Oracle自动为该类型生成相应的构造方法。当为嵌套表列插入数据时,需要使用嵌套表的构造方法。
(2)在嵌套表中检索数据
需要定义嵌套表类型的变量接收其数据。
(3)在嵌套表中更新数据
首先需要定义嵌套表变量,并使用构造方法初始化该变量,然后才可在执行部分使用UPDATE语句更新其数据。
<三>、变长数组(VARRAY)
可以作为表列的数据类型使用。其元素下标以1开始,并且元素的最大个数是有限制的。
语法:
注意,当使用VARRAY元素时,必须要使用其构造方法初始化VARRAY元素。
1.在PL/SQL块中使用VARRAY
2.在表列中使用VARRAY
注意,嵌套表列的元素个数没有限制,而VARRAY列的元素个数是有限制的。
<四>、PL/SQL记录表
为了在PL/SQL块中处理多行多列数据,开发人员可以使用PL/SQL记录表。
<五>、集合方法
语法:
注意,集合方法只能在PL/SQL语句中使用,而不能在SQL语句中调用。另外集全方法EXTEND和TRIM只适用于嵌套表和VARRAY,而不适用于索引表。
1.EXISTS:确定集合元素是否存在。
2.COUNT:返回当前集合变量中的无素总个数。
3.LIMIT:返回集合元素的最大个数。VARRAY返回所允许的最大元素个数,其它返回NULL。
4.FIRST和LAST:返回集合变量第一个和最后一个元素的下标。
5.PRIOR和NEXT:返回当前元素的前一个和后一下元素下标。
6.EXTEND
用于扩展集合变量的尺寸,并为它们增加元素。注意,该方法只适用于嵌套表和VARRAY。EXTEND用于为集合变量添加一个null元素,EXTEND(n)用于为集合变量添加n个null元素,EXTEND(N,I)用于为集合变量添加n个元素(元素值与第i个元素相同)。
7.TRIM
用于从集合尾部删除元素,它有TRIM和TRIM(n)两种调用格式。TRIM用于从集合尾部删除一个元素;TRIM(n)则用于从集合尾部删除n个元素。注意,该方法只适用于嵌套格和VARRAY。
8.DELETE
用于删除元素,但该方法只适用于嵌套格和索引表,而不适用于VARRAY。DELETE用于删除集合变量的所有元素;DELETE(n)用于删除集合变量的第n个元素;而DELETE(m,n)则用于删除集合变量中从m到n之间的所有元素。
<一>、索引表
索引表也称为PL/SQL表,它是Oracle早期版本用于处理PL/SQL数组的数据类型。索引表的元素个数没有限制,并且下标可以为负值。注意,索引表只能作为PL/SQL复合数据类型使用,而不能作为表列的数据类型使用。
语法:
TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX BY key_type; identifier type_name;
说明:从Oracle9i开始,索引表下标不仅允许使用数据类型BINARY_INTEGER、PLS_INTEGER,而且允许使用数据类型VARCHAR2。
示例一:
declare type xm_table_type is table of drv_admin.drv_temp.xm%type index by binary_integer; xm_talbe xm_table_type; begin select xm into xm_talbe(-1) from drv_admin.drv_temp where lsh='&lsh'; dbms_output.put_line('姓名:'||xm_talbe(-1)); end;
示例二:
declare type area_table_type is table of number index by varchar2(10); area_table area_table_type; begin area_table('北京'):=1; area_table('上海'):=2; area_table('天津'):=3; dbms_output.put_line('第一个元素:'||area_table.first);--第一个元素下标 dbms_output.put_line('最后一个元素:'||area_table.last);--最后一个元素下标 end;
<二>、嵌套表
嵌套表的元素下标从1开始,并且元素个数没有限制。嵌套表数组元素值可以是稀疏的。
注意:索引表类型不能作为表列的数据类型使用,但嵌套表类型可以作为表列的数据类型。
语法:
type type_name is table of element_type; identifier type_name;
1.在PL/SQL块中使用嵌套表
declare type xm_table_type is table of drv_admin.drv_temp.xm%type; xm_table xm_table_type; begin xm_table:=xm_table_type(' ',' ',' ');--这里必须使用构造方法初始化嵌套表变量。 select xm into xm_table(2) from drv_admin.drv_temp where lsh='&lsh'; dbms_output.put_line('姓名:'||xm_table(2)); end;
2.在表列中使用嵌套表
在表列中使用嵌套表类型,必须首先使用CREATE TYPE命令建立嵌套表类型。另外注意,必须要为嵌套表列指定专门的存储表。
示例如下:
create type phone_type is table of varchar2(20); / create table employee( id number(4),name varchar2(10),sal number(6,2),phone phone_type )nested table phone store as phone_table;
(1)在嵌套表中插入数据
当定义嵌套表类型时,Oracle自动为该类型生成相应的构造方法。当为嵌套表列插入数据时,需要使用嵌套表的构造方法。
BEGIN INSERT INTO employee VALUES(1,'TOM',800, phone_type('028-90909800','13913001300') ); END; /
(2)在嵌套表中检索数据
需要定义嵌套表类型的变量接收其数据。
DECLARE phone_table phone_type; BEGIN SELECT phone INTO phone_table FROM employee WHERE id=1; FOR i IN 1..phone_table.COUNT LOOP dbms_output.put_line('电话号码:'||phone_table(i)); END LOOP; END;
(3)在嵌套表中更新数据
首先需要定义嵌套表变量,并使用构造方法初始化该变量,然后才可在执行部分使用UPDATE语句更新其数据。
DECLARE phone_table phone_type:=phone_type('028-10001000','139800900100'); BEGIN UPDATE employee SET phone=phone_table WHERE id=1; END; /
<三>、变长数组(VARRAY)
可以作为表列的数据类型使用。其元素下标以1开始,并且元素的最大个数是有限制的。
语法:
TYPE type_name IS VARRAY(size_limit) OF element_type [NOT NULL]; Identifier type_name;
注意,当使用VARRAY元素时,必须要使用其构造方法初始化VARRAY元素。
1.在PL/SQL块中使用VARRAY
DECLARE TYPE xm_table_type IS VARRAY(20) OF drv_admin.drv_temp.xm%TYPE; xm_table xm_table_type:=xm_table_type(' '); BEGIN SELECT xm INTO xm_table(1) FROM drv_admin.drv_temp WHERE lsh='&lsh'; dbms_output.put_line('姓名:'||xm_table(1)); END; /
2.在表列中使用VARRAY
CREATE TYPE phone_type IS VARRAY(20) OF VARCHAR2(20); / CREATE TABLE employee( id NUMBER(4), name VARCHAR2(10), sal NUMBER(6,2), phone phone_type );
注意,嵌套表列的元素个数没有限制,而VARRAY列的元素个数是有限制的。
<四>、PL/SQL记录表
为了在PL/SQL块中处理多行多列数据,开发人员可以使用PL/SQL记录表。
DECLARE TYPE tmp_table_type IS TABLE OF drv_admin.drv_temp%ROWTYPE INDEX BY BINARY_INTEGER; tmp_table tmp_table_type; BEGIN SELECT * INTO tmp_table(1) FROM drv_admin.drv_temp WHERE lsh='&lsh'; dbms_output.put_line('姓名:'||tmp_table(1).xm); dbms_output.put_line('备注:'||tmp_table(1).bz); END; /
<五>、集合方法
语法:
collection_name.method_name[(parameters)]
注意,集合方法只能在PL/SQL语句中使用,而不能在SQL语句中调用。另外集全方法EXTEND和TRIM只适用于嵌套表和VARRAY,而不适用于索引表。
1.EXISTS:确定集合元素是否存在。
IF xm_table.EXISTS(1) THEN xm_table(1):='Tom'; ELSE dbms_output.put_line('必须初始化集合元素'); END IF;
2.COUNT:返回当前集合变量中的无素总个数。
3.LIMIT:返回集合元素的最大个数。VARRAY返回所允许的最大元素个数,其它返回NULL。
4.FIRST和LAST:返回集合变量第一个和最后一个元素的下标。
5.PRIOR和NEXT:返回当前元素的前一个和后一下元素下标。
6.EXTEND
用于扩展集合变量的尺寸,并为它们增加元素。注意,该方法只适用于嵌套表和VARRAY。EXTEND用于为集合变量添加一个null元素,EXTEND(n)用于为集合变量添加n个null元素,EXTEND(N,I)用于为集合变量添加n个元素(元素值与第i个元素相同)。
7.TRIM
用于从集合尾部删除元素,它有TRIM和TRIM(n)两种调用格式。TRIM用于从集合尾部删除一个元素;TRIM(n)则用于从集合尾部删除n个元素。注意,该方法只适用于嵌套格和VARRAY。
8.DELETE
用于删除元素,但该方法只适用于嵌套格和索引表,而不适用于VARRAY。DELETE用于删除集合变量的所有元素;DELETE(n)用于删除集合变量的第n个元素;而DELETE(m,n)则用于删除集合变量中从m到n之间的所有元素。
评论
3 楼
log_cd
2010-08-21
PL/SQL表只有两列,其中第一列为索引列为Integer类型索引列,9i后可以支持字符索引。第二列为用户自定义列,声明用户可用列类型。
通过索引列中的索引值来操作PL/SQL表中对应的用户自定义列。类似于键值对。确保索引值的唯一性。如果索引值重复不会报错,会覆盖前面的值。
记录(Record)的单行多列和物理存储数据的表。
通过索引列中的索引值来操作PL/SQL表中对应的用户自定义列。类似于键值对。确保索引值的唯一性。如果索引值重复不会报错,会覆盖前面的值。
记录(Record)的单行多列和物理存储数据的表。
2 楼
nwpu053871
2010-08-20
索引表和PL/SQL记录表有区别吗?
1 楼
nwpu053871
2010-08-20
总结的很好很详细!
发表评论
-
Oracle 如何扩展表空间
2013-09-26 14:29 0一、查看Oracle表空间的使用情况 select dbf ... -
Oracle之自定义聚合函数
2013-08-18 14:56 0一、聚合字符串 CREATE OR REPLACE FUN ... -
SQL Plus 命令及使用
2011-09-20 17:09 0一、登录到数据库 1.直接敲sqlplus并回车就是启动SQ ... -
Oracle数据字典/字段注释/分布式事务故障
2011-03-16 21:55 0一、Java 获取表的属性可以通过ResultSetMetaD ... -
Oracle中常用SQL
2010-05-28 12:49 01、求出本星期第一天和第七天的日期 select tru ... -
Oracle Errors收集
2010-05-23 23:21 2359一、ORA-01652无法通过128(在temp表空间中)扩展 ... -
oracle自动备份数据
2010-02-04 15:19 0一、自动备份脚本(backup.bat) @ECHO OF ... -
oracle实例内存(SGA和PGA)调整
2010-01-04 14:24 53832一、名词解释 (1)SGA:System Global Are ... -
java oracle clob
2009-06-26 21:59 6316create table TEST_CLOB ( ... -
oracle blob数据存取
2009-06-26 21:58 6098Oracle中的lob (Large Object)可 ... -
PL/SQL的异常处理/光标/数据链路/导入导出存储过程
2009-06-26 21:57 2547一、PL/SQL的异常 1.处理异常: EXCEPTIO ... -
oracle 管道化表函数(Pipelined Table)
2009-06-18 20:37 9565在实际的应用中,为了让PL/SQL 函数返回数据的多个 ... -
ORACLE批量绑定FORALL与BULK COLLECT
2009-06-18 20:36 19975FORALL与BULK COLLECT的使用方法: 1. ... -
oracle 统计/分析函数
2009-06-09 14:42 6414Oracle从8.1.6开始提供分析函数,分析函数 ... -
PL/SQL开发中动态SQL的使用与过程分页
2009-06-01 11:45 2207在Oracle数据库开发 ... -
Oracle格式化函数
2009-04-02 14:52 6289格式化函数 函数 返回类型 描述 ... -
Oracle数据导入导出imp/exp命令和grant命令
2009-04-02 12:17 15569一、数据导入导出命令 ... -
JDBC驱动类型的区别
2009-03-31 08:31 3289jdbc-odbc桥:将JDBC调用转换到ODBC调用。 ... -
Java程序使用OCI驱动连接Oracle数据库
2009-03-31 08:00 4564根据oracle的说法,ja ... -
oracle之spfile与pfile
2009-01-20 15:19 14581pfile(Initialization Paramet ...
相关推荐
6. **复合类型**:PL/SQL支持数组、集合和记录等复合类型,这些使得处理复杂数据结构变得可能。手册会详细介绍这些类型的创建和使用。 7. **包(Packages)**:包是将相关的过程、函数和变量封装在一起的一种方式,...
- **记录和集合**:用于存储多条数据,可以是自定义类型的记录或标准的PL/SQL集合类型。 - **包**:封装相关的过程、函数和变量,提供模块化的代码组织。 学习PL/SQL不仅有助于你更好地管理Oracle数据库,还能提升...
PL/SQL软件包是一组相关的过程和函数的集合,它可以用来组织和管理程序。软件包由两部分组成,说明部分和包体部分,分别用于声明公共接口和实现逻辑。 异常处理在PL/SQL中用来处理程序运行时发生的错误。PL/SQL预定...
此外,PL/SQL还支持集合类型,如VARRAY(可变数组)和TABLE(表类型),这对于处理大量数据非常有用。 这本书的配套源代码可能会涵盖以下几个方面: 1. **基础操作**:包括简单的SQL查询、变量声明、流程控制...
- **集合与记录**:学习如何使用PL/SQL中的集合和记录类型,这些结构可以帮助更高效地处理数据集。 - **游标**:介绍游标的使用方法,包括隐式游标和显式游标,以及如何利用游标遍历查询结果。 #### 四、PL/SQL中的...
- **程序包**:集合了一系列相关的子程序、类型定义和其他PL/SQL元素,便于管理和复用。 **2.3 标识符规则** PL/SQL中的标识符遵循以下规则: - 标识符长度不能超过30个字符。 - 第一个字符必须是字母。 - 不区分...
* 包:是一组相关的 PL/SQL 程序块的集合。 * 触发器:是一种特殊的存储程序,用于自动执行某些操作。 定义函数的语法: CREATE [OR REPLACE] FUNCTION function_name [(argument [IN|OUT|IN OUT] datatype)] ...
2. **复合数据类型**:介绍PL/TABLE、记录类型(%ROWTYPE)以及集合类型(VARRAY和NESTED TABLE),这些都是处理大量数据或构建复杂数据结构的关键工具。 3. **游标**:讲解如何使用显式和隐式游标进行查询和遍历...
5. **集合类型**:包括数组(PLS_INTEGER索引的PL/SQL表)和关联数组(索引由非数字类型的值定义),以及如何在集合中插入、删除和迭代元素。 6. **包(PACKAGE)**:创建和使用包来组织相关的过程和函数,实现模块...
5. **数据操作**:除了标准的SQL查询,PL/SQL还支持集合操作,如BULK COLLECT和FORALL,可以高效地处理大量数据。 6. **游标**:PL/SQL中的游标允许逐行处理查询结果,是处理复杂数据操作的重要工具。 7. **记录...
5. **过程与函数**:过程是一组PL/SQL语句的集合,用于执行特定任务。函数与过程类似,但返回一个值。它们可以提高代码的复用性和模块化。 6. **异常处理**:PL/SQL提供了一个强大的异常处理机制,允许你定义和捕获...
5. **集合类型**:讨论PL/SQL中的集合类型,如数组、关联数组、表类型和索引表,以及它们在处理大量数据时的优势。 6. **包(PACKAGE)**:解释如何创建和使用包,包括包规范(PACKAGE SPECIFICATION)和包体...
- 表类型:使用PL/SQL表类型进行集合操作。 -记录类型:定义和使用记录类型,类似于结构或对象。 5. **程序单元**: - 包(PACKAGE):定义公共接口和私有实现,提高代码复用性。 -存储过程和函数:创建存储在...
2. 全面的数据类型支持:PL/SQL兼容所有SQL数据类型和Oracle对象类型。 3. 可存储与可重用:PL/SQL块可以被命名并存储在数据库中,便于重复使用,并可通过任何客户/服务器工具访问。 4. 安全性:可以通过Oracle数据...
《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何有效地使用它。...
3. **集合和游标**:集合是PL/SQL中处理多行数据的有效工具,如VARRAYs(固定大小数组)和associative arrays(关联数组)。游标则允许我们一行一行地处理查询结果,是处理动态数据的重要手段。 4. **存储过程和...
2. **变量和数据类型**:PL/SQL支持多种内置数据类型,如NUMBER、VARCHAR2、DATE等,以及PL/SQL特有的记录和集合类型。 3. **流程控制语句**:包括IF-THEN-ELSIF-ELSE、CASE、FOR循环、WHILE循环等,用于控制程序的...
7. SQL优化:解释PL/SQL代码的优化方法,例如编写高效的SQL语句、使用PL/SQL集合类型减少数据库I/O操作等。 8. 安全性:包括PL/SQL代码的安全性、如何在代码中处理敏感信息以及如何在Oracle数据库中管理PL/SQL代码的...
复合类型包括记录类型和集合类型,其中集合类型又包括数组和表。参考类型是记录的引用,用于在PL/SQL程序中操作数据库表中的行。 PL/SQL支持多种流程控制语句,包括条件语句(如IF和CASE)以及循环语句(如FOR、...