数据库实验6 存储过程实验

news2025/7/7 21:57:46

前言:游标的mysql代码不懂写,所以没有运行结果

实验6 存储过程实验

实验6.1 存储过程实验

1.实验目的

掌握数据库 PL/SQL 编程语言,以及数据库存储过程的设计和使用方法。

2.实验内容和要求

存储过程定义,存储过程运行,存储过程更名,存储过程删除,存储过程的参数传递。掌握PL/SQL编程语言和编程规范,规范设计存储过程。

3.实验过程

(1)无参数的存储过程

定义一个存储过程,更新所有订单的(含税折扣价)总价。

CREATE PROCEDURE Proc_CalTotalPrice ()
BEGIN
	UPDATE orders
	SET totalprice = (
		SELECT SUM(extendedprice * (1 - discount) * (1 + tax))
		FROM lineitem1
		WHERE orders.orderkey = lineitem1.orderkey AND lineitem1.orderkey=1
	);
END;

执行存储过程Proc_CalTotalPrice

SELECT lineitem1.extendedprice, lineitem1.orderkey, lineitem1.tax, lineitem1.discount, orders.totalprice
FROM lineitem1, orders
WHERE orders.orderkey = 1 AND orders.orderkey = lineitem1.orderkey;

CALL Proc_CalTotalPrice();

SELECT lineitem1.extendedprice, lineitem1.orderkey, lineitem1.tax, lineitem1.discount, orders.totalprice
FROM lineitem1, orders
WHERE orders.orderkey = 1 AND orders.orderkey = lineitem1.orderkey;

在这里插入图片描述

可以看到,执行存储过程Proc_CalTotalPrice后,经过计算: totalprice=extendedprice*(tax+1)* (1 - discount)=20000*(1+0.18)*(1-0.09)=21476

可以看到,Proc_CalTotalPrice执行成功

(2)有参数的存储过程

定义一个存储过程,更新给定订单的(含税折扣价)总价。

CREATE PROCEDURE Proc_CalTotalPrice4Order (
	okey integer
)
BEGIN
	UPDATE Orders
	SET totalprice = (
		SELECT sum(extendedprice * (1 - discount) * (1 + tax))
		FROM Lineitem1
         WHERE orders.orderkey = lineitem1.orderkey
		AND Lineitem1.orderkey=okey
	);
END;

执行存储过程Proc_CalTotalPrice4Order

SELECT lineitem1.extendedprice, lineitem1.orderkey, lineitem1.tax, lineitem1.discount, orders.totalprice
FROM lineitem1, orders
WHERE orders.orderkey = 1 AND orders.orderkey = lineitem1.orderkey;

CALL Proc_CalTotalPrice4Order(1);

SELECT lineitem1.extendedprice, lineitem1.orderkey, lineitem1.tax, lineitem1.discount, orders.totalprice
FROM lineitem1, orders
WHERE orders.orderkey = 1 AND orders.orderkey = lineitem1.orderkey;

在这里插入图片描述

可以看到,传入参数1,代表orderkey=1,经过计算: totalprice=extendedprice*(tax+1)* (1 - discount)=30000*(1+0.18)*(1-0.09)=32214

可以看到,Proc_CalTotalPrice4Order执行成功

(3)有局部变量的存储过程

定义一个存储过程,更新某个顾客的所有订单的(含税折扣价)总价。

CREATE PROCEDURE Proc_CalTotalPrice4Customer (
	p_name char(25)
)
BEGIN
	DECLARE L_custkey integer;
	SELECT custkey
	INTO L_custkey
	FROM Customer1
	WHERE name = TRIM(p_name);
	UPDATE Orders1
	SET totalprice = (
		SELECT sum(extendedprice * (1 - discount) * (1 + tax))
		FROM Lineitem1
		WHERE Orders1.orderkey = Lineitem1.orderkey
		AND Orders1.custkey = L_custkey
	);
