/* 1.记录是为了更方便的处理单行多列,而集合是为了更方便的处理单列多行 */
-- (一 )记录
/* 1. 首先创建一个简单表开始 */
create table test_complex(
id varchar2(20),
username varchar2(20)
); -- 向test_complex 表插入几条记录
insert into test_complex values('1111111','aaaaa');
insert into test_complex values('2222222','bbbbb');
insert into test_complex values('3333333','ccccc');
/* 2. 创建一个记录类型 record
记录类型有两种定义方式:显式定义和隐式定义。
*/ --显示定义
declare
--1.显示定义
type t_record is record (
id test_complex.id%type,
username test_complex.username%type
); r_record t_record ; -- 声明一个记录类型变量r_record
--2.隐式定义
r_record test_complex%rowtype;
--游标定义
cursor c_cursor(v_id) is select id,username from test_complex t where t.id=v_id;
--3.游标定义记录变量
r_record2 c_cursor%rowtype;
begin
for v in (select * from test_complex) loop
r_record.id := v.id;
r_record.username := v.username;
dbms_output.put_line('id='|| r_record.id ||'username='||r_record.username);
end loop;
exception when others then
raise_application_error(-20201,'程序错误 for !');
end; --- select * from tab;
--- select * from test_complex
-- (二) 集合
一个PL/SQL集合中的每一行总是只有一列,这就类似于一维数组。
/* 集合主要包括三种: 索引表,嵌套表,以及数组(array)
1. Index表不能存储在数据库中,但嵌套表和VARRAY可以被存储在数据库中。
索引表语法如下;
TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX BY BINARY_INTEGER;
关键字是INDEX BY BINARY_INTEGER,没有这个关键字,那么集合将是一个嵌套表。由于不存储在数据库中,
element_type可以是任何合法的PL/SQL数据类型,包括:PLS/INTEGER、SIGNTYPE、和BOOLEAN。
索引表的下标可以为负,并且元素个数没有限制(索引有三种类型 pls_integer,binary_integer 10g开始允许使用varchar2 )
一 :pls_integer 和 binary_integer 一样可以存储 -2^31-2^31
1.存储性能高
2.pls_integer 溢出时会抛出异常,而binary_integer 如果指派给number 则不抛出异常
3.pls_integer 直接由cpu 运算比binary_integer(由oracle 模拟执行)快
*/ type t_tab is table of test_complex%rowtype index by binary_integer;
r_tab t_tab;
SELECT id,username INTO r_tab(0) FROM test_complex WHERE id='1111111';
---------------------------------------------------------------------------------------------------------------
/* 2.嵌套表定义语法如下:
嵌套表非常类似于Index_by表,创建的语法也非常相似。只是没有INDEX BY BINARY_INTEGER子串
TYPE type_name IS TABLE OF element_type [NOT NULL];
存储在一个数据库中的嵌套表并不与表中的其它数据存放在同一个数据块中,它们实际上被存放在第二个表中。
从数据库中取回的嵌套表也不保证元素的顺序。集合数据是离线存储的,所以嵌套表适合大型集合。
区别1:嵌套表下标从1开始并且元素格式不限
区别2:索引表类型不能作为表列的数据类型使用,但嵌套表可以
区别3:嵌套表类型变量使用是必须先被构造方法初始化才能使用
当使用嵌套表作为表列是必须用 eg: create type t_tbl is table of varchar2(2),并且必须要为列指定专门的存储表
create type t__tbl is table of varchar2(10);
/ create table tab_t (
username varchar2(8),
phone t__tab1
) nested table phone store as t__tab1;
如果要处理多行多列则可以采用记录表
eg: type t__tbl is table of tab_t%rowtype index by binary_integer;
*/ type t_n_tab is table of test_complex.id%type ;
r_n_tab t_n_tab;
r_n_tab := r_n_tab('11111','22222');--初始化赋值
---------------------------------------------------------------------------------------------------------------
/* 3.VARRAY定义语法如下:(定长数组,下标从1开始)
TYPE type_name IS [VARRAY|VARYING ARRAY] (max_size) OF element_type [NOT NULL];
max_size是一个整数,用于标示VARRAY集合拥有的最多元素数目。VARRAY集合的元素数量可以低于max_size,但不能超过max_size。
element_type是一维元素的数据类型,如果element_type是记录,那么这个记录只能使用标量数据字段(与嵌套标相似)。
VARRAY存储在数据库中时与表中的其他数据存放在同一个数据块中,元素的顺序保存在VARRAY中。
集合是在线存储的,VARRAY很适合于小型集合。
嵌套表和VARRAY都能作为列存储在数据库表中,所以集合自身可以为NULL,当集合为NULL时,所以也不能引用集合中的元素。
可以使用IS NULL操作符检测集合是否为NULL。
*/ type t_array is array(100) of test_complex.id%type ; --可以作为表列
r_array t_array;
r_array := r_array('11111','22222');--初始化赋值
-------------------------------------------------------------------------------------------------------------------
/* 4: 批量绑定:执行单次sql 操作能完成所有元素额数据 ,可以提高性能
eg : forall in ......
*/ ----------常用函数------------------------------------------------------------------------------------------------
/* COUNT===返回集合中元素的个数
DELETE========删除集合中所有元素
DELETE(x)=====删除元素下标为x的元素=====对VARRAY非法
DELETE(x,y)===删除元素下标从X到Y的元素====对VARRAY非法
EXIST(x)======如果集合元素x已经初始化,则返回TRUE, 否则返回FALSE
EXTEND========在集合末尾添加一个元素=======对Index_by非法
EXTEND(x)=====在集合末尾添加x个元素================对Index_by非法
EXTEND(x,n)===在集合末尾添加元素n的x个副本==============对Index_by非法
FIRST=========返回集合中的第一个元素的下标号,对于VARRAY集合始终返回1。
LAST==========返回集合中最后一个元素的下标号, 对于VARRAY返回值始终等于COUNT.
LIMIT=========返回VARRY集合的最大的元素个数===========Index_by集合和嵌套表无用
NEXT(x)=======返回在第x个元素之后及紧挨着它的元素的值,如果x是最后一个元素,返回null.
PRIOR(x)======返回在第x个元素之前紧挨着它的元素的值,如果x是第一个元素,则返回null。
TRIM==========从集合末端开始删除一个元素=====对于index_by不合法
TRIM(x)=======从集合末端开始删除x个=====对index_by不合法
分享到:
相关推荐
本章节主要介绍了Oracle数据库中如何利用记录(record)与集合(collection)来处理数据,通过具体实例讲解了不同类型的数据处理方法,旨在帮助学习者更好地理解和掌握Oracle数据库中的数据操作技巧。 #### 二、记录...
们将讨论记录和集合的类型、怎样定义和使用记录和集合。 • 复合数据类型(1) • 复合数据类型(2) • 复合数据类型(3) • 复合数据类型(4) • 复合数据类型(5) 单行函数和组函数 函数是一种有零个或多个参数并且有一...
在PL/SQL中,复合数据结构如记录和集合对于处理复杂的数据结构尤其有用。本文将详细介绍PL/SQL中的记录和集合,包括它们的定义、使用方法以及应用场景。 #### 二、PL/SQL 记录 记录是PL/SQL中一种重要的复合数据...
本文将详细介绍PL/SQL中的两种主要复合数据类型——记录和集合,并探讨它们的定义、使用方法以及实际应用。 #### 二、记录(Record) **1. 记录的概念** 记录是PL/SQL中的一种复合数据类型,它由多个域组成,每个...
PL/SQL language 还支持复杂数据类型, such as 记录和集合。记录是一种复杂数据类型,用于存储多个字段的数据。集合是一种复杂数据类型,用于存储多个记录。 PL/SQL 的操作符 PL/SQL language 支持多种操作符,...
在PL/SQL编程中,复合数据类型是处理复杂数据结构的关键工具,主要包含记录(Record)和集合(Collection)。本文将深入探讨这两种数据结构,帮助读者理解和应用它们。 首先,让我们来了解一下PL/SQL的记录(Record...
首先,定义集合类Jihe,拥有一个私有成员变量Array用于存储集合中的元素,一个私有成员变量a用于记录集合中的元素个数。公共成员函数包括初始化函数chushi、添加元素函数Add、删除元素函数Delete、判断集合是否为空...
4. 熟悉PL/SQL中的复合数据类型,如记录和集合。 5. 了解如何在PL/SQL中使用SQL进行数据操作,包括DML语句和事务管理。 6. 学习利用游标进行数据检索,并使用游标变量和REF CURSOR处理复杂查询结果。 **1. PL/SQL...
这些数据类型可以组合成更复杂的数据结构,如数组、记录和集合等。顺序结构程序是指按照顺序执行的程序,Pascal语言中使用缩进来表示程序的结构关系。 条件语句与复合语句 条件语句是Pascal语言中的一种控制流语句...
10. **记录和集合类型**: - 记录类型允许创建自定义的数据结构,类似结构化语言中的结构或类。 - 集合类型包括VARRAYs(固定大小的数组)和NESTED TABLEs(动态大小的表格),可用于存储同类型的多个元素。 11. ...
实验目标集中在掌握Python中的两个重要数据结构——字典(Dictionary)和集合(Set)。字典是一种可变容器模型,它以键值对(Key-Value pairs)的形式存储数据,而集合是无序且不重复的元素序列。 **一、字典操作**...
Java集合源码笔记记录
例如,对于一个产生式`A → α | β`(其中`α`和`β`是产生式的右侧),`A`的first集合是由`α`和`β`可能产生的第一个符号构成的集合。 ### 第二部分:first集合的计算方法 #### 1. 基本概念 - **非终结符**:...
以上内容涵盖了Oracle PL-SQL中的一些基础且重要的知识点,包括变量声明与赋值、输出设置、表操作、使用`%TYPE`和`%ROWTYPE`、记录和集合的使用。通过掌握这些核心概念,开发者可以在Oracle数据库环境中更高效地编写...
在PL/SQL编程环境中,集合操作BULK COLLECT和FORALL是提高数据库处理效率的关键特性。它们主要用于批量处理数据,减少数据库调用次数,从而优化性能。这些特性尤其适用于处理大量数据时,如循环遍历结果集并进行更新...
根据提供的文件信息,本文将对`psql基础资料`中的关键知识点进行详细的解析与扩展,以便更好地理解PostgreSQL(通常简称为psql)中的基本概念和技术应用。 ### 检索单行数据 #### 1.1 使用标量变量接受数据 在检索...
维尔特特别强调了数组、记录和集合这三种数据结构。数组是一种线性结构,可以存储相同类型的数据集合,而记录则是一种复合数据类型,可以存储不同类型的数据。集合是由无序的元素构成的集合类型。书中详细讨论了这些...
若原始集合未排序,先堆排序,然后用类似于交集的方法,但每次遇到小集合中的元素不在大集合中时才记录。 堆排序法在处理大规模数据时具有较高的效率,特别是当数据已经部分有序时。然而,对于小型集合,直接使用...
PL/SQL 支持复合数据类型,如记录和集合。 #### 6.1 定义 PL/SQL 记录 定义记录类型及其实例。 ```sql TYPE emp_record IS RECORD (employee_id employees.employee_id%TYPE, first_name employees.first_name%...
在Pascal程序语言中,集合(Sets)和记录(Records)是两种重要的构造类型,它们扩展了语言的基础数据类型,提供了更加灵活的数据组织方式。在本篇内容中,我们将深入探讨这两种数据类型以及相关的枚举类型。 首先...