首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PL/SQL存储过程、游标、触发器、异常处理十大经典实战代码案例合集

PL/SQL存储过程、游标、触发器、异常处理十大经典实战代码案例合集

作者头像
风骏时光少年
发布2026-07-06 13:06:51
发布2026-07-06 13:06:51
70
举报

PL/SQL存储过程、游标、触发器、异常处理十大经典实战代码案例合集

简介

PL/SQL 是 Oracle 数据库核心程序化扩展语言,广泛用于企业数据业务逻辑封装、数据校验、自动化运维、事务管控等场景。本文整理10个高频、经典、可直接投产的 PL/SQL 实战案例,覆盖变量操作、条件循环、异常处理、游标、存储过程、函数、触发器、批量处理等核心知识点,所有代码可直接在 Oracle 环境编译运行,适配学习与生产落地需求。

案例1:基础变量赋值与输出

实现常规数据类型定义、赋值与控制台打印,是PL/SQL入门基础。

代码语言:javascript
复制
DECLARE
  v_name VARCHAR2(20) := '技术测试';
  v_num NUMBER(5) := 100;
BEGIN
  DBMS_OUTPUT.PUT_LINE('名称:' || v_name || ',数值:' || v_num);
END;
/

案例2:IF多条件分支判断

实现多条件逻辑筛选,常用于数据状态判断、业务规则校验。

代码语言:javascript
复制
DECLARE
  v_score NUMBER(3) := 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循环批量遍历

经典循环语句,适用于批量数据迭代、批量新增修改场景。

代码语言:javascript
复制
BEGIN
  FOR i IN 1..10 LOOP
    DBMS_OUTPUT.PUT_LINE('循环序号:' || i);
  END LOOP;
END;
/

案例4:基础异常捕获处理

规范异常捕获机制,避免程序报错中断,记录错误信息。

代码语言:javascript
复制
DECLARE
  v_res NUMBER;
BEGIN
  v_res := 10 / 0;
EXCEPTION
  WHEN ZERO_DIVIDE THEN
    DBMS_OUTPUT.PUT_LINE('报错:除数不能为0');
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('未知异常:' || SQLERRM);
END;
/

案例5:普通游标单行数据查询

通过游标读取表数据,实现精准数据查询与输出。

代码语言:javascript
复制
DECLARE
  CURSOR cur_user IS SELECT USERNAME FROM DUAL;
  v_uname VARCHAR2(30);
BEGIN
  OPEN cur_user;
  FETCH cur_user INTO v_uname;
  DBMS_OUTPUT.PUT_LINE('当前用户:' || v_uname);
  CLOSE cur_user;
END;
/

案例6:循环游标批量读取数据

遍历游标数据集,批量处理表中多条业务数据。

代码语言:javascript
复制
DECLARE
  CURSOR cur_tab IS SELECT TABLE_NAME FROM USER_TABLES WHERE ROWNUM <=5;
BEGIN
  FOR rec IN cur_tab LOOP
    DBMS_OUTPUT.PUT_LINE('用户数据表:' || rec.TABLE_NAME);
  END LOOP;
END;
/

案例7:自定义函数封装

创建查询字符串长度的自定义函数,实现代码复用。

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION fn_get_len(v_str VARCHAR2)
RETURN NUMBER
IS
BEGIN
  RETURN LENGTH(v_str);
END;
/
-- 调用函数
SELECT fn_get_len('风骏时光少年') FROM DUAL;

案例8:通用存储过程创建

封装查询当前系统时间的存储过程,适配业务批量调用。

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE pro_get_sys_time
IS
BEGIN
  DBMS_OUTPUT.PUT_LINE('系统当前时间:' || SYSDATE);
END;
/
-- 执行存储过程
EXEC pro_get_sys_time;

案例9:行级触发器实战

新建测试表并创建触发器,新增数据自动更新创建时间。

代码语言:javascript
复制
-- 创建测试表
CREATE TABLE test_info(id NUMBER,name VARCHAR2(50),create_time DATE);
-- 创建触发器
CREATE OR REPLACE TRIGGER tri_test_time
BEFORE INSERT ON test_info
FOR EACH ROW
BEGIN
  :NEW.create_time := SYSDATE;
END;
/
-- 测试插入
INSERT INTO test_info(id,name) VALUES(1,'测试数据');
COMMIT;

案例10:批量数据更新事务管控

结合循环、事务、异常处理,实现批量更新并支持回滚。

代码语言:javascript
复制
DECLARE
BEGIN
  FOR i IN 1..3 LOOP
    INSERT INTO test_info(id,name) VALUES(i+1,'批量数据'||i);
  END LOOP;
  COMMIT;
  DBMS_OUTPUT.PUT_LINE('批量新增成功');
EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;
    DBMS_OUTPUT.PUT_LINE('新增失败,事务已回滚:'||SQLERRM);
END;
/

总结

以上10个案例覆盖PL/SQL基础语法、流程控制、异常机制、游标、函数、存储过程、触发器、事务批量处理核心核心技能,贴合Oracle数据库日常开发、运维、数据治理实战场景,代码简洁规范、无冗余,可直接用于学习练习与生产轻量化业务开发,是入门与进阶PL/SQL的必备实操案例。

海量精选技术文档和实战案例持续更新,敬请关注【风骏时光少年】

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 风骏时光少年 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PL/SQL存储过程、游标、触发器、异常处理十大经典实战代码案例合集
    • 案例1:基础变量赋值与输出
    • 案例2:IF多条件分支判断
    • 案例3:FOR循环批量遍历
    • 案例4:基础异常捕获处理
    • 案例5:普通游标单行数据查询
    • 案例6:循环游标批量读取数据
    • 案例7:自定义函数封装
    • 案例8:通用存储过程创建
    • 案例9:行级触发器实战
    • 案例10:批量数据更新事务管控
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档