PL/SQLProcedural Language/SQL是Oracle 数据库专用的过程化扩展 SQL 语言在标准 SQL 基础上增加了变量、循环、判断、异常处理、函数、存储过程等编程功能专门用来在 Oracle 中编写高效、安全的业务逻辑。简单说SQL 只能做查询 / 增删改PL/SQL 能写完整的程序逻辑。一、核心特点Oracle 专属只能在 Oracle 数据库中使用过程化编程支持IF/ELSE、LOOP、FOR等逻辑控制批量处理比逐条执行 SQL 快很多减少数据库交互模块化可封装成存储过程、函数、触发器、包异常安全自带异常处理避免程序崩溃二、基础语法结构最经典模板PL/SQL 程序固定分为 3 部分plsqlDECLARE -- 声明区定义变量、常量、游标 v_name VARCHAR2(50); BEGIN -- 执行区写业务逻辑、SQL语句 SELECT username INTO v_name FROM user_users WHERE ROWNUM1; 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. 变量定义plsqlDECLARE 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-ELSEplsqlDECLARE 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 循环plsqlBEGIN FOR i IN 1..5 LOOP DBMS_OUTPUT.PUT_LINE(循环次数 || i); END LOOP; END; /WHILE 循环plsqlDECLARE i NUMBER : 1; BEGIN WHILE i 3 LOOP DBMS_OUTPUT.PUT_LINE(i || i); i : i 1; END LOOP; END; /4. 游标Cursor查询多行数据plsqlDECLARE -- 定义游标 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封装可重复执行的逻辑无返回值plsqlCREATE OR REPLACE PROCEDURE p_hello IS BEGIN DBMS_OUTPUT.PUT_LINE(Hello PL/SQL!); END; / -- 调用 BEGIN p_hello(); END; /2. 函数Function有返回值常用于计算plsqlCREATE 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核心用途批量处理、封装业务逻辑、提高性能常用对象存储过程、函数、游标、触发器