PL/SQL 入门指南

PL/SQL(Procedural Language/SQL)是Oracle 数据库专用的过程化扩展 SQL 语言,在标准 SQL 基础上增加了变量、循环、判断、异常处理、函数、存储过程等编程功能,专门用来在 Oracle 中编写高效、安全的业务逻辑。

简单说:SQL 只能做查询 / 增删改,PL/SQL 能写完整的程序逻辑


一、核心特点

  1. Oracle 专属:只能在 Oracle 数据库中使用
  2. 过程化编程:支持 IF/ELSELOOPFOR 等逻辑控制
  3. 批量处理:比逐条执行 SQL 快很多,减少数据库交互
  4. 模块化:可封装成存储过程、函数、触发器、包
  5. 异常安全:自带异常处理,避免程序崩溃

二、基础语法结构(最经典模板)

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 的工具)


总结

  1. PL/SQL = SQL + 过程化编程,Oracle 专属
  2. 结构:DECLAREBEGINEXCEPTIONEND
  3. 核心用途:批量处理、封装业务逻辑、提高性能
  4. 常用对象:存储过程、函数、游标、触发器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lifewange

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值