PL/SQL 入门指南
PL/SQL(Procedural Language/SQL)是Oracle 数据库专用的过程化扩展 SQL 语言,在标准 SQL 基础上增加了变量、循环、判断、异常处理、函数、存储过程等编程功能,专门用来在 Oracle 中编写高效、安全的业务逻辑。
简单说:SQL 只能做查询 / 增删改,PL/SQL 能写完整的程序逻辑。
一、核心特点
- Oracle 专属:只能在 Oracle 数据库中使用
- 过程化编程:支持
IF/ELSE、LOOP、FOR等逻辑控制 - 批量处理:比逐条执行 SQL 快很多,减少数据库交互
- 模块化:可封装成存储过程、函数、触发器、包
- 异常安全:自带异常处理,避免程序崩溃
二、基础语法结构(最经典模板)
PL/SQL 程序固定分为 3 部分:
plsql
DECLARE -- 声明区:定义变量、常量、游标 v_name VARCHAR2(50); BEGIN -- 执行区:写业务逻辑、SQL语句 SELECT username INTO v_name FROM user_users WHERE ROWNUM=1; DBMS_OUTPUT.PUT_LINE('当前用户:' || v_name); EXCEPTION -- 异常处理区 WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('未找到数据'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('其他错误:' || SQLERRM); END; /三、常用基础语法
1. 变量定义
plsql
DECLARE v_age NUMBER(3) := 20; -- 数字类型 v_name VARCHAR2(50) := '张三'; -- 字符串 v_birth DATE := SYSDATE; -- 日期 BEGIN DBMS_OUTPUT.PUT_LINE(v_name || ',年龄:' || v_age); END; /2. 判断语句(IF-ELSIF-ELSE)
plsql
DECLARE v_score NUMBER := 85; BEGIN IF v_score >= 90 THEN DBMS_OUTPUT.PUT_LINE('优秀'); ELSIF v_score >= 60 THEN DBMS_OUTPUT.PUT_LINE('及格'); ELSE DBMS_OUTPUT.PUT_LINE('不及格'); END IF; END; /3. 循环语句
FOR 循环
plsql
BEGIN FOR i IN 1..5 LOOP DBMS_OUTPUT.PUT_LINE('循环次数:' || i); END LOOP; END; /WHILE 循环
plsql
DECLARE i NUMBER := 1; BEGIN WHILE i <= 3 LOOP DBMS_OUTPUT.PUT_LINE('i=' || i); i := i + 1; END LOOP; END; /4. 游标(Cursor):查询多行数据
plsql
DECLARE -- 定义游标 CURSOR c_user IS SELECT username, user_id FROM all_users WHERE ROWNUM <= 3; v_name VARCHAR2(50); v_id NUMBER; BEGIN OPEN c_user; LOOP FETCH c_user INTO v_name, v_id; EXIT WHEN c_user%NOTFOUND; -- 没有数据退出 DBMS_OUTPUT.PUT_LINE('ID:' || v_id || ',名称:' || v_name); END LOOP; CLOSE c_user; END; /四、最常用的 PL/SQL 对象
1. 存储过程(Procedure)
封装可重复执行的逻辑,无返回值:
plsql
CREATE OR REPLACE PROCEDURE p_hello IS BEGIN DBMS_OUTPUT.PUT_LINE('Hello PL/SQL!'); END; / -- 调用 BEGIN p_hello(); END; /2. 函数(Function)
有返回值,常用于计算:
plsql
CREATE OR REPLACE FUNCTION f_add(a NUMBER, b NUMBER) RETURN NUMBER IS BEGIN RETURN a + b; END; / -- 调用 SELECT f_add(10, 20) FROM dual;3. 触发器(Trigger)
表数据变化时自动执行(增删改触发)。
五、开发工具
最常用:PL/SQL Developer(专门写 Oracle PL/SQL 的工具)
总结
- PL/SQL =SQL + 过程化编程,Oracle 专属
- 结构:
DECLARE→BEGIN→EXCEPTION→END - 核心用途:批量处理、封装业务逻辑、提高性能
- 常用对象:存储过程、函数、游标、触发器
