Oracle游标和触发器
--1.游标
--什么是游标
--游标是数据库在内存中开辟的数据缓冲区
--作用:用于遍历查询返回之后的结果集(多条数据结果)
--游标分类:隐式游标,显示游标,REF游标(动态游标)
--游标的状态
-- %found -- sql语句影响了一行或多行时为true;
-- %notfound -- sql语句没有影响任何行时为true(常用,没找到为T,就退出)
-- %rowcount -- sql语句影响的行数;
-- %isopen -- 游标是否打开,始终为false。
--游标变量的优点和限制:
--1.游标变量功能强大,可以简化数据处理;
--2.游标变量优点:
-- a.可从不同的select语句中提取结果集;
--b.可以作为过程的参数进行传递;
--c.可以引用游标的所有属性;
--d.可以进行赋值运算;
--3.游标变量的限制:
-- a.不能在程序包中声明游标变量;
-- b.for update子句不能与游标变量一起使用;
-- c.不能使用比较运算符。
--1)隐式游标:
在pl\sql中执行DML SQL(Insert/delete/update/select)语句时自动创建,自动关闭,自动打开,自动声明
select * from t_student;
begin
update t_student set sname ='美女' where sid =12;
dbms_output.put_line('好漂亮');
else
dbms_output.put_line('最漂亮');
end if;
if sql%found then
dbms_output.put_line('美丽等级:'||sql%rowcount);
else
dbms_output.put_line('不好看');
end if;
end;
--2)显示游标
-- 用于处理Select时返回多行的查询;
-- 增/删/改时不会用显示游标;
-- 需要手动的去做声明、打开、提取、关闭操作。
--查询所以人的名字
declare
--步骤一:声明游标(仅定义,未执行)
cursor s_name from t_student;
select sname from t_studnet;
my_name t_studnet.sname%type;
begin
--步骤二:打开游标
open s_name;
--循环遍历游标
loop
--步骤三:提取游标(提取每一行游标返回的数据结果)
fetch s_name into my_name;
--设置循环终端条件
exit when s_name%notfound;
--打印结果
dbms_output.put_line('学生姓名'||my_name);
end loop;
open s_name;
--步骤4:关闭游标
close s_name;
end;
--实列2:查询所以学生
cursor c_stu from t_student;
select sname from t_studnet;
my_stu t_studnet%rowtype;
begin
--步骤二:打开游标
open c_stu;
--循环遍历游标
-- loop
--步骤三:提取游标(提取每一行游标返回的数据结果)
-- fetch c_stu into my_stu;
--设置循环终端条件
--exit when c_stu%notfound;
--打印结果
-- dbms_output.put_line('编号:'||my_stu.sid||',姓名:'||my_stu.sname);
-- end loop;
-- open s_name;
--步骤4:关闭游标
-- close c_stu;
--for:自动打开,关闭及提取
--r变量表示默认行为类型(%rowtype)
for r in c_stu loop
dbms_output.put_line('编号:'||r.sid||',姓名:'||r.sname);
end loop;
end;
--实列三:查询所以性别男的学员(带参数的游标)
declare
cursorc_stu(sex nvarchar2) is
select * from t_student where trim(ssex)=sex;
begin
for r in c_stu('男')loop
dbms_output.put_line('编号:'||r.sid||',姓名:'||r.sname);
end loop;
end;
--3)REF游标(动态游标)
declare
--声明游标类型
type ref_stu is ref cursor
return t_studnet%rowtype;
--定义变量使用刚刚声明的游标类型
my_stu ref_stu;
--定义变量接受结果
my_stu t-studnet%rowtype;
begin
--打开游标
open c_stu for select * from t_studnet;
--循环
loop
--提取游标记录
fetch c_stu into my_stu;
exit when c_stu%notfound;
dbms_output.put_line('编号:'||r.sid||',姓名:'||r.sname);
end loop;
close c_stu;
end;
--2.触发器
--触发器:一种数据库对象,在该数据库中特定条件发生时所执行的动作
--触发器与数据表是相关的,当数据表发生了DML sql操作时将会触发对应的操作
--增删改查
--触发器事件
--insert:插入数据时触发
--update:更新数据时触发
--delete:删除数据时触发
UPDATE OF column_name:特定列更新时触发
--语法格式:
--create or replace trigger 触发器名称
--{before|after}{insert|delete|update}
--{of 列名}on 表名
--[for rachc row]
--declare
--变量声明
--begin
--pl/sql块
--end;
--参数说明:
--before:触发时间:在数据库操作之前触发
--after:触发时间:在数据库操作之后触发
--insert:在数据表发生新增时触发
--update:在数据表更新时触发
--delete:在数据表发生删除时触发
--表名:触发器相关连的表,
--for each row;
---写了表示行触发,影响多少行,触发多少次
--不写:表示整个触发器,不管影响多少行,只会触发一次
--基本语法
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF}
{INSERT | UPDATE | DELETE | [OF column_name]}
ON table_name
[REFERENCING OLD AS old NEW AS new]
[FOR EACH ROW]
[WHEN (condition)]
DECLARE
-- 声明部分
BEGIN
-- 触发器代码
EXCEPTION
-- 异常处理
END;
create or replace trigger tri_emp
after update of sal on emp
for each row
when(NEW.sal>OLD.sal)
declare
diff emp.sal%type;
begin
diff:=:NEW.sal-:OLD.sal;
dbms_output.put_line('差额为:'||diff);
end tri_emp;
create or replace trigger tri_emp2
after update of sal on emp
declare
diff emp.sal%type;
begin
dbms_output.put_line('调用');
end tri_emp;
update emp set sal=sal+1 where deptno=10;
create table test_seq
(
id int primary key,
tname varchar2(20)
);
create sequence test_seq_seq;
select * from test_seq;
insert into test_seq values(test_seq_seq.nextval,'jack');
create or replace trigger test_trig
before insert or update of id
on test_seq
for each row
begin
if inserting then
select test_seq_seq.nextval into :NEW.id from dual;
end if;
if updating then
raise_application_error(-20020,'id不允许更新');
end if;
end test_trig;
--测试
insert into test_seq(tname) values('dav');
select * from test_seq;
update test_seq set id=4 where id=3;
相关文章:
Oracle游标和触发器
--1.游标 --什么是游标 --游标是数据库在内存中开辟的数据缓冲区 --作用:用于遍历查询返回之后的结果集(多条数据结果) --游标分类:隐式游标,显示游标,REF游标(动态游标) --游标的状…...
【面试向】点积与注意力机制,逐步编码理解自注意力机制
点积(dot product)两个向量点积的数学公式点积(dot product)与 Attention 注意力机制(Attention)注意力机制的核心思想注意力机制中的缩放点积自注意力机制中,谁注意谁? 逐步编码理解…...
00.IDEA 插件推荐清单(2025)
IDEA 插件推荐清单 精选高效开发必备插件,提升 Java 开发体验与效率。 参考来源:十六款好用的 IDEA 插件,强烈推荐!!!不容错过 代码开发助手类 插件名称功能简介推荐指数CodeGeeX智能代码补全、代码生成、…...
一个 CTO 的深度思考
今天和一些同事聊了一会,以下是我的观点 我的观点,成年人只能筛选,不能培养在组织中,应该永远向有结果的人看齐。不能当他站出来讲话的时候,大家还要讨论讨论,他虽然拿到结果了,但是他就是有一…...
MVC/MVVM 高级应用的深度解析
状态共享与同步 跨组件状态管理策略 状态变更的传播机制优化 状态快照与时间旅行调试 状态持久化 本地存储策略 状态序列化与反序列化 与服务端状态同步 数据绑定进阶 双向绑定优化 脏检查机制优化 基于Proxy/Object.defineProperty的实现差异 批量更新策略 自定义…...
SQL通用语法和注释,SQL语句分类(DDL,DML,DQL,DCL)及案例
目录 SQL通用语法和注释 SQL语句分类(DDL,DML,DQL,DCL,TPL,CCL) DDL(数据定义语言) 数据库操作 查询(SHOW、SELECT) 创建(CREAT…...
当算力遇上马拉松:一场科技与肉身的极限碰撞
目录 一、从"肉身苦修"到"科技修仙" 二、马拉松的"新大陆战争" 三、肉身会被算法"优化"吗? 马拉松的下一站是"人机共生"时代 当AI能预测你的马拉松成绩,算法能规划最佳补给方案,智能装备让训练效率翻倍——你还会用传…...
AUTOSAR图解==>AUTOSAR_SWS_KeyManager
AUTOSAR KeyManager详细分析 AUTOSAR 4.4.0 版本密钥与证书管理模块技术分析 目录 1. 概述2. KeyManager架构 2.1 KeyManager在AUTOSAR架构中的位置2.2 架构说明 3. KeyManager模块结构 3.1 模块组件详解3.2 配置项说明 4. KeyManager证书验证流程 4.1 证书验证流程分析 5. Ke…...
用usb网卡 虚拟机无法开到全双工的解决办法
今天突发奇想 给unraid宿主机插了两个一摸一样的usb网卡 2.5g的 直通给不同的虚拟机 这里unraid需要安装"USB Manager" 请给unraid自备环境 直通的时候 第一次还没生效 看不到网卡 我又在unraid的管理界面 顶部可以看到多出来一个 "usb"页面 打开可…...
5. 话题通信 ---- 发布方和订阅方python文件编写
本节对应赵虚左ROS书籍的2.1.3 以10hz,发布消息和消息的订阅 1)在功能包下新建scripts文件夹,在scripts文件夹下新建python文件,写入 #! /usr/bin/env pythonfrom std_msgs.msg import String import rospyif __name__ "__main__":rospy.i…...
Jsp技术入门指南【七】JSP动作讲解
Jsp技术入门指南【七】JSP动作讲解 前言一、什么是JSP动作?二、核心JSP动作详解1. jsp:include:动态包含其他页面与<% include %>的区别 2. jsp:forward:请求转发到另一个页面3. jsp:param:为动作传递参数4. jsp:useBean&am…...
10软件测试需求分析案例-查询学习信息
用户登录系统后,进入查询学生信息界面,输入查询字段值,点击查询按钮后,展示查询到的学生信息,可以重新输入字段值进行查询。 查询学生信息属于学生信息管理的子菜单,可以根据学号、姓名、性别查询。老师登录…...
基于尚硅谷FreeRTOS视频笔记——6—滴答时钟—上下文切换
FreeRTOS滴答 FreeRTOS需要有一个时钟参照,并且这个时钟不会被轻易打断,所以最好选择systick 为什么需要时间参照 就是在高优先级任务进入阻塞态后,也可以理解为进入delay()函数后,需要有一个时间参照&…...
Lambda 表达式的语法结构
Java 中的 Lambda 表达式的基本结构如下: (参数列表) -> { 方法体 } ✅ 语法形式举例(从简单到复杂) 形式示例说明无参数() -> System.out.println("Hi")没有参数,执行一个语句一个参数x -> x *…...
SEOFOMO调研揭示:2025年电商SEO如何利用人工智能
随着人工智能(AI)技术在数字营销领域的深入应用,电子商务(电商)搜索引擎优化(SEO)的实践正在发生深刻变革。2025年4月17日,Aleyda Solis 的 SEOFOMO 发布了一项针对电商业主和 SEO 从…...
linux下C++性能调优常用的工具
性能优化的常见流程 发现问题--->定位问题--->解决问题--->验证问题 发现问题的常见工具 1.定位内存问题 top指令,发现占用内存多的线程 asan 发现内存问题。 2.定位cpu问题 top指令,发现占用cpu多的进程,线程 一般对内存和…...
Docker安装 (centos)
1.安装依赖包: sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2.删除已有的 Docker 仓库文件(如果有): sudo rm -f /etc/yum.repos.d/docker-ce.repo 3.添加阿里云的 Docker 仓库: sudo yum…...
MCP服务,阿里云百炼,Cline,mysql-mcp-server,MCP通信原理
简介 MCP(Model Context Protocol),模型上下文协议,是一种开放标准,用于将AI模型与外部数据源和工具建立安全的双向连接,它就像AI领域的USB-C接口,为AI模型提供了一种标准化方式来连接不同的数…...
一个项目中多个Composer的使用方法
composer是依赖管理工具。 有时我们会在一个项目中使用到多个composer,且每个版本不同。 前提:例如项目xyz根目录vendor中存在阿里云的对应代码。我现在需要再composer腾讯云短信发送的SDK。 1、随便找个位置新建文件夹,存储腾讯云短信发送…...
MCP 应用案例-网络设备批量管理
案例背景 需求痛点 企业需管理数百台跨地域网络设备(交换机/路由器),传统方式存在: 人工SSH登录效率低脚本维护成本高(不同厂商CLI语法差异)状态监控依赖独立监控系统 解决方案 通过MCP协议构建智能网络…...
国产之光DeepSeek架构理解与应用分析02
本专栏 国产之光DeepSeek架构理解与应用分析-CSDN博客 国产之光DeepSeek架构理解与应用分析02-CSDN博客 前置的一些内容理解 GPU TPU NPU的区别? 设计目的 GPU:最初是为了加速图形渲染而设计的,用于处理图像和视频数据,以提供高…...
2025.4.19总结
工作:一天上班下来还是比较累的,可能是晚上没睡好吧,统计了最近这周的睡眠时间,基本上是在12:20~1:00这段时间睡的。平时工作活不算太多,从今年年初,就已经制定好了PBC,上半年的工作…...
对美团leaf的初步学习
我的项目中使用的雪花算法生成的全局订单号。但是考虑到了雪花算法可能会由于时钟回拨导致生成的全局id重复。于是去研究了美团的leaf服务:Leaf——美团点评分布式ID生成系统 - 美团技术团队,并总结出该文章。 自己项目中的应用 由于对订单表做了分表&…...
mysql的函数(第一期)
一、字符串函数 处理文本数据,常用函数: CONCAT(str1, str2, ...) 作用:拼接字符串。示例:SELECT CONCAT(Hello, , World); → Hello World注意:若任一参数为 NULL,…...
Nacos深度剖析与实践应用之-负载均衡
💡简介 Nacos不仅提供服务注册与发现功能,还内置了强大的负载均衡能力。Nacos的负载均衡机制主要应用于服务消费者从服务注册中心获取服务实例列表后,如何选择其中一个实例进行调用的过程。 🧠 学习目的 这篇文章我们将探讨负载…...
docker.desktop下安装普罗米修斯prometheus、grafana并看服务器信息
目标 在docker.desktop下先安装这三种组件,然后显示当前服务的CPU等指标。各种坑已踩,用的是当前时间最新的镜像 核心关系概述 组件角色依赖关系Prometheus开源监控系统,负责 数据采集、存储、查询及告警。依赖 Node-Exporter 提供的指标数据。Node-Exporter专用的 数据采集…...
Photoshop安装与配置--简单攻略版
下载地址:Photoshop软件工具下载 安装完成后,即可运行Photoshop.exe;打开工具页面后,按照下面简单配置即可 1.编辑-》首选项-》常规 或者直接快捷键CtrlK 暂存盘:一定要设置为非C盘 2.性能 3.文件处理 以上配置比较基础…...
AI时代的泛安全新范式:Kaamel智能体隐私与合规解决方案
引言:AI时代隐私保护的挑战与机遇 随着人工智能技术的迅猛发展,组织机构面临着前所未有的隐私、安全和合规挑战。个人数据的价值日益增长,而保护这些数据的复杂性也同步上升。如ClickUp的研究表明,AI智能代理(Agent)正在彻底改变…...
桌面级OTA测试解决方案:赋能智能网联汽车高效升级
一、前言 随着智能网联汽车的快速发展,OTA(Over-The-Air)技术已成为汽车软件更新和功能迭代的关键手段。为确保OTA升级的可靠性、安全性和效率,构建一套高效、便捷的桌面级OTA测试解决方案至关重要。 本方案基于Vector先进的软硬…...
PG,TRPO,PPO,GRPO,DPO原理梳理
强化学习方法的分类 一、基础概念 Policy Model(Actor Model):根据输入文本,预测下一个token的概率分布,输出下一个token也即Policy模型的“动作”。该模型需要训练,是我们最终得到的模型,并由上…...
