Oracle学习__04:ORACLE 编程
发布日期:2021-04-30 21:01:21
浏览次数:118
分类:精选文章
本文共 1590 字,大约阅读时间需要 5 分钟。
Oracle 学习__04:ORACLE 编程
本文基于黑马程序员视频教程进行整理记录,仅用于个人学习/交流使用
视频地址:https://www.bilibili.com/video/BV1KJ411h7NH官方资料:https://pan.baidu.com/s/1mODcXmqHh54gas4U0CxoTg 提取码:zugy目录
一、PL/SQL
(一)什么是 PL/SQL
PL/SQL(Procedure Language/SQL)是 Oracle 对 SQL 语言的过程化扩展,提供了过程处理能力。它结合了 SQL 的数据操纵能力与过程语言的数据处理能力,适合复杂数据处理需求。
(二)变量
- 声明变量语法:
变量名 类型(长度); - 赋值语法:
变量名 := 变量值 - 示例:声明并赋值水费单价、字数、吨数、金额,并计算金额。
(三)属性类型
- 引用型:
%TYPE引用表字段的数据类型。 - 记录型:使用
%ROWTYPE表示表的记录类型。
(四)异常
- 预定义异常:Oracle 提供 21 个预定义异常。
- 用户定义异常:使用
RAISE显式引发异常。 - 异常处理语法:
exception when 异常类型 then 异常处理逻辑
(五)条件判断
- 基本语法:
if 条件 then 业务逻辑 else 业务逻辑 end if; - 阶梯水费计算:根据吨数设置不同单价,实现阶梯收费。
(六)循环
- 无条件循环:
loop和end loop; - 条件循环:
while 条件 - for 循环:
for 变量 in 起始值..终止值 loop
(七)游标
- 定义游标:
cursor 游标名称 is SQL 语句; - 使用游标:
open、fetch、close - 案例:查询业主类型为 1 的价格表,并通过游标打印结果。
二、存储函数
(一)存储函数
存储函数是可接收参数并返回结果的自定义函数,常用于封装数据库查询逻辑。
(二)存储函数语法
- 创建语法:
CREATE [OR REPLACE] FUNCTION 函数名称(参数名 类型, ...)返回数据类型 IS - 示例:创建查询地址名称的存储函数,并测试其调用。
(三)存储函数案例
- 查询业主信息:
SELECT id 编号, name 业主名称, fn_getaddress(addressid) 地址 FROM t_owners
三、存储过程
(一)存储过程
存储过程是封装数据库操作逻辑的 PL/SQL 块,常用于调用复杂业务逻辑。
(二)存储过程语法
- 创建语法:
CREATE [OR REPLACE] PROCEDURE 存储过程名称(参数名 类型, ...)IS - 参数模式:
IN(传入)、OUT(传出)、IN OUT(传入传出)
(三)存储过程案例
- 增加业主信息:创建不带传出参数的存储过程,调用示例。
- 带传出参数的存储过程:通过传出参数返回新增 ID,调用示例。
四、触发器
(一)触发器
触发器是与表相关联的 PL/SQL 程序,自动执行在特定数据操作时定义的逻辑。
(二)触发器分类
- 前置触发器:
BEFORE - 后置触发器:
AFTER
(三)触发器案例
- 前置触发器:计算本月使用水费,并更新吨数。
- 后置触发器:记录业主信息修改前后的日志。
五、综合案例
1. 计算阶梯水费
- 需求:水费单价为阶梯计算,12 吨的水费。
- 思路:通过游标查询价格表,计算各阶梯的水费并累加。
2. 存储函数实现阶梯水费
- 函数逻辑:遍历价格表,计算每阶梯的水费并返回总金额。
3. 触发器自动计算水费
- 触发器逻辑:在更新吨数时,自动调用存储函数计算水费。
4. 存储过程综合案例
- 需求:在增加业主信息时,自动在账务表中记录对应数据。
- 函数逻辑:使用
TO_CHAR获取年月,通过地址 ID 查询区域信息,并插入数据。
作者:耿鬼不会笑
时间:2021年1月发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2026年06月20日 20时52分34秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
php获取用户真实IP和防刷机制
2023-03-01
php获取网页内容的三种方法
2023-03-01
R-CNN算法优化策略
2023-03-01
PHP规范PSR0和PSR4的理解
2023-03-01
php解析ipa包,获取logo
2023-03-01
R&Rstudio安装各种包
2023-03-02
php设置cookie,在js中如何获取
2023-03-02
php设置socket超时时间
2023-03-02
php设计模式 萨莱 pdf,PHP设计模式 建造者模式
2023-03-02
PHP设计模式之----观察者模式
2023-03-02
php设计模式之装饰器模式
2023-03-02
R&Python Data Science系列:数据处理(5)--字符串函数基于R(一)
2023-03-02
PHP设计模式:观察者模式
2023-03-02
php访问mysql(1)
2023-03-02
php详细学习1
2023-03-02
php语言优劣
2023-03-02
PHP语言最优雅的支付SDK扩展包
2023-03-02
PHP请求https域名发生segment fault段错误
2023-03-02
PHP读写XML文件
2023-03-02
PHP读写XML文件
2023-03-02