PL/SQL数据类型主要包括标量数据类型和复合数据类型。
标量数据类型比较简单,不在详细说明。
复合数据类型主要包括PL/SQL记录、PL/SQL表(索引表)、嵌套表和变长数组(VARRAY)。下边详细描述。
- 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;
分享到:
相关推荐
6. **复合类型**:PL/SQL支持数组、集合和记录等复合类型,这些使得处理复杂数据结构变得可能。手册会详细介绍这些类型的创建和使用。 7. **包(Packages)**:包是将相关的过程、函数和变量封装在一起的一种方式,...
- **变量和常量**:PL/SQL支持各种数据类型,如NUMBER、VARCHAR2、DATE等,以及声明变量和常量的方式。 - **流程控制**:包括IF...ELSIF...ELSE、CASE、FOR循环、WHILE循环等结构。 2. **PL/SQL程序单元** - **...
2. **数据处理**:通过PL/SQL,用户可以直接对数据库表进行增删改查操作,使用SELECT、INSERT、UPDATE、DELETE等SQL语句。 3. **游标**:PL/SQL支持游标,允许用户逐行处理查询结果,这对于处理大量数据时非常有用...
同时,PL/SQL支持多种数据类型,包括数值类型(NUMBER)、字符类型(VARCHAR2, CHAR)、日期类型(DATE)等,以及复合类型如记录(RECORD)和表类型(TABLE)。 此外,PL/SQL的包(PACKAGE)概念是将相关的过程和...
2. **数据类型**:PL/SQL支持多种数据类型,包括数值类型(如NUMBER)、字符串类型(如VARCHAR2、CHAR)、日期时间类型(如DATE)、布尔类型(BOOLEAN)以及复合数据类型(如记录和数组)。 3. **变量声明和赋值**...
PL/SQL变量的声明和使用是编程的基础,涉及到变量的声明、初始化、数据类型、%type属性等。变量的赋值和使用也是需要掌握的内容。 此外,书中还涉及到了ORACLE数据库的安装、存储过程的编写、序列操作、数据类型...
2. **变量和数据类型**:PL/SQL支持多种数据类型,包括数值型(NUMBER、BINARY_INTEGER、PLS_INTEGER)、字符型(VARCHAR2、CHAR)、日期型(DATE)、布尔型(BOOLEAN)以及复合数据类型如记录和数组。 3. **控制...
此外,PL/SQL还支持集合类型,如VARRAY(可变数组)和TABLE(表类型),这对于处理大量数据非常有用。 这本书的配套源代码可能会涵盖以下几个方面: 1. **基础操作**:包括简单的SQL查询、变量声明、流程控制...
- **新特性概述**:介绍Oracle 11g中引入的与PL/SQL相关的新增功能,例如新的数据类型、函数、性能优化技术等。 - **性能提升技术**:提供了一些具体的例子和最佳实践,展示了如何利用Oracle 11g的新特性来进一步...
PL/SQL程序通常由以下三个部分组成: - **声明部分**:用于声明变量、游标、局部存储过程和函数等。 - **执行部分**:包含了过程化的控制语句和SQL语句,是程序的核心部分。 - **异常处理部分**:用于处理程序执行...
PL/SQL 是一种块结构的语言,组成 PL/SQL 程序的单元是逻辑块,一个 PL/SQL 程序包含了一个或多个逻辑块,每个块都可以划分为三个部分: * 声明部分(Declaration section):包含了变量和常量的数据类型和初始值。...
1. **基础语法**:理解PL/SQL的基本数据类型、变量声明、流程控制结构等。 2. **函数和过程**:掌握如何定义和调用自定义函数和过程。 3. **游标**:了解如何使用游标处理结果集。 4. **异常处理**:学习如何编写...
PL/SQL结合了数据处理能力的SQL与传统编程语言的控制结构和数据类型,让程序员能够编写复杂的数据库操作逻辑。 从部分内容中,我们可以提取以下与PL/SQL相关的知识点: 1. Oracle SQL Developer是Oracle提供的一个...
7. **记录类型和变量**:PL/SQL支持自定义记录类型和变量,使得可以创建更贴近业务需求的数据结构。 这个"PL/SQL安装包"可能包含了以下组件: - **PL/SQL Developer**:一个强大的Oracle数据库开发工具,支持PL/...
2. **变量与数据类型**:PL/SQL支持多种内置数据类型,如NUMBER、VARCHAR2、DATE等。理解如何声明和使用这些数据类型是编写有效PL/SQL程序的基础。 3. **控制结构**:学习如何使用流程控制语句,如IF、CASE、WHILE...
2. **复合数据类型**:介绍PL/TABLE、记录类型(%ROWTYPE)以及集合类型(VARRAY和NESTED TABLE),这些都是处理大量数据或构建复杂数据结构的关键工具。 3. **游标**:讲解如何使用显式和隐式游标进行查询和遍历...
1. **PL/SQL基础**:PL/SQL的基础语法,如变量声明、数据类型、流程控制语句(如IF-THEN-ELSIF,FOR循环,WHILE循环)、异常处理(BEGIN-EXCEPTION-END结构)等。 2. **函数与过程**:如何定义和调用用户自定义的...
2. **PL/SQL数据类型**:详细讲解PL/SQL支持的数据类型,如数值型、字符型、日期时间型、布尔型、记录类型、游标类型等,以及如何进行数据转换和操作。 3. **PL/SQL控制结构**:深入探讨流程控制语句,如循环...
- 数据类型:熟悉PL/SQL内置的数据类型,如NUMBER、VARCHAR2、DATE等。 - 变量和常量:声明和使用变量,以及定义常量。 - 控制流程语句:学习IF-THEN-ELSIF-ELSE、CASE、FOR循环、WHILE循环等。 - 函数和过程:...