END;

执行存储过程Proc_CalTotalPrice4Customer

SELECT lineitem1.extendedprice, lineitem1.orderkey, lineitem1.tax, lineitem1.discount, orders1.totalprice,Customer1.name
FROM lineitem1, orders1,Customer1
WHERE orders1.orderkey = 1 AND orders1.orderkey = lineitem1.orderkey;

CALL Proc_CalTotalPrice4Customer('张三');

SELECT lineitem1.extendedprice, lineitem1.orderkey, lineitem1.tax, lineitem1.discount, orders1.totalprice,Customer1.name
FROM lineitem1, orders1,Customer1
WHERE orders1.orderkey = 1 AND orders1.orderkey = lineitem1.orderkey;

在这里插入图片描述

可以看到,传入参数’张三’,其在Customer1表中的编号为custkey为1,custkey为1对应orders1表中的orderkey为1的元组,经过计算结果正确,即过程Proc_CalTotalPrice4Customer执行成功

(4)有输出参数的存储过程

定义一个存储过程,更新某个顾客的所有订单的(含税折扣价)总价。

CREATE PROCEDURE Proc_CalTotalPrice4Customer1 (
	IN p_custname char(25), 
	OUT p_totalprice real
)
BEGIN
	DECLARE L_custkey integer;
	SELECT custkey
	INTO L_custkey
	FROM Customer1
	WHERE name = TRIM(p_custname);
	UPDATE Orders1
	SET totalprice = (
		SELECT sum(extendedprice * (1 - discount) * (1 + tax))
		FROM Lineitem1
         WHERE Orders1.orderkey = Lineitem1.orderkey
		AND Orders1.custkey = L_custkey
	);
	SELECT sum(totalprice)
	INTO p_totalprice
	FROM Orders1
	WHERE custkey = L_custkey;
END;

执行存储过程Proc_CalTotalPrice4Customer1

SELECT lineitem1.extendedprice, lineitem1.orderkey, lineitem1.tax, lineitem1.discount, orders1.totalprice,Customer1.name
FROM lineitem1, orders1,Customer1
WHERE orders1.orderkey = 1 AND orders1.orderkey = lineitem1.orderkey;

CALL Proc_CalTotalPrice4Customer1('张三',@p_totalprice);

SELECT @p_totalprice;

在这里插入图片描述

经计算,结果正确,说明过程Proc_CalTotalPrice4Customer1执行成功

(5)修改存储过程

1)修改存储过程名Proc_CalTotalPrice4Order为CalTotalPrice40rder。

ALTER PROCEDURE Proc_CalTotalPrice4Order RENAME TO CalTotalPrice4Order;

2)编译存储过程

alter procedure CalTotalPrice4Orde(okey integer) compile;

(6)删除存储过程

drop procedure Proc_CalTotalPrice;

4.思考题

(1)试总结几种调试存储过程的方法。

答:

在这里插入图片描述

(2)存储过程中的SELECT语句与普通的SELECT语句格式有何不同?执行方法有何不同?

答:存储过程中的SELECT语句可以将查询的结果赋给存储过程中的变量。普通的SELECT 语句的作用是从数据库中返回信息。

实验6.2 自定义函数实验

1.实验目的

掌握数据库PL/SQL编程语言以及数据库自定义函数的设计和使用方法。

2.实验内容和要求

自定义函数定义,自定义函数运行,自定义函数更名,自定义函数删除,自定义函数的参数传递。掌握PL/SQL和编程规范,规范设计自定义函数。

3.实验过程

自定义函数 (user-defined function UDF)是一种对MySQL扩展的途径,其用法和内置函数相同。
自定义函数的两个必要条件:

  • 参数

  • 返回值(必须有)。函数可以返回任意类型的值。

语法如下:

CREATE FUNCTION function_name(parameter_nametype,[parameter_name type,...])
RETURNS {
STRING|INTEGER|REAL}
runtime_body

