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

(课堂笔记)PL/SQL 循环 自定义函数 存储过程

本文系统梳理了PL/SQL三大核心内容循环结构包括FOR循环固定次数、WHILE循环条件判断及BREAK/CONTINUE控制语句自定义函数强调必须返回值的特性演示了数值计算和业务查询两种应用场景存储过程侧重数据处理流程封装对比了与函数的关键差异无返回值、不可SQL调用。特别指出存储过程中IS/AS关键字不可省略的语法要求并提供了典型练习案例质数判断、字符串处理等。适用于数据库开发人员快速掌握PL/SQL编程要点。PL/SQL 循环、函数、存储过程的核心知识点 一、循环结构1. FOR 循环最常用sqlFOR I IN 起始值..结束值 LOOP 循环体 END LOOP;I自动从起始值递增到结束值步长为 1适合已知循环次数的场景for 循环的步长固定为1不能更改。在 PL/SQL 的 FOR 循环中起始值..结束值是一个闭区间循环变量I会从起始值一直遍历到结束值包括结束值本身。示例判断质数sqlDECLARE X NUMBER : 请输入数值; V_FLAG NUMBER : 0; BEGIN FOR I IN 2..X-1 LOOP IF MOD(X, I) 0 THEN V_FLAG : 1; END IF; END LOOP; ... END;示例99 乘法表sqlDECLARE V_STR VARCHAR2(100); BEGIN FOR I IN 1..9 LOOP V_STR : ; FOR J IN 1..I LOOP V_STR : V_STR || I || * || J || || I*J || ; END LOOP; DBMS_OUTPUT.PUT_LINE(V_STR); END LOOP; END;2. WHILE 循环sqlWHILE 条件 LOOP 循环体 变量自增/自减 END LOOP;适合未知循环次数但知道结束条件的场景示例输出 1~100 奇数sqlDECLARE V_NUM NUMBER : 1; BEGIN WHILE V_NUM 100 LOOP IF MOD(V_NUM,2) 1 THEN DBMS_OUTPUT.PUT_LINE(V_NUM); END IF; V_NUM : V_NUM 1; END LOOP; END;3. 循环控制语句重要关键字作用说明BREAK终止当前循环循环外代码继续执行CONTINUE跳过本次循环剩余代码进入下一次循环RETURN直接结束整个程序循环外代码也不执行 二、自定义函数FUNCTION语法结构sqlCREATE OR REPLACE FUNCTION 函数名(入参名 参数类型) RETURN 返回值类型 IS 变量声明 BEGIN 逻辑体 RETURN 结果 END;特点必须有返回值入参和返回值类型不能定义长度适合封装常用计算逻辑示例模拟 ABS 函数sqlCREATE OR REPLACE FUNCTION ABS_BAK(P_NUM NUMBER) RETURN NUMBER IS BEGIN RETURN REPLACE(P_NUM, -); END;示例根据员工编号返回姓名带错误处理sqlCREATE OR REPLACE FUNCTION F_NAME(P_EMPNO NUMBER) RETURN VARCHAR2 IS V_ENAME VARCHAR2(100); V_CNT NUMBER; BEGIN SELECT COUNT(1) INTO V_CNT FROM EMP WHERE EMPNO P_EMPNO; IF V_CNT 0 THEN RETURN 该员工不存在; ELSE SELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO P_EMPNO; RETURN V_ENAME; END IF; END; 三、存储过程PROCEDURE语法结构sqlCREATE OR REPLACE PROCEDURE 过程名(入参名 参数类型) IS 变量声明 BEGIN -- 数据同步、清洗、处理流程 END;特点没有返回值适合封装数据处理流程如 ETL示例同步部门最高薪资sqlCREATE OR REPLACE PROCEDURE P_001 IS BEGIN DELETE FROM H_SAL_EMP; INSERT INTO H_SAL_EMP SELECT DEPTNO, MAX(SAL) FROM EMP GROUP BY DEPTNO; COMMIT; END;调用方式sqlBEGIN P_001; END;示例带参数的过程sqlCREATE OR REPLACE PROCEDURE P_002(C_JOB VARCHAR2) IS BEGIN DELETE FROM EMP_J WHERE JOB C_JOB; INSERT INTO EMP_J SELECT * FROM EMP WHERE JOB C_JOB; COMMIT; END; 四、函数 vs 存储过程面试/考试重点对比项函数FUNCTION存储过程PROCEDURE返回值必须有没有语法关键字FUNCTIONPROCEDURE使用场景计算并返回一个值封装数据同步、处理流程能否在 SQL 中直接调用✅ 可以如SELECT 函数名()❌ 不可以是否必须有RETURN✅ 是❌ 否Oracle 存储过程 procedure 不允许使用 return 语句✅ 典型练习题建议手动敲一遍1. 循环练习使用 FOR / WHILE 计算 1~200 之间所有偶数的和打印 1~X 之间所有的质数2. 函数练习sql-- 实现 ELIM 函数删除字符串中第一次出现的指定字符 -- 示例ELIM(A-B-C, -) → AB-C3. 存储过程练习sql-- 创建表 T_NUMBER(ID NUMBER) -- 创建过程 P_004(X)将比 X 小的所有奇数插入 T_NUMBERcreate TABLE T_NUMBER( ID NUMBER ); commit; CREATE OR REPLACE PROCEDURE p_004(x NUMBER) IS BEGIN -- 清空表格 DELETE FROM T_NUMBER; COMMIT; -- 或者使用 TRUNCATE更高效但无法回滚 -- EXECUTE IMMEDIATE TRUNCATE TABLE T_NUMBER; for i in 1..x-1 loop if mod(i,2)1 then INSERT INTO T_NUMBER(ID) VALUES (i); end if; end loop; COMMIT; END; -- 调用存储过程 BEGIN p_004(100); END; select * from T_NUMBER;补充IS可以省略不写吗在 Oracle 存储过程中IS或AS是必须的不能省略。存储过程的基本语法结构sqlCREATE OR REPLACE PROCEDURE 过程名(参数) IS -- 或 AS必须存在不能省略 BEGIN -- 过程体 END; /IS 和 AS 的区别在存储过程中IS和AS完全等价可以互换使用sql-- 使用 IS CREATE OR REPLACE PROCEDURE p_004(x NUMBER) IS BEGIN -- 逻辑 END; -- 使用 AS同样正确 CREATE OR REPLACE PROCEDURE p_004(x NUMBER) AS BEGIN -- 逻辑 END;为什么不能省略IS/AS的作用是标记声明部分的开始用于声明变量、游标等分隔过程头部和主体语法规定的必需关键字sql-- 错误示范缺少 IS/AS CREATE OR REPLACE PROCEDURE p_004(x NUMBER) -- 编译错误 BEGIN NULL; END;对比其他数据库数据库语法IS/AS 是否必需OracleIS或AS必需SQL ServerAS必需PostgreSQLAS必需但写法不同MySQL不需要不需要总结在 Oracle 中创建存储过程IS或AS是必需的关键字不能省略。如果没有任何变量声明可以在IS后直接写BEGIN。

