`
jguangyou
  • 浏览: 378067 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PL/SQL数据类型(三)

阅读更多

 PL/SQL数据类型主要包括标量数据类型和复合数据类型。

标量数据类型比较简单,不在详细说明。

复合数据类型主要包括PL/SQL记录、PL/SQL表(索引表)、嵌套表和变长数组(VARRAY)。下边详细描述。

  1. PL/SQL记录:PL/SQL记录类似于高级语言中的结构,可以存储多个字段值,类似于表中的一行数据。当使用记录变量时,必须先定义记录的结构,然后定义记录类型的变量。定义记录结构的语法:

          TYPE type_name IS RECORD(

                  field_name data_type[[NOT NULL]{:=DEFAULT} value]

                  [, ...]

           );

          示例:自定义PL/SQL记录

DECLARE
     TYPE emp_type IS RECORD(
             empno NUMBER(4),
             ename VARCHAR2(10),
             sal NUMBER(7,2)
     );
     one_emp emp_type;
BEGIN
      SELECT empno,ename,sal INTO one_emp 
      FROM scott.emp where empno=7900;
      DBMS_OUTPUT.PUT_LINE('员工编号为:'||one_emp.empno);
      DBMS_OUTPUT.PUT_LINE('员工姓名为:'||one_emp.ename);
      DBMS_OUTPUT.PUT_LINE('员工工资为:'||one_emp.sal);
END;

    PL/SQL记录的使用方法:在ORACLE9i以前,如果在内嵌sql语句中使用PL/SQL记录变量,那么只有SELECT INTO语句可以直接引用记录变量,而INSERT,UPDATE和DELETE语句则只能引用记录成员。不能直接引用记录变量。从9i开始,不仅可以在select中直接使用记录变量,也可以在INSERT和UPDATE语句中直接引用记录变量。

    (1)在SELECT INTO 中使用PL/SQL记录。既可以使用记录变量,也可以使用记录变量成员。

         示例一:使用记录变量

DECLARE
    TYPE emp_record_type IS RECORD(
            name scott.emp.ename%TYPE,
            sal scott.emp.sal%TYPE,
            dno scott.emp.deptno%TYPE
     );
     emp_record emp_record_type;
BEGIN 
     SELECT ename,sal,deptno INTO emp_record 
     FROM scott.emp WHERE empno=7900;
     DBMS_OUTPUT.PUT_LINE(emp_record.name);
     DBMS_OUTPUT.PUT_LINE(emp_record.sal);
     DBMS_OUTPUT.PUT_LINE(emp_record.dno);
END;

         示例二:使用记录成员变量

DECLARE
    TYPE emp_record_type IS RECORD(
            name scott.emp.ename%TYPE,
            sal scott.emp.sal%TYPE,
            dno scott.emp.deptno%TYPE
     );
     emp_record emp_record_type;
BEGIN 
     SELECT ename,sal,deptno INTO
     emp_record.name,emp_record.sal,emp_record.dno 
     FROM scott.emp WHERE empno=7900;
     DBMS_OUTPUT.PUT_LINE(emp_record.name);
     DBMS_OUTPUT.PUT_LINE(emp_record.sal);
     DBMS_OUTPUT.PUT_LINE(emp_record.dno);
END;

 

       (2)在INSERT 语句中使用PL/SQL记录

          示例一:在VALUES子句中使用记录变量

      

DECLARE
     dept_record scott.dept%ROWTYPE;
BEGIN
     dept_record.deptno:=50;
     dept_record.dname:='adninistrator';
     dept_record.loc:='BJ';
     INSERT INTO scott.dept VALUES dept_record;
END;

 

        示例二:在VALUES子句中使用记录成员

DECLARE
     dept_record scott.dept%ROWTYPE;
BEGIN
     dept_record.deptno:=51;
     dept_record.dname:='sales';
     dept_record.loc:='BJ';
     INSERT INTO scott.dept 
     VALUES
     (dept_record.deptno,dept_record.dname, dept_record.loc);
END;

 

    2.   PL/SQL表(索引表):PL/SQL表也称索引表,用于处理PL/SQL数组的数据类型。但是索引表与高级语言的数组是有区别的:高级语言数组的元素个数是有限制的,并且下标不能为负值;而索引表的元素个数没有限制,并且下标可以为负值。定义索引表的语法:

     TYPE type_name IS TABLE OF element_type

     [NOT NULL] INDEX BY key_type;

     identifier type_name;

    其中索引表下标不仅可以使用BINARY_INTEGER和PLS_INTEGER,而且可以使用VARCHAR2。

    示例一:在索引表中使用BINARY_INTEGER和PLS_INTEGER

DECLARE 
     TYPE ename_table_type IS TABLE OF scott.emp.ename%TYPE
     INDEX BY BINARY_INTEGER;
     ename_table ename_table_type;
BEGIN
     SELECT ename INTO ename_table(-1) FROM scott.emp
     WHERE empno=7900;
     DBMS_OUTPUT.PUT_LINE(ename_table(-1));
END;

  3.  嵌套表:也是一种用于处理PL/SQL数组的数据类型。同样嵌套表和高级语言的数组也是有区别的:高级语言数组的元素下标从0或者1开始,并且元素个数是有限制的;而嵌套表的元素下标从1开始,并且元素个数没有限制;另外,高级语言的数组元素是有顺序的,而嵌套表中的数组元素可以是无序的。索引包类型不能作为表列的数组类型使用,但是嵌套表类型是可以作为表列的数组类型使用的。当使用嵌套表之前,必须首先使用起构造方法初始化嵌套表。定义嵌套表的语法格式:

     TYPE type_name IS TABLE OF element_type;

     identifier type_name;

示例一;在PL/SQL块中使用嵌套表

DECLARE
       TYPE ename_table_type IS TABLE OF scott.emp.ename%TYPE;
       ename_table ename_table_type;
BEGIN
       ename_table:=ename_table_type('mary','lili','tomm');
       SELECT ename INTO ename_table(2) FROM scott.emp
       WHERE empno=7900;
       dbms_output.put_line(ename_table(2));
END;

 4.  变长数组(VARRAY):也是一种用于处理PL/SQL数组的数据类型,它也可以作为表列的数据类型使用。该数据类型与高级语言数组非常相似,起元素下标从1开始,并且元素的最大个数是又限制的。定义语法:

   TYPE type_name IS VARRAY(size) OF element_type [NOT NULL];

   identifier type_name;

5.  PL/SQL记录表:PL/SQL变量用于处理单行单列数据,PL/SQL记录用于处理单行多列数据,PL/SQL集合用户处理多行多列数据。为了在PL/SQL块中处理多行多列数据,我们可以使用记录表。PL/SQL记录表结合了PL/SQL记录和PL/SQL集合的优点,从而可以有效处理多行多列的数据。

    示例:

DECLARE 
     TYPE emp_table_type IS TABLE OF scott.emp%ROWTYPE
      INDEX BY BINARY_INTEGER;
      emp_table emp_table_type;
BEGIN
      SELECT * INTO emp_table(1) FROM scott.emp
      WHERE empno=7900;
      dbms_output.put_line(emp_table(1).ename);
END;
分享到:
评论

相关推荐

    pl/sql最新中文手册

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

    oracle10g_pl/sql

    - **变量和常量**:PL/SQL支持各种数据类型,如NUMBER、VARCHAR2、DATE等,以及声明变量和常量的方式。 - **流程控制**:包括IF...ELSIF...ELSE、CASE、FOR循环、WHILE循环等结构。 2. **PL/SQL程序单元** - **...

    一个对数据库的操作工具PL/SQLpl/sqL工具

    2. **数据处理**:通过PL/SQL,用户可以直接对数据库表进行增删改查操作,使用SELECT、INSERT、UPDATE、DELETE等SQL语句。 3. **游标**:PL/SQL支持游标,允许用户逐行处理查询结果,这对于处理大量数据时非常有用...

    Oracle PL/SQL实战(待续)

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

    Oracle资料学习PL/SQL必备

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

    ORACLE PL/SQL从入门到精通

    PL/SQL变量的声明和使用是编程的基础,涉及到变量的声明、初始化、数据类型、%type属性等。变量的赋值和使用也是需要掌握的内容。 此外,书中还涉及到了ORACLE数据库的安装、存储过程的编写、序列操作、数据类型...

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

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

    oracle pl/sql从入门到精通 配套源代码

    此外,PL/SQL还支持集合类型,如VARRAY(可变数组)和TABLE(表类型),这对于处理大量数据非常有用。 这本书的配套源代码可能会涵盖以下几个方面: 1. **基础操作**:包括简单的SQL查询、变量声明、流程控制...

    Oracle PL/SQL程序设计(第5版)(上下册)

    - **新特性概述**:介绍Oracle 11g中引入的与PL/SQL相关的新增功能,例如新的数据类型、函数、性能优化技术等。 - **性能提升技术**:提供了一些具体的例子和最佳实践,展示了如何利用Oracle 11g的新特性来进一步...

    PL/SQL编程基础知识

    PL/SQL程序通常由以下三个部分组成: - **声明部分**:用于声明变量、游标、局部存储过程和函数等。 - **执行部分**:包含了过程化的控制语句和SQL语句,是程序的核心部分。 - **异常处理部分**:用于处理程序执行...

    PL/SQL doc 文件

    PL/SQL 是一种块结构的语言,组成 PL/SQL 程序的单元是逻辑块,一个 PL/SQL 程序包含了一个或多个逻辑块,每个块都可以划分为三个部分: * 声明部分(Declaration section):包含了变量和常量的数据类型和初始值。...

    PL/SQL下载

    1. **基础语法**:理解PL/SQL的基本数据类型、变量声明、流程控制结构等。 2. **函数和过程**:掌握如何定义和调用自定义函数和过程。 3. **游标**:了解如何使用游标处理结果集。 4. **异常处理**:学习如何编写...

    PL/SQL开发文档1

    PL/SQL结合了数据处理能力的SQL与传统编程语言的控制结构和数据类型,让程序员能够编写复杂的数据库操作逻辑。 从部分内容中,我们可以提取以下与PL/SQL相关的知识点: 1. Oracle SQL Developer是Oracle提供的一个...

    PL/SQL安装包

    7. **记录类型和变量**:PL/SQL支持自定义记录类型和变量,使得可以创建更贴近业务需求的数据结构。 这个"PL/SQL安装包"可能包含了以下组件: - **PL/SQL Developer**:一个强大的Oracle数据库开发工具,支持PL/...

    PL/SQL入门到精通书的源代码

    2. **变量与数据类型**:PL/SQL支持多种内置数据类型,如NUMBER、VARCHAR2、DATE等。理解如何声明和使用这些数据类型是编写有效PL/SQL程序的基础。 3. **控制结构**:学习如何使用流程控制语句,如IF、CASE、WHILE...

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

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

    Oracle Database 12c PL/SQL开发指南 实例源代码

    1. **PL/SQL基础**:PL/SQL的基础语法,如变量声明、数据类型、流程控制语句(如IF-THEN-ELSIF,FOR循环,WHILE循环)、异常处理(BEGIN-EXCEPTION-END结构)等。 2. **函数与过程**:如何定义和调用用户自定义的...

    精通pl/sql

    2. **PL/SQL数据类型**:详细讲解PL/SQL支持的数据类型,如数值型、字符型、日期时间型、布尔型、记录类型、游标类型等,以及如何进行数据转换和操作。 3. **PL/SQL控制结构**:深入探讨流程控制语句,如循环...

    pl/sql 学习资料

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

Global site tag (gtag.js) - Google Analytics