pl/sql编程语言

article/2025/10/6 11:56:37

–pl/sql编程语言
–pl/sql编程语言是对sql语言的扩展,是的sql语言具有过程化编程的特性
–pl/sql编程语言比一般的过程化编程语言,更加灵活高效
–pl/sql编程语言主要用来编写存储过程和存储函数等。

--声明方法,定义变量
--赋值操作可以用 := 也可以使用 into 查询语句赋值
declarei number(2):=10;        --数值型变量s varchar2(10):='小明'; --字符型变量ena emp.ename%type;   --引用型变量,直接取出emp表中ename的类型给enaemprow emp%rowtype;   --记录型变量,可以理解为可以存一行记录
begindbms_output.put_line(i); --输出语句dbms_output.put_line(s);select ename into ena from emp where empno=7788;dbms_output.put_line(ena);select * into emprow from emp where empno=7788;dbms_output.put_line(emprow.ename||'的工作为:'||emprow.job);
end;

执行之后看输出结果:
在这里插入图片描述

--pl/sql中的if判断
--输入小于18的数字,输出未成年
--输入大于18小于40的数字,输出中年人
--输入大于40的数字,输出老年人declare
--number给个3位表示年龄够了,最大可以是999,输入的写法 & 后根据自己喜欢写个字母i number(3):=ⅈ   
beginif i<18 thendbms_output.put_line('未成年');elsif i<40 thendbms_output.put_line('中年人');elsedbms_output.put_line('老年人');end if;
end;

执行
在这里插入图片描述
结果
在这里插入图片描述

--pl/sql中的loop循环
--用三种方式输出1到10十个数字
--while循环
declarei number(2):=1;
beginwhile i<11 loopdbms_output.put_line(i);i:=i+1;end loop;
end;--exit循环
declarei number(2):=1;
beginloopexit when i>10;dbms_output.put_line(i);i:=i+1;end loop;
end;--for循环
declarebeginfor i in 1..10 loopdbms_output.put_line(i);   end loop;
end;

在这里插入图片描述
–游标

--游标:可以存放多个对象,多行记录
--输出emp表中的所有员工的姓名
declarecursor c1 is select * from emp;emprow emp%rowtype;
beginopen c1;loopfetch c1 into emprow;exit when c1%notfound;dbms_output.put_line(emprow.ename);end loop;close c1;
end;

在这里插入图片描述

--给指定部门员工涨工资
--用到带参数的游标
declarecursor c2(eno emp.deptno%type)is select empno from emp where deptno=eno;en emp.empno%type;
beginopen c2(10);loopfetch c2 into en;exit when c2%notfound;update emp set sal=sal+100 where empno=en;commit;end loop;  close c2;  
end;

执行前
在这里插入图片描述
执行后
在这里插入图片描述
存储过程

--存储过程
--存储过程:存储过程就是提前编译好的一段pl/sql语言,放置在数据库端
---可以直接被调用。这一段pl/sql一般都是固定步骤的业务。
--给指定员工涨100块钱
create or replace procedure p1(eno emp.empno%type)
isbeginupdate emp set sal=sal+100 where empno=eno;commit;
end;

在这里插入图片描述

--测试p1
declarebeginp1(7788);
end;

测试执行前:
在这里插入图片描述
测试执行后:
在这里插入图片描述
存储函数


---通过存储函数计算指定员工的年薪
--存储过程和存储函数的参数都不能带长度
--存储函数的返回值类型不能带长度
create or replace function f_yearsal(eno emp.empno%type) return number
iss number(10);
beginselect sal*12+nvl(comm,0) into s from emp where empno=eno;return s;
end;

在这里插入图片描述

---测试f_yearsal
---存储函数在调用的时候,返回值需要接收
declares number(10);
begins:=f_yearsal(7788);dbms_output.put_line(s);
end;

在这里插入图片描述

--out类型参数如何使用
---使用存储过程来算年薪
create or replace procedure p_yearsal(eno emp.empno%type,yearsal out number)
iss number(10);c emp.comm%type;
beginselect sal*12,nvl(comm,0) into s,c from emp where empno=eno;yearsal:=s+c;
end;

在这里插入图片描述

--测试
declareyearsal number(10);
beginp_yearsal(7788,yearsal);dbms_output.put_line(yearsal);
end;

在这里插入图片描述

in和out类型参数的区别是什么?
凡是涉及到into查询语句复制或者 := 复制操作的参数,都必须用out来修饰。

–存储过程和存储函数的区别
–语法区别:关键字不一样
----存储函数比存储过程多了两个return。
–本质区别:存储函数有返回值,而存储过程没有返回值。
—如果存储过程实现有返回值的业务,我们就必须使用out类型的参数
—即便是存储过程使用了out类型的参数,其本质也不是真的有了返回值
—而是在存储过程内部给out类型的参数赋值,在执行完毕后,我们直接拿到输出类型参数的值。