相关文章:

(课堂笔记)PL/SQL 循环 自定义函数 存储过程

本文系统梳理了PL/SQL三大核心内容: 循环结构:包括FOR循环(固定次数)、WHILE循环(条件判断)及BREAK/CONTINUE控制语句;自定义函数:强调必须返回值的特性,演示了数值计算和…...

联邦学习如何重塑社交网络?一篇讲透原理、应用与未来

联邦学习如何重塑社交网络?一篇讲透原理、应用与未来 引言 在数据成为核心生产要素的时代,社交网络平台沉淀了海量的用户关系与行为数据,其价值挖掘与隐私保护之间的矛盾日益尖锐。联邦学习(Federated Learning)作为…...

Showdown.js 实战指南:掌握双向 Markdown 转换的 5 大核心技巧

Showdown.js 实战指南:掌握双向 Markdown 转换的 5 大核心技巧 【免费下载链接】showdown A bidirectional Markdown to HTML to Markdown converter written in Javascript 项目地址: https://gitcode.com/gh_mirrors/sh/showdown Showdown.js 是一款强大的…...

ChanlunX缠论插件终极指南:3步实现自动化技术分析,告别手动画线困扰

ChanlunX缠论插件终极指南:3步实现自动化技术分析,告别手动画线困扰 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 还在为复杂的缠论分析而头疼吗?ChanlunX缠论插件是…...

手把手教你用Verilog实现MDIO控制器(附完整VHDL代码对比)

从零构建MDIO控制器:Verilog实现与PHY芯片调试实战 在FPGA与ASIC设计中,以太网PHY管理是每个硬件工程师必须掌握的技能。MDIO(Management Data Input/Output)作为IEEE 802.3标准定义的双线串行接口,承担着配置PHY寄存器…...

教育科技公司利用统一API平台为不同课程适配不同AI模型

