当前位置: 首页 > news >正文

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. 常用对象:存储过程、函数、游标、触发器
http://www.jsqmd.com/news/868467/

相关文章:

  • AI能力发布机制解析:什么是Gated Release与受限模型开放策略
  • GPT-4万亿参数仅激活2%?揭秘MoE稀疏激活的工程真相
  • Godot移动图标自动化生成:Adaptive Icon与多平台适配实战
  • 从Notebook到生产:机器学习模型服务化落地全链路实践
  • Unity历史版本下载全指南:构建可验证的确定性构建环境
  • Transformer核心机制深度解析:从公式到CUDA核的工程真相
  • NotebookLM视频转文字全流程拆解(从上传到结构化笔记的7步黄金链路)
  • DataStage数据抽取核心内容概述
  • 多智能体协作失败的根本原因:通信协议与意图错配
  • SQL Server报错注入原理与三大稳定Payload实战
  • Unity 2019粒子拖尾(Trails)五大生产级陷阱解析
  • DeepSeek LeetCode 2551. 将珠子放入背包中 Java实现
  • SQL Server报错注入原理与实战:从错误机制到WAF绕过
  • Chrome 148紧急安全更新深度解析:2个Critical RCE漏洞与企业级防护实战指南
  • Burp Suite三大核心模块:Decoder、Logger与Extensions深度实战
  • Vulnhub Momentum2靶机渗透全解析:从服务画像到逻辑链提权
  • AI学习的本质:构建可迁移、抗迭代的知识操作系统
  • JWT权限治理:从无状态凭证到可管控权限单元
  • 2026年热门的IP人设打造高性价比公司 - 品牌宣传支持者
  • MoE模型参数激活率真相:从1.8万亿到2%的工程解构
  • AI实践者简报:信息降噪与可执行技术指南
  • Keras Tuner超参数调优实战:告别Grid Search的效率黑洞
  • Momentum2靶机实战解析:从路径遍历到root权限的红队链路
  • AI学习不是学工具,而是重建问题定义与反馈闭环的能力
  • Java Web中基于JWT的七层权限控制系统设计
  • Keras Tuner超参优化实战:从Grid Search到贝叶斯调优的工程化升级
  • ARM硬件故障报告表单填写与技术支持指南
  • 2026年质量好的成都亮化照明控制器公司哪家好 - 行业平台推荐
  • 服务器GPU直通故障根因与五层协同调试指南
  • WinSCP 是什么