注意是returns啊,当初找错找了很久都没发现

(1) 自定义显示时间函数

设计一个可以返回当前时间的函数

DELIMITER $$
CREATE FUNCTION formatDate(fdate datetime) RETURNS VARCHAR(255)BEGIN
	RETURN date_format(fdate,'%Y年%m月%d日%h时%i分%s秒');

END $$
DELIMITER;

运行结果如下:

SELECT formatDate (now( ));

在这里插入图片描述

(2) 无参数的自定义函数

定义一个自定义函数,更新所有订单的(含税折扣价)总价,并返回所有订单的总价之和。

DROP FUNCTION FUN_CalTotalPrice;
CREATE FUNCTION FUN_CalTotalPrice()
RETURNS REAL
BEGIN
	DECLARE res REAL;
	UPDATE Orders1
	SET totalprice = (
		SELECT SUM(extendedprice * (1 - discount) * (1 + tax))
		FROM Lineitem1
		WHERE Orders1.orderkey = Lineitem1.orderkey
	);
	SELECT SUM(totalprice)
	INTO res
	FROM Orders1;
	RETURN res;
END;

执行自定义函数FUN_CalTotalPrice( )

SELECT FUN_CalTotalPrice();

在这里插入图片描述

通过查看Lineitem1表

在这里插入图片描述

通过计算,最后的结果为

5000*(1-0.09)*(1+0.18)+2000*(1-0.27)*(1+0.67)=5369+2438.2=7807.2,和函数返回结果相同,说明函数运行成功

(3)有参数的自定义函数

定义一个自定义函数,更新并返回给定订单的总价

CREATE FUNCTION FUN_CalTotalPrice4Order (
	p_okey INTEGER
)
RETURNS REAL
BEGIN
	DECLARE res REAL;
	UPDATE Orders
	SET totalprice = (
		SELECT SUM(extendedprice * (1 - discount) * (1 + tax))
		FROM Lineitem
		WHERE Orders.orderkey = Lineitem.orderkey
			AND Lineitem.orderkey = p_okey
	);
	SELECT SUM(toyalprice)
	INTO res
	FROM Orders;
	RETURN res;
END;

执行自定义函数FUN_CalTotalPrice4Order()

CALL Fun_CalTotalPrice4Order(5365);

(4)有局部变量的自定义函数

定义一个自定义函数,计算并返回某个顾客的所有订单的总价

CREATE FUNCTION FUN_CalTotalPrice4Customer (
	p_custname CHAR(25)
)
RETURNS REAL
BEGIN
	DECLARE L_custkey INTEGER;
	DECLARE res REAL;
	SELECT cuskey
	INTO L_custkey
	FROM Customer
	WHERE NAME = trim(p_custname);
	UPDATE Orders
	SET totalprice = (
		SELECT SUM(extendedprice * (1 - discount) * (1 + tax))
		FROM Lineitem
		WHERE Orders.orderkey = Lineitem.orderkey
			AND Orders.custkey = L_custkey
	);
	SELECT SUM(toyalprice)
	INTO res
	FROM Orders
	WHERE custkey = L_custkey;
	RETURN res;
END;

执行自定义函数FUN_CalTotalPrice4Customer()

SELECT FUN_CalTotalPrice4Customer('张三');

(5)有输出参数的自定义函数

定义一个自定义函数,计算并返回某个顾客的所有订单的总价

CREATE FUNCTION FUN_CalTotalPrice4Customer2 (IN p_custname CHAR ( 25 ), OUT p_totalprice REAL ) RETURNS REAL BEGIN
	DECLARE
		L_custkey INTEGER;
	DECLARE
		res REAL;
	SELECT
		cuskey INTO L_custkey 
	FROM
		Customer 
	WHERE
		NAME = trim( p_custname );
	UPDATE Orders 
	SET totalprice = (
		SELECT
			SUM( extendedprice * ( 1-discount ) * ( 1+tax ) ) 
		FROM
			Lineitem 
		WHERE
			Orders.orderkey = Lineitem.orderkey 
			AND Orders.custkey = L_custkey 
		);
	SELECT
		SUM( toyalprice ) INTO p_totalprice 
	FROM
		Orders 
	WHERE
		custkey = L_custkey;
	res:= p_totalprice;