教育科技公司利用统一API平台为不同课程适配不同AI模型 在教育科技领域,开发AI互动课程已成为提升学习体验和效率的重要手段。不同的课程内容、学科属性和学习者年龄层,对背后支撑的AI语言模型有着截然不同的要求。例如,面向低龄儿童的启蒙课…...

特斯拉Model 3 CAN总线DBC文件终极指南:从零开始掌握车辆数据解码

特斯拉Model 3 CAN总线DBC文件终极指南:从零开始掌握车辆数据解码 【免费下载链接】model3dbc DBC file for Tesla Model 3 CAN messages 项目地址: https://gitcode.com/gh_mirrors/mo/model3dbc 想象一下,你正驾驶着特斯拉Model 3,突…...

DeFlowSLAM 基于自监督场景运动分解的动态稠密 SLAM

1. 摘要 我们提出了一种新颖的光流表示,它将光流分解为由相机运动引起的静态光流场和由场景中物体运动引起的另一个动态光流场。基于这种表示,我们提出了一种动态 SLAM,称为 DeFlowSLAM,它利用图像中的静态和动态像素来求解相机位…...

如何在浏览器中实现专业级图像处理:OpenCV.js完整指南

如何在浏览器中实现专业级图像处理:OpenCV.js完整指南 【免费下载链接】opencvjs JavaScript Bindings for OpenCV 项目地址: https://gitcode.com/gh_mirrors/op/opencvjs 想在网页中实现人脸识别、图像滤镜或实时视频分析吗?OpenCV.js让这一切成…...

TexTeller公式识别技术深度剖析:从8000万数据训练到生产级部署

TexTeller公式识别技术深度剖析:从8000万数据训练到生产级部署 【免费下载链接】TexTeller TexTeller can convert image to latex formulas (image2latex, latex OCR) with higher accuracy and exhibits superior generalization ability, enabling it to cover m…...

终极游戏光标增强工具:如何让你的鼠标指针在游戏中清晰可见

终极游戏光标增强工具:如何让你的鼠标指针在游戏中清晰可见 【免费下载链接】YoloMouse Game Cursor Changer 项目地址: https://gitcode.com/gh_mirrors/yo/YoloMouse 你是否曾在激烈的游戏对战中因为鼠标光标太小而迷失方向?是否因为光标颜色与…...

为Claude Code配置Taotoken后端实现稳定无感的编程辅助

为Claude Code配置Taotoken后端实现稳定无感的编程辅助 对于日常使用Claude Code作为编程助手的开发者而言,一个稳定、可控的API服务是保证流畅编码体验的基础。直接连接单一服务商可能会遇到服务波动或访问限制,而手动切换不同模型又增加了配置的复杂度…...

自动驾驶 Camera 与 Radar 融合算法与论文总结

1. Cam与Radar融合综述论文1.1. CamRadarObjDetSemSegADSurvey题目:Radar-Camera Fusion for Object Detection and Semantic Segmentation in Autonomous Driving: A Comprehensive Review名称:用于自动驾驶中目标检测和语义分割的雷达相机融合&#xf…...

终极指南:3步让PS3蓝牙控制器在Windows上完美工作

终极指南:3步让PS3蓝牙控制器在Windows上完美工作 【免费下载链接】BthPS3 Windows kernel-mode Bluetooth Profile & Filter Drivers for PS3 peripherals 项目地址: https://gitcode.com/gh_mirrors/bt/BthPS3 你是否曾经试图将PS3控制器连接到Windows…...

linux server中搭建questasim 10.6c ise14.7

