简介
PL/SQL 是 Oracle 数据库核心程序化扩展语言,广泛用于企业数据业务逻辑封装、数据校验、自动化运维、事务管控等场景。本文整理10个高频、经典、可直接投产的 PL/SQL 实战案例,覆盖变量操作、条件循环、异常处理、游标、存储过程、函数、触发器、批量处理等核心知识点,所有代码可直接在 Oracle 环境编译运行,适配学习与生产落地需求。
实现常规数据类型定义、赋值与控制台打印,是PL/SQL入门基础。
DECLARE
v_name VARCHAR2(20) := '技术测试';
v_num NUMBER(5) := 100;
BEGIN
DBMS_OUTPUT.PUT_LINE('名称:' || v_name || ',数值:' || v_num);
END;
/实现多条件逻辑筛选,常用于数据状态判断、业务规则校验。
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;
/经典循环语句,适用于批量数据迭代、批量新增修改场景。
BEGIN
FOR i IN 1..10 LOOP
DBMS_OUTPUT.PUT_LINE('循环序号:' || i);
END LOOP;
END;
/规范异常捕获机制,避免程序报错中断,记录错误信息。
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;
/通过游标读取表数据,实现精准数据查询与输出。
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;
/遍历游标数据集,批量处理表中多条业务数据。
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;
/创建查询字符串长度的自定义函数,实现代码复用。
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;封装查询当前系统时间的存储过程,适配业务批量调用。
CREATE OR REPLACE PROCEDURE pro_get_sys_time
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('系统当前时间:' || SYSDATE);
END;
/
-- 执行存储过程
EXEC pro_get_sys_time;新建测试表并创建触发器,新增数据自动更新创建时间。
-- 创建测试表
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;结合循环、事务、异常处理,实现批量更新并支持回滚。
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的必备实操案例。
海量精选技术文档和实战案例持续更新,敬请关注【风骏时光少年】