RETURN res;
END;

mysql运行不了,不知道怎么改

执行自定义函数FUN_CalTotalPrice4Customer2()

SELECT FUN_CalTotalPrice4Customer2('张三'null)

(6)修改自定义函数

修改自定义函数名FUN_CalTotalPrice4Order 为CalTotalPrice4Order

ALTER FUNCTIONFUN_CalTotalPrice4Order RENAME TO CalTotalPrice4Order ;

编译自定义函数CalTotalPrice4Order

ALTER FUNCTIONFUN_CalTotalPrice4Order(okey INTEGER) COMPILE;

(7)删除自定义函数

删除自定义函数CalTotalPrice4Order。

DROP FUNCTION CalTotalPrice4Order ; 

4.思考题

(1)试分析自定义函数与存储过程的区别与联系。

自定义函数与存储过程相似,都是持久性存储模块。
区别:

  1. 存储过程实现的功能相对复杂,函数针对性较强。
  2. 存储过程可以返回多个值,函数只能有一个返回值。
  3. 存储过程一般独立执行,函数可以作为 sql 语句的组成部分来出现。

(2)如何使得自定义函数可以返回多个值?

在函数的内部先定义一个数组,然后把多个要作为返回值的内容,先存入到数组中,然后让函数名字=数组名,这样返回值就是数组了。注意写这一步的时候不要有括号。这么写的话,调用函数的返回值不需要分割那一步,只需要用一般数组变量存储返回值,然后调用数组内容即可。

实验6.3 游标实验

参考 游标

1.实验目的

掌握PL/SQL游标的设计、定义和使用方法,理解 PL/SQL游标按行操作和SQL按结果集操作的区别和联系。

2.实验内容和要求

游标定义,游标使用。掌握各种类型游标的特点、区别与联系。

3.实验过程

游标

游标的设计是一种数据缓冲区的思想,用来存放SQL语句执行的结果。游标是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
尽管游标能遍历结果中的所有行,但一次只指向一行。
游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。

特性

游标具有三个属性:
A、不敏感(Asensitive):数据库可以选择不复制结果集
B、只读(Read only)
C、不滚动(Nonscrollable):游标只能向一个方向前进,并且不可以跳过任何一行数据。

游标是针对行操作的,对从数据库中SELECT查询得到的结果集的每一行可以进行分开的独立的相同或不同的操作,是一种分离的思想。游标是面向集合与面向行的设计思想之间的一种桥梁。

游标的主要缺点是性能不高。
游标的开销与游标中进行的操作相关,如果在游标中进行复杂的操作,开销会非常高。如果采用面向集合的SQL语句,扫描成本为O(N);但如果采用面向集合的SQL语句的扫描成本为O(N*N),则使用游标有可能会带来性能上的提升。
游标的缺点是只能一行一行操作。在数据量大的情况下,速度过慢。数据库大部分是面对集合的,业务会比较复杂,而游标使用会有死锁,影响其他的业务操作,不可取。 当数据量大时,使用游标会造成内存不足现象。

游标的处理过程

  1. 声明游标 declare:没有检索数据,只是定义要使用的 select 语句
  2. 打开游标 open:打开游标以供使用,用上一步定义的 select 语句把数据实际检索出来
  3. 检索游标 fetch:对于填有数据的游标,根据需要取出(检索)各行
  4. 关闭游标 close:在结束游标使用时,必须关闭游标。

一些游标操作

游标的定义

DECLARE cursor_name CURSOR FOR select_statement  