--我们可以使用存储函数有返回值的特性,来自定义函数。
--而存储过程不能用来自定义函数。
--案例需求:查询出员工姓名,员工所在部门名称。
--案例准备工作:把scott用户下的dept表复制到当前用户下
create table dept as select * from scott.dept;
--使用传统方式来实现需求
select e.ename,d.dname
from emp e,dept d
where e.deptno=d.deptno;

在这里插入图片描述

--使用存储函数提供一个部门编号,输出一个部门名称
create or replace function fdna(dno dept.deptno%type) return dept.dname%type
isdna dept.dname%type;
beginselect dname into dna from dept where deptno=dno;return dna;
end;

在这里插入图片描述

--使用fdna存储函数来实现案例需求:查询出员工姓名,员工所在部门名称。
select e.ename,fdna(e.deptno)
from emp e;

在这里插入图片描述
触发器

--触发器,就是制定一个规则,在我们做增删改操作得时候
--只需要满足该规则,就自动触发,无须调用
---语句级触发器:不包含for each row的触发器
---行级触发器:包含for each row的及时行级触发器
----加for each row是为了使用 :old 或者 :new 对象或者一行记录---插入一条记录,输出一个新员工入职
create or replace trigger t1
after
insert
on person
declarebegindbms_output.put_line('一个新员工入职');
end;

在这里插入图片描述
一下面的表为例:
在这里插入图片描述

--触发t1
insert into person values(1,'小红');
commit;

在这里插入图片描述
再看表数据:
在这里插入图片描述

--行级触发器
--不能给员工降薪
---raise_application_error(-20001~-20999之间,'错误信息');
create or replace trigger t2
before
update
on emp
for each row
declarebeginif :old.sal>:new.sal thenraise_application_error(-20001,'不能给员工降薪');end if;
end; 
---触发t2
update emp set sal=sal-1 where empno=7788;
commit;

工资没变:
在这里插入图片描述

--触发器实现主键自增【行级触发器】
--分析:在用户做插入操作之前,拿到即将插入的数据
---给给该数据中的主键列赋值。
create or replace trigger auid
before
insert
on person
for each row
declarebeginselect s_person.nextval into :new.pid from dual;
end;

在这里插入图片描述
在这里插入图片描述

--使用auid实现主键自增
insert into person (pname) values ('a');
commit;

在这里插入图片描述

insert into person values(1,'b');
commit;

在这里插入图片描述


http://chatgpt.dhexx.cn/article/BXOouV18.shtml

相关文章

SQL编程开发

文章目录 SQL概述SQL分类SQL语言规范 基本查询语句查询全部列查询特定列过滤操作模糊查询排序操作多表查询单行函数组函数group by和having 子查询库和表的操作库的操作表的操作数据类型列的操作 数据处理之增删改事务、约束和分页事务约束分页 安装好MySQL下步就是使用MySQL&a…

SQL编程

10-1 查询学生表所有学生记录 (5 分) 本题目要求编写SQL语句&#xff0c; 检索出stu表中所有学生记录。 提示&#xff1a;请使用SELECT语句作答。 表结构: 定义表结构的SQL语句。如&#xff1a; CREATE TABLE stu(sno char(4) NOT NULL,sname char(8) NOT NULL,sex tinyin…

SQL 编程

SQL Server中存在两种变量局部变量和成员变量&#xff0c;两种变量的特点和其他语言变量特点一样 全局变量&#xff1a;由系统定义和维护由系统定义和维护 变量名前加“” 例 name 就定义了一个全局变量“name” 局部变量&#xff1a;由用户定义和使用&#xff0c;变量…

可编程的SQL是什么样的?

背景 如果你使用传统编程语言&#xff0c;比如Python&#xff0c;那么恭喜你&#xff0c;你可能需要解决大部分你不需要解决的问题&#xff0c;用Python你相当于拿到了零部件&#xff0c;而不是一辆能跑的汽车。你花了大量时间去组装汽车&#xff0c;而不是去操控汽车去抵达自…

SQL编程语言1

1 SQL简介 SQL是一门操作关系型数据库的编程语言 SQL通用语法 SQL语句可以以单行或多行书写&#xff0c;以分号结尾。只有在读取到分号后系统才会默认你已经输入执行语句MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写注释 单行注释&#xff1a;-- 注释内…

sql数据库高级编程总结(一)

1、数学函数&#xff1a;操作一个数据&#xff0c;返回一个结果 &#xff08;1&#xff09;取上限 ceiling 如果有一个小数就取大于它的一个最小整数 列如9.5 就会取到 10 select code,name,ceiling(price) from car &#xff08;2&#xff09;取下限 floor 如果有一个小数就…

SQL基础编程

文章目录 一.SQL的环境搭载单机离线环境在线环境 二.SQL的单表操作1.sql基础三步2.sql四则运算3.limit (限制查询结果个数)4.order by&#xff08;排序&#xff09;5.where 综合条件筛选6.SQL常量7.distinct (把结果中重复的行删除)8.函数(1) 聚合函数&#xff1a;sum() ——求…

