《PL/SQL笔记》是一份针对数据库开发人员整理的学习资料,涵盖了PL/SQL编程的基础知识、高级特性和最佳实践,旨在帮助读者提升Oracle数据库应用程序开发能力。
### PLSQL基础知识详解
#### 一、PLSQL简介及基本操作
##### 1. PLSQL概述
PLSQL (Procedural Language for SQL) 是 Oracle 数据库的一种过程化语言,它结合了 SQL 的数据操作能力和传统编程语言的过程控制能力。PLSQL 允许开发者在数据库内编写复杂的业务逻辑,提高数据处理效率和安全性。
##### 2. PLSQL 块的组成
PLSQL 块主要由以下三部分组成:
- **声明部分(DECLARE)**:用于声明变量、常量、游标等。
- **执行部分(BEGIN…END)**:包含具体的执行逻辑,如流程控制语句、SQL 语句等。
- **异常处理部分(EXCEPTION)**:处理执行过程中可能发生的错误。
##### 3. PLSQL 块中支持的语句类型
PLSQL 块支持以下类型的语句:
- **SELECT**:用于检索数据。
- **DML**(Data Manipulation Language):包括 INSERT、UPDATE 和 DELETE 语句。
- **事务控制语句**:如 COMMIT、ROLLBACK 和 SAVEPOINT。
- 不支持的语句类型为 DDL(Data Definition Language),例如 CREATE, ALTER 和 DROP;以及 DCL(Data Control Language),例如 GRANT 和 REVOKE。
#### 二、数据检索与处理
##### 检索单行数据
在 PLSQL 中检索单行数据通常采用 SELECT INTO 语句。
###### 使用标量变量接收数据
```sql
DECLARE
v_ename EMP.ENAME%TYPE;
v_sal EMP.SAL%TYPE;
BEGIN
SELECT ENAME, SAL INTO v_ename, v_sal FROM EMP WHERE EMPNO = &no;
END;
```
这里 `%TYPE` 是 PLSQL 中的一个特性,确保变量的数据类型与表中的列类型一致。
###### 使用记录变量接收数据
使用记录变量可以方便地处理多个字段。
```sql
DECLARE
TYPE emp_record_type IS RECORD (
ename EMP.ENAME%TYPE,
sal EMP.SAL%TYPE
);
emp_record emp_record_type;
BEGIN
SELECT ENAME, SAL INTO emp_record FROM EMP WHERE EMPNO = &no;
END;
```
##### 嵌入 SELECT 语句注意事项
- **返回数据要求**:SELECT INTO 必须且只能返回一行数据。
- **异常处理**
- `NO_DATA_FOUND`:当没有数据返回时触发。
- `TOO_MANY_ROWS`:当返回多于一行数据时触发。
- **WHERE 子句注意事项**:需确保查询条件能够准确地匹配单行记录,避免因不合理的 WHERE 条件导致的错误。
#### 三、事务控制语句
##### 4.1 事务控制语句概述
事务控制语句用于管理数据库操作中的一致性和完整性。包括:
- **COMMIT**:提交当前事务的所有更改。
- **ROLLBACK**:撤销当前事务的所有更改。
- **SAVEPOINT**:设置事务内的保存点,可用于部分回滚。
这些语句帮助确保数据的完整性和一致性,并且提供了对复杂数据库操作的有效管理工具。
通过以上的详细介绍,我们了解到 PLSQL 不仅支持基本的 SQL 操作,还提供了一系列高级功能,如游标、异常处理和事务控制,使得开发者能够在数据库层面实现复杂的业务逻辑。