打开游标

OPEN cursor_name;

取游标中的数据

FETCH cursor_name INTO var_name [, var_name]...

关闭游标

CLOSE cursor_name;

释放游标

DEALLOCATE cursor_name;

(1)普通游标

① 定义一个存储过程,用游标实现计算所有订单的总价。

CREATE 
	OR REPLACE PROCEDURE ProcCursor_CalTotalPrice ( ) AS L_orderkey INTEGER;
L_totalprice REAL;
CURSOR mycursor FOR SELECT
orderkey,
totalprice 
FROM
	Orders;
BEGIN
		OPEN mycursor;
	LOOP
			FETCH mycursor INTO L_orderkey,
			L_totalprice;
		IF
			mycursor % NOTFOUND THEN
				EXIT;
			
		END IF;
		SELECT
			SUM( extendedprice * ( 1-discount ) * ( 1+tax ) ) INTO L_totalprice 
		FROM
			Lineitem 
		WHERE
			orderkey = L_orderkey;
		UPDATE Orders 
		SET totalprice = L_totalprice 
		WHERE
			orderkey = L_orderkey;
		
	END LOOP;
CLOSE mycuesor;
END;

② 执行存储过程ProcCursor_CalTotalPrice()

CALL ProcCursor_CalTotalPrice()

(2)REFCURSOR类型游标

① 定义一个存储过程,用游标实验计算所有订单的总价。

CREATE 
	OR REPLACE PROCEDURE ProcRefCursor_CalTotalPrice ( ) AS DECLARE
	L_orderkey INTEGER;
L_totalprice REAL;
mycuesor REFCURSOR;
BEGIN
		OPEN mycursor FOR SELECT
		orderkey,
		totalprice 
	FROM
		ORDER;
	LOOP
			FETCH mycursor INTO L_orderkey,
			L_totalprice;
		IF
			mycursor % NOTFOUND THEN
				EXIT;
			
		END IF;
		SELECT
			SUM( extendedprice * ( 1-discount ) * ( 1+tax ) ) INTO L_totalprice 
		FROM
			Lineitem 
		WHERE
			orderkey = L_orderkey;
		UPDATE Orders 
		SET totalprice = L_totalprice 
		WHERE
			orderkey = L_orderkey;
		
	END LOOP;
CLOSE mycursor;
END;

② 执行存储过程ProcRefCursor_CalTotalPrice()

 CALL ProcRefCursor_CalTotalPrice(); 

(3)记录变量与游标

① 定义一个存储过程,用游标实现计算所有订单的总价。

CREATE 
	OR REPLACE PROCEDURE ProcRefCursor_CalTotalPrice ( ) AS DECLARE
	L_totalprice REAL;
res RECORD;
CURSOR mycuesor FOR SELECT
orderkey,
totalprice 
FROM
	Orders;
BEGIN
		OPEN mycursor
	LOOP
			FETCH mycursor INTO res;
		IF
			mycursor % NOTFOUND THEN
				EXIT;
			
		END IF;
		SELECT
			SUM( extendedprice * ( 1-discount ) * ( 1+tax ) ) INTO L_totalprice 
		FROM
			Lineitem 
		WHERE
			orderkey = res.orderkey;
		UPDATE Orders 
		SET totalprice = L_totalprice 
		WHERE
			orderkey = res.orderkey;
		
	END LOOP;
CLOSE mycursor;
END;

② 执行存储过程ProcRefCursor_CalTotalPrice()

CALL ProcRefCursor_CalTotalPrice()

(4)带参数的游标

① 定义一个存储过程,用游标实现计算指定国家的用户订单的总价。

CREATE 
	OR REPLACE PROCEDURE ProcRefCursor_CalTotalPrice ( p_nationname CHAR ( 20 ) ) AS DECLARE
	L_totalprice REAL;