君正X1000芯片性能和处理器介绍

君正X1000芯片是针对语音识别功能做了专门定制的芯片&#xff0c;可以支持4个MIC&#xff0c;支持远场唤醒&#xff0c;功耗很低&#xff0c;适用于物联网、智能家居、智能音频、智能玩具等产品 。 X1000 芯片功能&#xff1a; 穿戴处理器级低功耗&#xff0c;待机功耗0.2mW&am…

IBM storwize V5000存储基础配置

初始帐号密码 Superuser / passw0rd 设备和系统的基本状态 首先添加配置主机&#xff0c;前提是已经连接好光纤线&#xff0c;配置好光纤交换机 这里我们使用光纤通道 系统应该可以自动识别到端口&#xff0c;主机名可以设置为主机型号或者主机应用名 两个端口完成 配置内部存…

《计算机系统概论》-第5章-习题答案

给定指令ADD、JMP、LEA、NOT&#xff0c;请判断它们分别是操作&#xff08;或运算&#xff09;指令&#xff0c;还是数据搬移指令或控制指令&#xff1f;对每一条指令&#xff0c;进一步列出该指令可以采用的寻址模式。 指令类型寻址模式ADD操作立即数、寄存器2种寻址模式JMP控…

X1000之LCD部分的翻译

1.显示大小可达640x48060Hz&#xff0c;24BBP RGB 8 8 8 RGB(256^3) 2的24次方16777216 2.支持的颜色就是我们上面计算的 3. 8080并行接口 MCU接口方式&#xff08;8080&#xff0c;6800接口&#xff09;与RGB接口主要的区别 4.支持内部DMA操作和寄存器操作&#xff08;可以…

uboot - 配置过程1(分析国产君正的ingenic-linux-kernel3.10.14-x1000-v8.2-20181116\u-boot\mkconfig脚本)

分析uboot的配置过程&#xff08;mkconfig脚本&#xff09; uboot怎么配置&#xff1f;我们在终端上执行make NAME_config时的运行过程解析&#xff01; STEP1: %_config:: unconfig$(MKCONFIG) -A $(:_config)我们执行make *_config时会运行makefile的这两行程序&#xff0c…

Opencv 以指定格式保存图片

将图像保存至本地&#xff0c;以指定的格式&#xff0c;需要用到cv::imwrite()函数 函数原型&#xff1a; bool imwrite(const string& filename, InputArray img, const vector<int>& paramsvector<int>() )参数解释&#xff1a;filename:图像保存路径&…

【OpenCV-Python】教程:1-1 图像读取显示保存

文章目录 目标代码imread接口原型参数 支持的格式 imwrite接口原型参数 imshow接口原型参数 目标 读图片显示图片保存图片 代码 ## 导入库 import cv2 import sys## 读入图片 img cv2.imread("lena.jpg")## 读入失败退出 if img is None:sys.exit("Could not…

44.Linux君正X1000-添加st7789v显示

由于板子LCD旧屏是ili9335型号的,旧屏有时候会断货,如果断货则使用一个st7789v型号的LCD 它们两个屏的区别在于初始化屏的参数不同,引脚都一样,也就是说需要使板子同时支持ili9335型号和st7789v型号 思路: 1.uboot在显示LOG(初始化屏参数)之前,通过命令来读LCD型号,来检测LCD型…

HaaS100硬件规格

硬件配置 类别 参数 CPU 型号 HaaS 1000 架构 Cortex M33 主频 300MHz 片上Flash 16MB 内存 2.5MB SRAM 16MB PSRAM 硬件接口 类别 数量 性能指标 TF 卡槽 1个 最大支持 64GB RS485 1路 波特率支持1200bps ~ 115200bps RS232 1路 波特率最高支…

X1000对于CPU Core的参数解读(MIPS Cache)

各自摘抄整合&#xff0c;大多来自互联网&#xff0c;链接已全部放出来 1.MIPS-Based XBurst cores (up to 1.0GHz) 基于MIPS的XBurst核(最高可达1.0GHz) MIPS架构  XBurst是北京君正针对移动多媒体便携产品推出的一种创新的32位嵌入式CPU技术&#xff0c;它重新定义了32位嵌…

主控芯片成功案例:搭载北京君正X1000芯片,收款计算合二为一

具体硬件方面&#xff0c;商米码利奥Mini搭载了北京君正X1000芯片&#xff0c;该芯片具有性能强、功耗低的特点&#xff0c;主频可以达到1GHz &#xff0c;支持1秒极速启动&#xff0c;内置LPDDR&#xff08;X1000&#xff1a;32MB&#xff0c;X1000E&#xff1a;64MB&#xff…

【以太网硬件九】1000base-X是什么?

&#x1f449;个人主页&#xff1a; highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 说完千兆以太网电口&#xff0c;我们再来研究一下千兆光口的物理层规范。 千兆以太网…