1:背景:公司是公用的服务器,这个服务器里面需要额外的shell打开ise。老的项目维护是ise14.7,需要仿真2:在linux下找到ise的目录,Xilinx\14.7\ISE_DS\ISE\bin\nt64\compxlibgui (花了好些时间&am…...

为 Claude Code 配置 Taotoken 作为后端大模型服务

为 Claude Code 配置 Taotoken 作为后端大模型服务 如果你习惯使用 Claude Code 作为编程助手,并且希望它能通过 Taotoken 平台调用多种大模型,那么这篇教程正适合你。Taotoken 提供了与 Anthropic 官方 API 兼容的通道,这意味着你可以将 Cl…...

Windows Batch (.bat) 脚本语法详解:从入门到实战

文章目录一、 引言:什么是 Batch 脚本?二、 创建和运行 Bat 文件三、 基础语法与命令1. 注释2. 命令回显3. 变量4. 控制流:条件判断 (IF)5. 循环 (FOR)6. 跳转 (GOTO)7. 退出 (EXIT)8. 其他常用命令四、 实战示例示例 1: 简单备份脚本示例 2:…...

终极CORS解决方案:gin-contrib/cors中间件完全指南

终极CORS解决方案:gin-contrib/cors中间件完全指南 【免费下载链接】cors Official CORS gins middleware 项目地址: https://gitcode.com/gh_mirrors/cors/cors 跨域资源共享(CORS)是现代Web开发中常见的挑战,而gin-contr…...

告别模拟器:3分钟在Windows上安装安卓应用的终极指南

告别模拟器:3分钟在Windows上安装安卓应用的终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾想过在Windows电脑上直接运行安卓应用&#x…...

终极浏览器资源嗅探指南:猫抓Cat-Catch完整使用教程

终极浏览器资源嗅探指南:猫抓Cat-Catch完整使用教程 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为无法保存在线视频而烦恼吗&a…...

OpenClaw插件实现聊天工具与Codex开发助手无缝集成

1. 项目概述:在聊天中无缝接入你的本地开发工作流如果你和我一样,日常开发工作流重度依赖像 Codex 这样的智能编码助手,同时又习惯了在 Telegram 或 Discord 的群聊、频道里和团队沟通,那么你很可能面临一个割裂的体验&#xff1a…...

Leptonica源码架构分析:理解2700+函数的设计哲学

Leptonica源码架构分析:理解2700函数的设计哲学 【免费下载链接】leptonica Leptonica is an open source library containing software that is broadly useful for image processing and image analysis applications. The official github repository for Lepton…...

保姆级避坑指南:从零复现Medical SAM Adapter,搞定皮肤、眼底、腹部CT三大医学数据集

医学影像分割实战:Medical SAM Adapter三大数据集复现全流程解析 当Meta的Segment Anything Model(SAM)遇上医学影像分析,会碰撞出怎样的火花?Medical SAM Adapter作为首个将通用分割大模型适配到医学领域的开源解决方…...

Hawk在微服务架构中的应用:分布式系统的认证解决方案

Hawk在微服务架构中的应用:分布式系统的认证解决方案 【免费下载链接】hawk INACTIVE - HTTP Holder-Of-Key Authentication Scheme 项目地址: https://gitcode.com/gh_mirrors/hawk/hawk 在当今快速发展的分布式系统环境中,微服务架构凭借其灵活…...

从科研到产线:锁相放大器(LIA)在光电探测和AFM中的应用实战与选型指南

从科研到产线:锁相放大器在光电探测与AFM中的实战应用与选型策略 在精密测量领域,信噪比往往决定着实验的成败。当信号强度跌至纳伏甚至皮伏量级时,传统放大器的局限性便暴露无遗——它们会平等地放大信号和噪声。这种现象在拉曼光谱实验中尤…...

WCC与QEMU用户模式结合:实现原生二进制翻译和分析的终极指南

WCC与QEMU用户模式结合:实现原生二进制翻译和分析的终极指南 【免费下载链接】wcc The Witchcraft Compiler Collection 项目地址: https://gitcode.com/gh_mirrors/wc/wcc The Witchcraft Compiler Collection(WCC)是一个功能强大的编…...

如何高效控制macOS外接显示器:MonitorControl完整使用指南

如何高效控制macOS外接显示器:MonitorControl完整使用指南 【免费下载链接】MonitorControl 🖥 Control your displays brightness & volume on your Mac as if it was a native Apple Display. Use Apple Keyboard keys or custom shortcuts. Shows…...

Hyprland下Waydroid运行Roblox的鼠标锁定方案

1. 项目概述:解决Waydroid中玩Roblox的鼠标逃逸问题 如果你和我一样,在Linux的Hyprland窗口管理器下,通过Waydroid运行Android应用,并且是个Roblox玩家,那你肯定遇到过这个让人抓狂的问题:鼠标光标动不动就…...

揭秘MPC-BE媒体播放器的5大核心技术架构与实战部署

揭秘MPC-BE媒体播放器的5大核心技术架构与实战部署 【免费下载链接】MPC-BE MPC-BE – универсальный проигрыватель аудио и видеофайлов для операционной системы Windows. 项目地址: https://gitcode.…...

004-利用Docker安装Mysql

利用Docker安装Mysql一、在镜像仓库找到 Mysql1.镜像仓库地址2.复制命令3.下载Mysql镜像4.查看镜像二、创建实例并启动三、用本地工具连接数据库四、设置 Mysql 配置一、在镜像仓库找到 Mysql Docker 容器默认是临时存储,若容器删除,MySQL 数据会丢失。…...