res RECORD;
CURSOR mycuesor ( c_nationname CHAR ( 20 ) ) FOR SELECT
O.orderkey,
O.totalprice 
FROM
	Orders O,
	Customer O,
	Nation N 
WHERE
	O.custkey = C.custkey 
	AND c.nationkey = N.nationkey 
	AND TRIM( N.NAME ) = TRIM( c_nationname );
BEGIN
		OPEN mycursor ( p_nationname );
	LOOP
			FETCH mycursor INTO res;
		IF
			mycursor % NOTFOUND THEN
				EXIT;
			
		END IF;
		SELECT
			SUM( extendedprice * ( 1-discount ) * ( 1+tax ) ) INTO L_totalprice 
		FROM
			Lineitem 
		WHERE
			orderkey = res.orderkey;
		UPDATE Orders 
		SET totalprice = L_totalprice 
		WHERE
			orderkey = res.orderkey;
		
	END LOOP;
	CLOSE mycursor;

END;

② 执行存储过程ProcParaCursor_CalTotalPrice()

CALL ProcParaCursor_CalTotalPrice('中国');

4.思考题

试分析说明REFCURSOR类型游标的优点。

答:

  1. REFCURSOR类型的游标定义一个游标应用变量,只是再打开该类型游标时才指定具体的SELECT语句以便产生游标的结果集。因此,REFCURSOR实质上是定义了一个动态游标,可以灵活方便地根据程序运行时情况的变动设置游标的SELECT查询结果集。

  2. 游标可以实现对数据库记录逐条处理,而不是整个结果集一起处理,因此,游标是在PL/SQL语言中实现过程化处理的核心功能。

  3. 记录对于游标结果记录的处理很方便,通过记录变量可以直接访问记录的每个属性,而无需为记录的每个属性定义相应的变量。

5.实验总结

学习了存储过程定义、存储过程运行,存储过程更名,存储过程删除,存储过程的参数传递。掌握 PL/SQL 编程语言和编程规范,规范设计存储过程。
学习了自定义函数定义、自定义函数运行,自定义函数更名,自定义函数删除,自定义函数的参数传递。掌握 PL/SQL 和编程规范,规范设计自定义函数。
ROM
Lineitem
WHERE
orderkey = res.orderkey;
UPDATE Orders
SET totalprice = L_totalprice
WHERE
orderkey = res.orderkey;

END LOOP;
CLOSE mycursor;

END;


② 执行存储过程ProcParaCursor_CalTotalPrice()

