`
bjtale
  • 浏览: 29617 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

PL/SQL复合类型变量

 
阅读更多

      Oracle在PL/SQL中提供了复合数据类型,用于存放多个值,定义复合变量时需要使用PL/SQL的复合数据类型,主要有这四种:记录类型、自定义表、嵌套表、VARRAY。

      1.记录类型

      这种数据类型类似于C语言中的结构体,每个记录类型一般会包含多个成员变量,在使用记录类型变量时需要在声明部分定义record类型和变量,随后在执行部分才可使用。示例代码如下:

declare 
  type emp_record is record(
        v_name emp.ename%type,
        v_sal emp.sal%type,
        v_job emp.job%type);
        v_emp emp_record;
begin
        select ename,sal,job into v_emp from emp where empno='7788';
        dbms_output.put_line('emp_name:'||v_emp.v_name);
end;

      以上代码定义了一个emp_record记录类型,在这个记录类型中包含三个成员变量,v_emp则引用了emp_record这个记录类型作为变量,在使用时需要通过记录变量前缀来使用记录类型的成员。

      2.自定义表

      自定义表类似于C语言中的数组,但是PL/SQL中自定义的表下标可以为负值。并且,高级语言中数组元素个数会受到数据类型最大长度的限制,但是PL/SQL自定义表的元素个数没有限制,且下标没有上下界限。使用自定义表时,必须先定义自定义表类型和表变量,执行部分中即可使用表变量。示例如下:

declare
  type emp_table is table of emp%rowtype
       index by binary_integer;
  v_emp emp_table;
begin
  select * into v_emp(-1) from emp where empno='7788';
  dbms_output.put_line('emp_name:'||v_emp(-1).ename);
end;

       以上示例定义了一个自定义表类型emp_table,表中存放的元素类型是emp表的行记录,以v_emp作为该自定义表类型的表变量,v_emp(index)表示表变量中特定下标的元素,引用元素成员变量时需要使用元素名作为前缀。

      3.嵌套表

      嵌套表就是表中的子表,在主表中表示为一列,对应于主表的每一条记录,嵌套子表可以包含多行。使用嵌套表时,避免了联表查询就可以直接访问子表中的对应记录。如下,示例说明了嵌套表的定义:

--创建类型emp_type,记录员工的基本信息
create or replace type emp_type as object(
       v_name varchar2(10),
       v_sal number(6,2),
       v_hire date);
--创建类型emp_array,这个类型是嵌套表引用的基础类型
create or replace type emp_array is table of emp_type;
--创建部门信息表,将员工信息类型emp_array作为子表进行嵌套
create table t_dept(
       deptno number(2),
       dname varchar2(10),
       t_emp emp_array
       ) nested table t_emp store as t_emp;

       嵌套表的使用:

--向嵌套表中插入数据       
insert into t_dept 
       values(68,'Security',emp_array(emp_type('yanh',9000,sysdate),
                                                     emp_type('helen',9200,sysdate),
                                                     emp_type('chalin',7800,sysdate)));
--嵌套子表不能单独查询,但可以使用hint指令查询
SELECT /*+NESTED_TABLE_GET_REFS+*/ NESTED_TABLE_ID, v_name,v_sal,v_hire FROM  t_emp;

       以上示例表明,在使用嵌套表作为表列时,必须制定特定的存储表,否则使用hint指令查询子表时将无法查询制定的存储列id。

      4.VARRAY

      VARRAY类似于嵌套表,可以作为表中的某一列存储。通常被称为变长数组,与嵌套表不同的是,嵌套表中的元素个数是没有限制的,但是变长数组中的元素个数有限制。使用时,需要先建立VARRAY类型,示例如下:

--建立VARRAY类型
CREATE TYPE res_type as object(
       v_nm varchar2(30),
       v_date date);
CREATE TYPE res_array is VARRAY(5) of res_type;
CREATE TABLE t_res(
       id number(6),
       comm varchar2(10),
       v_res res_array);
insert into t_res values
       (1,'first',res_array(res_type('abc',sysdate),
                                 res_type('def',sysdate)));

       VARRAY数据在存储时与表中其它列一起存放在同一张表中,并不需要为其指定单独的存储表。

分享到:
评论

相关推荐

    pl/sql最新中文手册

    6. **复合类型**:PL/SQL支持数组、集合和记录等复合类型,这些使得处理复杂数据结构变得可能。手册会详细介绍这些类型的创建和使用。 7. **包(Packages)**:包是将相关的过程、函数和变量封装在一起的一种方式,...

    Oracle PL/SQL实战(待续)

    同时,PL/SQL支持多种数据类型,包括数值类型(NUMBER)、字符类型(VARCHAR2, CHAR)、日期类型(DATE)等,以及复合类型如记录(RECORD)和表类型(TABLE)。 此外,PL/SQL的包(PACKAGE)概念是将相关的过程和...

    Oracle PL/SQL实例编程(PL/SQL经典书籍)

    2. **变量和数据类型**:PL/SQL支持多种数据类型,包括数值型(NUMBER、BINARY_INTEGER、PLS_INTEGER)、字符型(VARCHAR2、CHAR)、日期型(DATE)、布尔型(BOOLEAN)以及复合数据类型如记录和数组。 3. **控制...

    Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发

    2. **复合数据类型**:介绍PL/TABLE、记录类型(%ROWTYPE)以及集合类型(VARRAY和NESTED TABLE),这些都是处理大量数据或构建复杂数据结构的关键工具。 3. **游标**:讲解如何使用显式和隐式游标进行查询和遍历...

    Oracle PL/SQL编程及最佳实践

    PL/SQL 也提供了复合类型,例如数组、记录等。这些类型可以由用户自定义,用于存储复杂的数据结构。 十二、批量绑定 批量绑定是 PL/SQL 中的一种机制,允许用户将多个值绑定到一个变量上。批量绑定可以提高程序的...

    pl/sql 学习资料

    - 数据类型:熟悉PL/SQL内置的数据类型,如NUMBER、VARCHAR2、DATE等。 - 变量和常量:声明和使用变量,以及定义常量。 - 控制流程语句:学习IF-THEN-ELSIF-ELSE、CASE、FOR循环、WHILE循环等。 - 函数和过程:...

    Oracle资料学习PL/SQL必备

    2. **数据类型**:PL/SQL支持多种数据类型,包括数值类型(如NUMBER)、字符串类型(如VARCHAR2、CHAR)、日期时间类型(如DATE)、布尔类型(BOOLEAN)以及复合数据类型(如记录和数组)。 3. **变量声明和赋值**...

    PL/SQL免安装版

    6. **变量和类型**:PL/SQL有丰富的内置数据类型,如NUMBER、VARCHAR2、DATE等,同时允许用户自定义复合类型,如记录和表类型。 7. **包(PACKAGE)**:包是将相关的过程、函数和类型组织在一起的命名空间,有助于...

    pl/sql精通

    2. 数据类型:PL/SQL支持多种数据类型,包括数值类型(如NUMBER、INTEGER)、字符类型(VARCHAR2、CHAR)、日期时间类型(DATE)、布尔类型(BOOLEAN)、以及复合和引用类型(如记录、表类型、指针等)。 3. 变量与...

    pl/sql使用软件

    此外,还可以定义对象类型和复合类型。 3. **流程控制**:包括条件语句(IF-THEN-ELSE, CASE)和循环(WHILE, FOR,LOOP),用于根据条件执行不同的代码段或重复执行某段代码。 4. **集合**:PL/SQL支持数组和记录...

    PL/SQL学习笔记

    在PL/SQL中,数据类型分为标量类型、复合类型、参考类型和LOB类型。标量类型包括数字类型、字符类型、日期类型和布尔类型等。复合类型包括记录类型和集合类型,其中集合类型又包括数组和表。参考类型是记录的引用,...

    ORACLE PL/SQL 程序设计(第五版)

    10. **游标变量和复合类型**:使用游标变量进行动态SQL操作,以及利用复合类型处理复杂的数据结构。 11. **包(PACKAGE)**:学习如何创建和使用包,它能封装相关的PROCEDURE、FUNCTION和变量,提高代码的组织性和...

    PL/SQL学习课件

    第七章“包”介绍了包的概念,它是组织PL/SQL程序单元的高级机制,可以封装相关的常量、变量、过程和函数,提供更好的代码管理和版本控制。 第八章“触发器”讲解了如何定义和使用触发器,这是一种在特定数据库事件...

    最容易上手的PL/SQL学习教程-有经过测试的丰富案例

    在§2.4中,我们学习了PL/SQL的变量类型,包括基本类型(如NUMBER、VARCHAR2等)、复合类型(如记录类型、数组类型)、%ROWTYPE(用于创建与表列结构对应的变量)以及LOB(Large Object)类型,后者用于存储大量非...

    oracle_oracle_oraclepl/sql_

    2. **变量和数据类型**:PL/SQL支持多种数据类型,包括数值型(如NUMBER)、字符型(VARCHAR2和CHAR)、日期型(DATE)、布尔型(BOOLEAN)以及复合和对象类型。 3. **流程控制**:PL/SQL提供了IF-THEN-ELSIF-ELSE...

    PL/SQL学习资料

    **变量和数据类型**:在PL/SQL中,我们有多种数据类型,包括数值型(NUMBER、BINARY_INTEGER、INTEGER)、字符型(VARCHAR2、CHAR)、日期型(DATE)、布尔型(BOOLEAN)等,以及PL/SQL特有的对象类型和复合类型。...

    PL/SQL学习教程,附笔记

    - **复合类型**:如数组、记录(%ROWTYPE),允许存储多个值或整个数据库行。 - **%ROWTYPE**:使用%ROWTYPE定义的变量会自动匹配对应表的列结构,方便地处理整行数据。 - **LOB类型**:包括BLOB(Binary Large ...

    Oracle PL/SQL programming(5th Edition)

    - **数据类型**:介绍了PL/SQL支持的各种数据类型,包括基本数据类型和复合数据类型等。 - **控制结构**:如循环、条件语句等。 - **异常处理**:如何处理程序运行时可能出现的各种异常情况。 2. **高级编程技术*...

    Oracle PL/SQL语言初级教程

    复合数据类型是PL/SQL的一大特色,包括记录(records)和集合(collections)。记录允许你组合不同类型的字段,而集合则可以存储一组相同类型的数据,如数组。它们提供了更灵活的数据处理方式。 函数在PL/SQL中扮演...

Global site tag (gtag.js) - Google Analytics