`
q272156430
  • 浏览: 275786 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

oracle 复合数据类型(批量绑定)2

阅读更多

一、PL/SQL集合
    为了处理单列多行,可以使用PL/SQL集合进行处理。PL/SQL集合类似于高级语言数组的一种复合数据类型、集合类型包括索引表(PL/SQL表)、嵌套表(Netsed Table)、变长数组(VARRAY)等三种类型。
1、索引表
  索引表也成为PL/SQL表,它是oracle早期用来处理PL/SQL数组的数据类型,注意,高级语言数组的元素个数是有限制的,并且下标不能为负数,而索引表的元素个数没有限制,并且下标可以为负数,注意索引表只能作为PL/SQL复合数据类型使用,而不能作为表列的数据类型使用,定义索引表的语法如下:
type type_name is table of element_name
[not null]index by key_type;
identifier type_name;
如图所示:type_name用于指定自定义数据类型的名称(is table..index表示索引表),element_type用于指定索引表元素的数据类型,not null表示不允许应用null元素,key_type用于指定索引表元素下标的数据类型(binary_integer、pls_integer或varchar2);identifier用于定义索引表变量,注意oracle9i之前,索引表下标只允许用的数据类型binary_integer和pls_integer;而从oracle9i开始不仅可以为binary_integer和pls_integer,而且还可以为varchar2类型,
示例一、在索引表中使用binary_integer和pls_integer

 declare
 type temp_table_type is table of cip_temps.NAME%type
 index by binary_integer;
 temp_table temp_table_type;
 begin
    select name into temp_table(-1) from cip_temps where id=6;
    dbms_output.put_line(temp_table(-1));
 end;


示例二、在索引中使用varchar2

declare
 type temp_table_type is table of number
 index by varchar2(10);
 temp_table temp_table_type;
begin
temp_table('北京'):=1;
temp_table('上海'):=2;
temp_table('河北'):=3;
dbms_output.put_line(temp_table.first);
dbms_output.put_line(temp_table.last);
end;

 

2、嵌套表


  嵌套表也是一种用来处理PL/SQL数组的数据类型,高级语言数组元素下标是用0或1开始,并且元素个数有界限,而嵌套表下标是从1开始的,并且元素个数没有界限,另外高级语言数组元素值是顺序的,而嵌套表的数组元素值是可以稀疏的,注意索引表类型不能做为表列的数据类型使用,但嵌套表类型可以做为表列的数据类型使用, 语法如下:
type type_name is table of element_type;
identifier type_name;
如上所示,type_name用于指定嵌套表名称,element_type用于指定嵌套表元素的数据类型,identifier用于定义嵌套表变量,注意:当使用嵌套表时,必须首先使用构造方法初始化嵌套表,示例如下:
delcare
type temp_table_type is table of emp.name%type;
temp_table temp_table_type:=temp_table_type('A','A');
使用嵌套表的说明方法
(1)在PL/SQL快中使用嵌套表
   必须要初始化嵌套表变量,然后才能在PL/SQL块中引用嵌套表,示例如下:

declare
 type temp_table_type is table of cip_temps.NAME%type;
 temp_table temp_table_type;
begin
temp_table:=temp_table_type('mary','123','123');
select name into temp_table(3) from cip_temps where id=6;
dbms_output.put_line(temp_table(3));
end;


(2)、在表列中使用嵌套表
  嵌套表类型不仅可以再PL/SQL块中直接引用,也可以作为表列的数据类型使用,但如果在表列中使用嵌套表类型,必须首先使用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;


示例一、在PL/SQL块中嵌套表列插入数据
当定义嵌套表类型时,oracle自动为该类型生成相应的构造方法,当为嵌套表列插入数据时,需要使用嵌套表的构造方法,示例如下:

declare
 begin
insert into employee values(1,'1111',5,phone_type('aaaa','3333333'));
end;


示例二、在PL/SQL块中检索嵌套表列的数据
     当在在PL/SQL块中检索嵌套表列的数据时,需要定义嵌套表类型的变量接收其数据,示例如下:

declare
temp_phone phone_type;
 begin
select phone into temp_phone from employee where id=1;
for i in 1..temp_phone.count loop
dbms_output.put_line(temp_phone(i));
end loop;
end;


示例三、在PL/SQL块中更新嵌套表列的数据
  当在PL/SQL块中更新嵌套表列的数据时,首先需要定义嵌套表变量,并使用构造方法初始化该变量,然后才能执行部门使用update语句更新,示例如下:

declare
temp_phone phone_type:=phone_type('aa','bb');
 begin
update employee set phone=temp_phone where id=1;
end;


3、变长数组
其元素下标以1开始,并且元素下标最大是有限制的,定义array语法如下:
type  type_name is vrray(limit_size) of element_type[not null];
identifier type_name;
如上所示:type_name类型名称,limit_size用于指定下标最大值,element_type用于指定元素数据类型,identifer用于定义vrray变量,当使用vrray元素时,必须使用构造方法初始化array元素,示例如下:
declare
type temp_varray_type is vrray(20) of temp.name%type;
temp_varray temp_varray_type:=temp_varray_type('a');
关于用法同嵌套表
二、PL/SQL记录表
PL/SQL变量用于处理单行单列数据,PL/SQL记录用于处理单行多列数据,PL/SQL集合用于处理多列单行数据,为了在PL/SQL快中处理多行多列数据,开发人员可以使用PL/SQL记录表处理多行多列数据,示例如下:

declare   
type temp_table_type is table of cip_temps%rowtype   
 index by binary_integer;   
 temp_table temp_table_type;   
 begin   
  select * into temp_table(1) from cip_temps where id=6;   
  for i in 1..temp_table.count loop   
    dbms_output.put_line(temp_table(i).name||':'||temp_table(i).address);   
  end loop;   
end;  
 
分享到:
评论

相关推荐

    Oracle PL/SQL编程及最佳实践

    Oracle 公司的第一个产品是 Oracle Database 2,它是一个关系数据库管理系统。从那时起,Oracle 公司不断发展,推出了一系列的数据库管理系统和相关产品。 三、PL/SQL 及 PL/SQL Developer 工具简介 PL/SQL 是 ...

    Effective Oracle By Design

    书中详细讨论了何时使用B树索引、位图索引、函数索引以及复合索引,以及如何根据数据分布和查询模式来选择最合适的索引类型。 2. **表分区**:当处理大规模数据时,表分区能显著提高查询性能。书中介绍了范围分区、...

    Oracle PL SQL语言基础 详细 好用

    PL/SQL支持多种数据类型,包括数值型(如NUMBER)、字符型(如VARCHAR2、CHAR)、日期型(DATE)、布尔型(BOOLEAN)以及复合和记录类型。变量可以在声明部分声明,并在执行部分赋值和使用。 **控制流程语句** PL/...

    oracle-sql(两本pdf)

    2. 分区和分片:介绍Oracle中的高级特性,如范围分区、列表分区、哈希分区和复合分区,以及数据分片的策略。 3. 存储优化:讨论索引的类型(B树、位图、函数索引)和创建,以及如何通过分析和统计优化查询性能。 4. ...

    oracle(9i)pl_sql+oracle(11g)pl_sql参考手册

    3. **数据类型**:介绍Oracle支持的内置数据类型,如NUMBER、VARCHAR2、DATE等。 4. **运算符和表达式**:包括算术、比较和逻辑运算符,以及如何构建复杂的表达式。 5. **流程控制语句**:如IF-THEN-ELSIF、CASE、...

    Oracle9i 数据库性能优化

    - **并行度设置**:适当增加并行度可以有效提高数据加载和批量处理的速度。 ##### 2.3 SQL 语句优化 - **避免全表扫描**:通过建立合适的索引来减少数据访问量。 - **减少排序操作**:尽可能使用索引而不是排序来...

    ORACLE存储过程性能优化技巧

    9. **使用合适的数据类型**:根据实际需求选择最小的数据类型,减少存储空间,提升处理速度。 10. **减少事务大小**:大事务可能导致长时间锁定资源,影响并发性能。尽量将大事务分解为小事务,降低锁的竞争。 11....

    高级oracle-plsql-培训资料

    接下来,我们探讨高级数据类型,如复合类型(记录和表类型)、嵌套表和关联数组。这些数据类型允许我们处理复杂的数据结构,例如存储多个行或列的数据,增强程序的灵活性。 PL/SQL中的游标用于逐行处理查询结果,...

    oracle pl/sql

    2. **变量和数据类型** - PL/SQL支持多种内置数据类型,如 NUMBER、VARCHAR2、DATE、BOOLEAN等。变量是存储数据的容器,必须先声明后使用。 3. **流程控制** - 使用IF-THEN-ELSIF-ELSE结构进行条件判断,用WHILE...

    精通Oracle.10g.PLSQL编程

    使用复合数据类型 8.1 PL/SQL记录 8.1.1 定义PL/SQL记录 8.1.2 使用PL/SQL记录 8.2 PL/SQL集合 8.2.1 索引表 8.2.2 嵌套表 8.2.3 变长数组(VARRAY) 8.2.4 PL/SQL记录表...

    Oracle的PL-SQL编程手册

    PL-SQL支持多种数据类型,包括数值类型(如NUMBER、INTEGER)、字符类型(VARCHAR2、CHAR)、日期时间类型(DATE)、布尔类型(BOOLEAN)以及复合和记录类型。变量可以在声明部分定义,然后在执行部分进行操作。 三...

    Oracle 8i PL_SQL高级程序设计

    2. **PL/SQL数据类型**:学习Oracle支持的各种内置数据类型,如数值类型(NUMBER、INTEGER)、字符类型(VARCHAR2、CHAR)、日期时间类型(DATE)、布尔类型(BOOLEAN)以及复合类型(记录和数组)。 3. **变量声明...

    oracle技巧部分

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级数据存储、管理和处理方面具有卓越性能。Oracle数据库与Java的结合使用,使得开发者能够构建分布式、高性能的应用程序。本资料包聚焦于“Oracle...

    ORACLE+SQL性能优化系列

    - 全表扫描(Full Table Scan, FTS): 当Oracle进行全表扫描时,它不会按单个数据块读取,而是以批量方式一次性读取多个数据块,从而提高效率。这种方式适用于表较小或没有合适索引的情况。 - 通过ROWID访问: ...

    Oracle存储过程

    - 定义:使用`CREATE [OR REPLACE] PROCEDURE`语句创建,指定过程名、参数(可选)、参数模式(IN, OUT, IN OUT)和数据类型。例如: ```sql CREATE OR REPLACE PROCEDURE USP_Learning( p_para1 VARCHAR2 := '...

    Oracle.PL.SQL程序设计 第五版 下册

    1. **PL/SQL基础**:包括变量声明、数据类型、常量、条件语句(IF-THEN-ELSIF)、循环结构(WHILE, FOR, LOOP),以及异常处理(BEGIN-EXCEPTION-END块)。 2. **PL/SQL过程和函数**:详细介绍了如何创建和调用存储...

    ORACLE SQL编程技巧.doc

    7. **批次插入大量数据**:批量插入数据比单条插入更有效率。使用BULK COLLECT INTO和FORALL语句来提升插入性能。 **二、SQL的使用** 1. **show和set命令**:在SQL*Plus中,show命令用于显示当前设置,set命令用于...

    Oracle数据库中SQL语句优化.pdf

    在Oracle中,应合理创建和使用B树索引、位图索引、函数索引等,以适应不同类型的查询需求。避免在频繁更新的列上创建索引,因为这会增加写操作的开销。同时,考虑使用复合索引,以提高多条件查询的效率。 二、查询...

    ORACLE SQL性能調整

    2. **访问Table的方式**:Oracle通过全表扫描(Full Table Scan)和基于ROWID的访问来读取数据。全表扫描适合于小表或全表都需要的数据查询;而ROWID访问通过索引快速定位到特定记录,适合于部分数据的查询。 3. **...

    Oracle SQL优化规则.zip

    Oracle SQL优化是数据库管理中的关键环节,尤其是在大型企业级应用中,高效的SQL查询能显著提升系统性能,降低服务器资源消耗。以下是一些重要的Oracle SQL优化规则: 1. **选择合适的索引策略**:索引是提升查询...

Global site tag (gtag.js) - Google Analytics