```sql
CALL ProcParaCursor_CalTotalPrice('中国');

4.思考题

试分析说明REFCURSOR类型游标的优点。

答:

  1. REFCURSOR类型的游标定义一个游标应用变量,只是再打开该类型游标时才指定具体的SELECT语句以便产生游标的结果集。因此,REFCURSOR实质上是定义了一个动态游标,可以灵活方便地根据程序运行时情况的变动设置游标的SELECT查询结果集。

  2. 游标可以实现对数据库记录逐条处理,而不是整个结果集一起处理,因此,游标是在PL/SQL语言中实现过程化处理的核心功能。

  3. 记录对于游标结果记录的处理很方便,通过记录变量可以直接访问记录的每个属性,而无需为记录的每个属性定义相应的变量。

5.实验总结

学习了存储过程定义、存储过程运行,存储过程更名,存储过程删除,存储过程的参数传递。掌握 PL/SQL 编程语言和编程规范,规范设计存储过程。
学习了自定义函数定义、自定义函数运行,自定义函数更名,自定义函数删除,自定义函数的参数传递。掌握 PL/SQL 和编程规范,规范设计自定义函数。
学习了游标定义、游标使用。掌握各种类型游标的特点、区别与联系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/109113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

股票价、量走势图绘制

在证券投资分析领域中价、量走势分布图是投资者常用的一个参考方面。本案例主要介绍股票每日收盘价格、成交量的走势图以及月交易量分布饼图的绘制技能,并进一步介绍了子图的绘制方法。今有股票代码600000行情交易数据表(trd.xlsx)&#xff0…

SPDK线程模型

一、reactor线程 与传统的reactor线程模型相比,SPDK的reactor在功能实现上还是有很大区别的,线程不在基于流水线形式进行作业,而是采用Run-To-Complete来做运行处理。 如图所示,每个reactor线程会绑定一个cpu core,线…

力扣刷题笔记day7(数组中重复的数字+在排序数组中查找数字+0~n-1中缺失的数字)

文章目录数组中重复的数字题目思路代码在排序数组中查找数据题目思路代码0~n-1中缺失的数字题目思路代码数组中重复的数字 题目 思路 创建一个哈希表,将数组遍历,如果不存在则添加到哈希表中,如果存在则直接返回 代码 var fin…

电磁功率流和坡印廷矢量

回顾: 场源的影响周围的快慢取决于距离和传播速度 场源变化引起电磁波,电磁波传输能量 电磁能量的流动满足能量守恒定律 我们关心的是 体积V里面和体积外怎么交换能量,S是包围的闭合面 大家想一想,体积里面有场源 随着能量的…

Spring 中使用Nacos服务发现

引入依赖 <dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-spring-context</artifactId><version>${latest.version}</version> </dependency>本文使用的版本为&#xff1a;1.1.1&#xff08;与Spring 中…

微服务(二)——注册中心(Eureka、Nacos)

目录1. 概念2. Eureka1. 服务搭建1. 依赖导入2. 配置文件3. 启动项目2. 服务注册1. 依赖导入2. 配置文件3. 启动多个实例3. 服务发现1. 依赖导入2. 配置文件3. 服务拉取和负载均衡4. 小结3. Ribbon1. 负载均衡流程2. 负载均衡策略3. 加载策略4. Nacos1. 下载安装2. 注册中心1. …

css:隐藏input file标签并触发点击上传文件事件

目录方式一&#xff1a;将input标签覆盖到按钮的最上层方式二&#xff1a;通过label标签触发点击事件方式三&#xff1a;js触发文件上传的点击事件总结通用的按钮样式 /* button样式来自element-ui */ .button {color: #fff;background-color: #409eff;display: inline-block;…

【MQTT】mqtt + go + M5Stack + SSR 远程灯控程序

1. mqtt服务搭建 参考上一篇文章【MQTT】mqtt 服务器部署--go 生产和消费demo_平静不绝望的博客-CSDN博客 2. M5stack 烧录和编程 详细文档&#xff1a;m5-docs mac 需要安装USB驱动 和 m5burner 如下图 3. flow ui 编程 SSR 4. go web远程代码 s.Router.HandleFunc(&…

UE中的FString操作

此篇是指单纯记录&#xff0c;方便之后查阅。 目录 创建 转型到FString FString转型到其他类型 字符串中是否包含指定串 查找给定串在其中是什么位置 字符串比较 读文件 裁剪字符串 编码解决的是文字问题 稍微细致一些的可以看&#xff1a; UE4随笔&#xff1a;FStri…

TI 2640 Quick start

&#xff08;1&#xff09;下载ccs 并且安装 &#xff08;2&#xff09;下载对应版本的SDK&#xff0c;并且安装 SDK对应版本下载可以通过搜索的方式&#xff1a;simplelink_cc2640r2_sdk_5_30_00_03 &#xff08;3&#xff09;导入对应的工程文件 此篇文档可以作为参考&#x…

喜讯丨计讯物联荣获厦门软件园党群服务中心篮球赛亚军

蓄势待发迎“篮”上&#xff0c;齐心协力谱新篇。12月17日&#xff0c;厦门软件园党群服务中心篮球赛完美落幕。计讯物联一路过关斩将&#xff0c;荣获厦门软件园党群服务中心篮球赛亚军。 决胜雅马哈&#xff0c;强势晋级半决赛 随着一声哨响&#xff0c;比赛正式拉开帷幕&…

2个月备考通过系统架构设计师考试,把经验分享给孤军奋战的你

一、前言 本来于2022-08-29报考系统架构设计师&#xff0c;报考完成以后才开始了正式的学习&#xff0c;也就是9月初才开始系统学习&#xff0c;2022-11-05开始考试&#xff0c;中间准备了两个月的时间。 当时公司业务受疫情影响严重&#xff0c;领导叫我考一个证书吧&#xf…

Android制作简易的音乐播放器和视频播放器

文章目录制作简易的音乐播放器和视频播放器播放多媒体文件播放音频MediaPlayer的工作流程项目示例播放视频项目示例制作简易的音乐播放器和视频播放器 播放多媒体文件 Android在播放音频和视频方面做了非常不错的支持,它提供了一套非常完整的API,使得开发者可以轻松编写出一个…

JavaEE入门知识

1.为什么要学习框架&#xff1f; 1. 学习框架相当于从“⼩作坊”到“⼯⼚”的升级&#xff0c;⼩作坊什么都要⾃⼰做&#xff0c;⼯⼚是组件式装配&#xff0c;特点就是⾼效。 2. 框架更加易⽤、简单且⾼效。 2.创建一个Servlet项目&#xff08;我使用的是IDEA专业版&#…

USB TO SPI(上海同旺电子)调试器调试MCP6S92

所需设备&#xff1a; 1、USB TO SPI(上海同旺电子)&#xff1b; 2、MCP6S92 单端轨到轨输入/ 输出低增益PGA; 特性 • 复用输入&#xff1a;1 或2 个通道 • 8 种增益选择&#xff1a; - 1、2、4、5、8、10、16 或32 V/V • 串行外设接口&#xff08;SPI&#xff09; • 轨…

生成模型(三):基于流的生成模型(Flow-based model)

本文大纲如下&#xff1a; 到目前为止&#xff0c;已经介绍了[[生成模型-GAN]]和[[生成模型-VAE]]。它们都没有明确地学习真实数据的概率密度函数p(\mathbf{x})&#xff08;其中\mathbf{x}\in \mathcal{D}&#xff09;, 因为很难。以带有潜变量的生成模型为例&#xff0c;p(\ma…

Web前端105天day61-HTML5_CORE

HTML5CORE01 目录 前言 一、拖拽上传文件 1.1.文件上传 二、跨域 三、跨域解决方案 四、查看网站接口 五、文件上传服务 总结 前言 HTML5CORE01学习开始 HTML5 : 目前主流的 HTML 版本, 其中增加了很多新特性例如: 音视频, 网页存储技术 - webStorage一、拖拽上传文件…

TensorRT学习笔记 1 - 概述

TensorRT系列笔记是作者半年来学习和使用TensorRT(后称trt)积累笔记 整理和心得。包含trt的基本概念&#xff0c;相关资料&#xff0c;实践笔记&#xff0c;踩坑记录等等。 本篇博客希望可以初步说清楚 trt是什么&#xff1b;模型部署为什么使用trt&#xff0c;以及使用trt的…

渗透攻击MS08-067

学校课程关于Metasploit有基础的几个小实验&#xff0c;把它整理分享在这里。 实训目的&#xff1a; 熟悉Metasploit终端的使用方法&#xff0c;了解MS08-067漏洞&#xff0c;掌握对MS08-067漏洞攻击的方法。 场景描述&#xff1a; 在虚拟机环境下配置 “WinXP1”和“Kali …

华为机试_HJ63 DNA序列【中等】

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 解题过程 提交代码 学习代码 代码一 收藏点 描述 一个 DNA 序列由 A/C/G/T 四个字母的排列组合组成。 G 和 C 的比例&#xff08;定义为 GC-Ratio &#xff09;是序列中 G 和 C 两个字母的总的出现次数除以总的字…