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

《SQL基础》14. 存储过程 · 存储函数

存储过程 · 存储函数

  • 存储过程
    • 基本语法
    • 变量
      • 系统变量
      • 用户定义变量
      • 局部变量
    • if判断
    • 参数
    • case判断
    • while循环
    • repeat循环
    • loop循环
    • 游标
    • 条件处理程序
  • 存储函数


存储过程

存储过程事先经过编译并存储在数据库中的一段SQL语句的集合。调用存储过程可以简化应用开发人员的工作,减少数据在数据库和应用服务器之间的传输,能够提高数据处理的效率。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用

特点

  • 封装,复用
  • 可以接收参数,也可以返回数据
  • 减少网络交互,提升效率

基本语法

创建存储过程

CREATE PROCEDURE 存储过程名称([参数列表])
BEGINsql语句1;...sql语句n;
END;

在命令行中,执行创建存储过程的SQL时,需要通过关键字 delimiter 指定SQL语句的结束符。

调用存储过程
CALL 存储过程名([参数]);

查询指定数据库的存储过程及状态信息
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = '数据库名';

查询某个存储过程的定义
SHOW CREATE PROCEDURE 存储过程名;

删除数据库名
DROP PROCEDURE [IF EXISTS] 存储过程名称;

示例,设 student表 在 test1库 中:

CREATE TABLE student(id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',name VARCHAR(10) COMMENT '姓名',stuno VARCHAR(10) COMMENT '学号'
) COMMENT '学生表';INSERT INTO student VALUES(null, '黛绮丝', '2000100101'), (null, '谢逊', '2000100102'), (null, '殷天正', '2000100103'), (null, '韦一笑', '2000100104');# 创建存储过程
CREATE PROCEDURE p1()
BEGINSELECT COUNT(*) FROM student;
END;# 调用存储过程
CALL p1();# 查询test1数据库的存储过程及状态信息
SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = 'test1';# 查询p1存储过程的定义
SHOW CREATE PROCEDURE p1;# 删除存储过程
DROP PROCEDURE IF EXISTS p1;

如果是在命令行中创建存储过程:

# 先通过关键字 delimiter 指定SQL语句的结束符为 “$$”(可随意指定)
DELIMITER $$# 然后可进行存储过程创建
CREATE PROCEDURE p1()
BEGINSELECT COUNT(*) FROM student;
END$$# 最后将结束符再修改为“;”
DELIMITER ;

变量

在MySQL中变量分为三种类型:系统变量、用户定义变量、局部变量。

系统变量

系统变量是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL)、会话变量(SESSION)。

查看全局所有系统变量
SHOW GLOBAL VARIABLES;

查看当前会话所有系统变量
SHOW [SESSION] VARIABLES;

通过模糊匹配方式查找变量
SHOW [SESSION或GLOBAL] VARIABLES LIKE '变量';

查看指定变量的值(全局)
SELECT @@GLOBAL.系统变量名;

查看指定变量的值(当前会话)
SELECT @@[SESSION.]系统变量名;

设置全局系统变量
方式一:SET @@GLOBAL.系统变量名 = 值;
方式二:SET GLOBAL 系统变量名 = 值;

设置当前会话系统变量
方式一:SET @@[SESSION.]系统变量名 = 值;
方式二:SET [SESSION] 系统变量名 = 值;

mysql服务重新启动之后,所设置的全局参数会失效,要想不失效,可以在 /etc/my.cnf 中配置。

用户定义变量

用户定义变量是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用“@变量名”使用就可以。其作用域为当前连接。

赋值
方式一:SET @变量1 = 值, @变量2 = 值, ..., @变量n = 值;
方式二:SET @变量1 := 值, @变量2 := 值, ..., @变量n := 值;
方式三:SELECT @变量1 := 值, @变量2 := 值, ..., @变量n := 值;
方式四:SELECT 查询结果 INTO @变量 FROM 表名;

使用或查询
SELECT @变量名;

注:用户定义的变量无需对其进行声明或初始化,只不过获取到的值为NULL。

示例:

# 赋值示例
SET @myname = 'itcast';
SET @myage := 10;
SET @mygender := '男', @myhobby := 'java';
SELECT @mycolor := 'red';
SELECT COUNT(*) INTO @mycount FROM tb_user;# 使用或查询
SELECT @myname, @myage, @mygender, @myhobby;
SELECT @mycolor, @mycount;

局部变量

局部变量是根据需要定义的在局部生效的变量,访问之前,需要DECLARE声明。可用作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGIN … END块。

声明
DECLARE 变量名 变量类型 [DEFAULT 初始值];

赋值
方式一:SET 变量1 = 值, 变量2 = 值, ..., 变量n = 值;
方式二:SET 变量 := 值;
方式三:SELECT 查询结果 INTO 变量 FROM 表名;

以基本语法里的student表为例:

# 局部变量声明与赋值
CREATE PROCEDURE p2()
BEGINDECLARE stu_count INT DEFAULT 0;SELECT COUNT(*) INTO stu_count FROM student;SELECT stu_count;
END;CALL p2();

if判断

if 用于做条件判断。

语法

IF 条件1 THENsql语句1;...sql语句n;
ELSEIF 条件2 THENsql语句1;...sql语句n;
ELSEsql语句1;...sql语句n;
END IF;

在if条件判断的结构中,ELSEIF 结构可以有多个,也可以没有。ELSE结构可以有,也可以没有。

示例:

/*
根据定义的分数score变量,判定当前分数对应的分数等级。
score >= 85分,等级为优秀。
score >= 60分 且 score < 85分,等级为及格。
score < 60分,等级为不及格。
*/
CREATE PROCEDURE p3()
BEGINDECLARE score INT DEFAULT 58;DECLARE result VARCHAR(10);IF score >= 85 THENSET result := '优秀';ELSEIF score >= 60 THENSET result := '及格';ELSESET result := '不及格';END IF;SELECT result;
END;CALL p3();

上述的需求已经实现了,但是存在一些问题,比如:score 分数是在存储过程中定义死的,而且最终计算出来的分数等级也仅仅是最终查询展示出来而已。
怎样把score分数动态的传递进来,计算出来的分数等级作为返回值返回?
可以通过参数来解决上述问题。

参数

参数的类型,主要分为三种:IN、OUT、INOUT。

类型含义备注
IN该类参数作为输入,也就是调用时需要传入值默认
OUT该类参数作为输出,也就是该参数可以作为返回值
INOUT既可以作为输入参数,也可以作为输出参数

语法

CREATE PROCEDURE 存储过程名称([参数类型 参数名 属性类型])
BEGINsql语句;...
END;

示例一:

/*
根据传入参数score,判定当前分数对应的分数等级,并返回。
score >= 85分,等级为优秀。
score >= 60分 且 score < 85分,等级为及格。
score < 60分,等级为不及格。
*/
CREATE PROCEDURE p4(IN score INT, OUT result VARCHAR(10))
BEGINIF score >= 85 THENSET result := '优秀';ELSEIF score >= 60 THENSET result := '及格';ELSESET result := '不及格';END IF;
END;# 定义用户变量 @result 来接收返回的数据,用户变量可以不用声明
CALL p4(98, @result);SELECT @result;

示例二:

# 将传入的200分制的分数换算成百分制,然后返回。
CREATE PROCEDURE p5(INOUT score DOUBLE)
BEGINSET score := score * 0.5;
END;SET @score = 198;CALL p5(@score);SELECT @score;

case判断

case结构及作用,和流程控制函数类似。有两种语法格式。

语法一

CASE case_valueWHEN1 THEN sql语句;...WHEN 值n THEN sql语句;[ELSE sql语句;]
END CASE;

含义:当case_value的值为 值n 时,执行对应后面的sql语句,否则就执行else后面的SQL语句。

语法二

CASEWHEN 条件1 THEN sql语句;...WHEN 条件n THEN sql语句;[ELSE sql语句;]
END CASE;

示例:

/*
根据传入的月份,判定月份所属的季节(要求采用case结构)。
1-3月份,为第一季度
4-6月份,为第二季度
7-9月份,为第三季度
10-12月份,为第四季度
*/
CREATE PROCEDURE p6(IN my_month INT)
BEGINDECLARE result VARCHAR(10);CASEWHEN my_month >= 1 AND my_month <= 3 THENSET result := '第一季度';WHEN my_month >= 4 AND my_month <= 6 THENSET result := '第二季度';WHEN my_month >= 7 AND my_month <= 9 THENSET result := '第三季度';WHEN my_month >= 10 AND my_month <= 12 THENSET result := '第四季度';ELSESET result := '非法参数';END CASE;SELECT CONCAT('您输入的月份为: ', my_month, ', 所属的季度为: ',result);END;CALL p6(16);

如果判定条件有多个,多个条件之间,可以使用 and 或 or 进行连接。

while循环

while循环是有条件的循环控制语句。满足条件后,再执行循环体中的SQL语句。

WHILE 条件 DOsql逻辑;
END WHILE;

含义:先判定条件,如果条件为true,则执行逻辑,否则,不执行逻辑。

示例:

# 计算从1累加到n的值,n为传入的参数值。
CREATE PROCEDURE p7(IN n INT)
BEGINDECLARE total INT DEFAULT 0;WHILE n>0 DOSET total := total + n;SET n := n - 1;END WHILE;SELECT total;
END;CALL p7(100);

repeat循环

repeat是有条件的循环控制语句,当满足until声明的条件的时候,退出循环。

语法

REPEATSQL逻辑;
UNTIL 条件
END REPEAT;

先执行一次逻辑,然后判定UNTIL条件是否满足,如果满足,则退出。如果不满足,则继续下一次循环。

示例:

# 计算从1累加到n的值,n为传入的参数值。
CREATE PROCEDURE p8(IN n INT)
BEGINDECLARE total INT DEFAULT 0;REPEATSET total := total + n;SET n := n - 1;UNTIL n <= 0END REPEAT;SELECT total;
END;CALL p8(10);CALL p8(100);

loop循环

LOOP 实现简单的循环,如果不在SQL逻辑中增加退出循环的条件,可以用其来实现简单的死循环。

LOOP可以配合以下两个语句使用:

  • LEAVE:配合循环使用,退出循环。
  • ITERATE:只能在循环中使用,作用是跳过当前循环剩下的语句,直接进入下一次循环。

基础语法

[标记:] LOOPSQL逻辑;
END LOOP [标记];

退出指定标记的循环体
LEAVE 标记;

直接进入下一次循环
ITERATE 标记;

示例一

# 计算从1累加到n的值,n为传入的参数值。
CREATE PROCEDURE p9(IN n INT)
BEGINDECLARE total INT DEFAULT 0;sum:LOOPIF n <= 0 THENLEAVE sum;END IF;SET total := total + n;SET n := n - 1;END LOOP sum;SELECT total;
END;CALL p9(100);

示例二

# 计算从1到n之间的偶数累加的值,n为传入的参数值。
CREATE PROCEDURE p10(IN n INT)
BEGINDECLARE total INT DEFAULT 0;sum:LOOPIF n <= 0 THENLEAVE sum;END IF;IF n % 2 = 1 THENSET n := n - 1;ITERATE sum;END IF;SET total := total + n;SET n := n - 1;END LOOP sum;SELECT total;
END;CALL p10(100);

游标

游标(CURSOR)是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、OPEN、FETCH 和 CLOSE。

声明游标
DECLARE 游标名称 CURSOR FOR 查询语句;

要先声明普通变量,再声明游标

打开游标
OPEN 游标名称;

获取游标记录
FETCH 游标名称 INTO 变量1, ..., 变量n;

关闭游标
CLOSE 游标名称;

如果只使用游标,实现的程序逻辑并不完善,而且程序执行完毕后,很可能获取不到数据,数据库还会报错。
要解决这个问题,需要通过MySQL中提供的条件处理程序(Handler)来解决。

条件处理程序

条件处理程序(Handler)可以用来定义在流程控制结构执行过程中遇到问题时相应的处理步骤。

声明条件处理程序
DECLARE 条件处理程序类型 HANDLER FOR 条件处理程序条件1, ..., 条件处理程序条件n sql逻辑;

条件处理程序类型含义
CONTINUE继续执行当前程序
EXIT终止执行当前程序
条件处理程序条件解释
SQLSTATE ‘状态码’根据执行sql语句时抛出的状态码(错误码)来决定如何执行程序
SQLWARNING所有以01开头的SQLSTATE代码的简写
NOT FOUND所有以02开头的SQLSTATE代码的简写
SQLEXCEPTION所有没有被 SQLWARNING 或 NOT FOUND 捕获的SQLSTATE代码的简写

示例:

CREATE TABLE tb_user(id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',name VARCHAR(50) NOT NULL COMMENT '用户名',phone VARCHAR(11) NOT NULL COMMENT '手机号',email VARCHAR(100) COMMENT '邮箱',profession VARCHAR(11) COMMENT '专业',age TINYINT UNSIGNED COMMENT '年龄',gender CHAR(1) COMMENT '性别, 1: 男, 2: 女',user_status CHAR(1) COMMENT '状态',createtime DATETIME COMMENT '创建时间'
) COMMENT '系统用户表';INSERT INTO tb_user (name, phone, email, profession, age, gender, user_status, createtime) 
VALUES ('吕布', '17799990000', 'lvbu666@163.com', '软件工程', 23, '1', '6', '2001-02-02 00:00:00'), ('曹操', '17799990001', 'caocao666@qq.com', '通讯工程', 33, '1', '0', '2001-03-05 00:00:00'), ('赵云', '17799990002', '17799990@139.com', '英语', 34, '1', '2', '2002-03-02 00:00:00'), ('孙悟空', '17799990003', '17799990@sina.com', '工程造价', 54, '1', '0', '2001-07-02 00:00:00'), ('花木兰', '17799990004', '19980729@sina.com', '软件工程', 23, '2', '1', '2001-04-22 00:00:00'), ('大乔', '17799990005', 'daqiao666@sina.com', '舞蹈', 22, '2', '0', '2001-02-07 00:00:00'), ('露娜', '17799990006', 'luna_love@sina.com', '应用数学', 24, '2', '0', '2001-02-08 00:00:00'), ('程咬金', '17799990007', 'chengyaojin@163.com', '化工', 38, '1', '5', '2001-05-23 00:00:00'), ('项羽', '17799990008', 'xiaoyu666@qq.com', '金属材料', 43, '1', '0', '2001-09-18 00:00:00'), ('白起', '17799990009', 'baiqi666@sina.com', '机械工程及其自动化', 27, '1', '2', '2001-08-16 00:00:00'), ('韩信', '17799990010', 'hanxin520@163.com', '无机非金属材料工程', 27, '1', '0', '2001-06-12 00:00:00'), ('荆轲', '17799990011', 'jingke123@163.com', '会计', 29, '1', '0', '2001-05-11 00:00:00'), ('兰陵王', '17799990012', 'lanlinwang666@126.com', '工程造价', 44, '1', '1', '2001-04-09 00:00:00'), ('狂铁', '17799990013', 'kuangtie@sina.com', '应用数学', 43, '1', '2', '2001-04-10 00:00:00'), ('貂蝉', '17799990014', '84958948374@qq.com', '软件工程', 40, '2', '3', '2001-02-12 00:00:00'), ('妲己', '17799990015', '2783238293@qq.com', '软件工程', 31, '2', '0', '2001-01-30 00:00:00'), ('芈月', '17799990016', 'xiaomin2001@sina.com', '工业经济', 35, '2', '0', '2000-05-03 00:00:00'), ('嬴政', '17799990017', '8839434342@qq.com', '化工', 38, '1', '1', '2001-08-08 00:00:00'), ('狄仁杰', '17799990018', 'jujiamlm8166@163.com', '国际贸易', 30, '1', '0', '2007-03-12 00:00:00'), ('安琪拉', '17799990019', 'jdodm1h@126.com', '城市规划', 51, '2', '0', '2001-08-15 00:00:00'), ('典韦', '17799990020', 'ycaunanjian@163.com', '城市规划', 52, '1', '2', '2000-04-12 00:00:00'), ('廉颇', '17799990021', 'lianpo321@126.com', '土木工程', 19, '1', '3', '2002-07-18 00:00:00'), ('后羿', '17799990022', 'altycj2000@139.com', '城市园林', 20, '1', '0', '2002-03-10 00:00:00'), ('姜子牙', '17799990023', '37483844@qq.com', '工程造价', 29, '1', '4', '2003-05-26 00:00:00');/*
根据传入的参数uage,来查询用户表tb_user中年龄小于等于uage的用户姓名(name)和专业(profession),
并将用户的姓名和专业插入到所创建的一张新表(id,name,profession)中。
*/
CREATE PROCEDURE p11(IN uage INT)
BEGINDECLARE uname VARCHAR(100);DECLARE upro VARCHAR(100);# 声明游标,存储查询结果集DECLARE u_cursor CURSOR FOR SELECT name, profession FROM tb_user WHERE age <= uage;# 声明条件处理程序:当SQL语句执行抛出的状态码为02000时,将关闭游标u_cursor,并退出DECLARE EXIT HANDLER FOR SQLSTATE '02000' CLOSE u_cursor;# 上面一句也可替换为:# DECLARE EXIT HANDLER FOR NOT FOUND CLOSE u_cursor;DROP TABLE IF EXISTS tb_user_pro;CREATE TABLE IF NOT EXISTS tb_user_pro(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100),profession VARCHAR(100));OPEN u_cursor;WHILE TRUE DO# 获取游标中的记录FETCH u_cursor INTO uname, upro;# 插入数据到新表中INSERT INTO tb_user_pro VALUES (NULL, uname, upro);END WHILE;CLOSE u_cursor;
END;CALL p11(30);

具体的错误状态码,可以参考官方文档:
https://dev.mysql.com/doc/refman/8.0/en/declare-handler.html
https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html

存储函数

存储函数是有返回值的存储过程,存储函数的参数只能是IN类型的。

语法

CREATE FUNCTION 存储函数名称([参数列表])
RETURNS 返回值类型 [characteristic列表]
BEGINsql逻辑;RETURN 返回值列表;
END ;
characteristic类型说明
DETERMINISTIC相同的输入参数总是产生相同的结果
NO SQL不包含 SQL 语句
READS SQL DATA包含读取数据的语句,但不包含写入数据的语句

示例:

# 计算从1累加到n的值,n为传入的参数值。
CREATE FUNCTION fun1(n INT)
RETURNS INT DETERMINISTIC
BEGINDECLARE total INT DEFAULT 0;WHILE n > 0 DOSET total := total + n;SET n := n - 1;END WHILE;RETURN total;
END;SELECT fun1(50);

在mysql8.0版本中binlog默认是开启的。一旦开启了,mysql就要求在定义存储函数时,需要指定characteristic特性,否则就会报错。

存储函数用的相对较少,存储函数能做的,存储过程也能做。

相关文章:

《SQL基础》14. 存储过程 · 存储函数

存储过程 存储函数存储过程基本语法变量系统变量用户定义变量局部变量if判断参数case判断while循环repeat循环loop循环游标条件处理程序存储函数存储过程 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合。调用存储过程可以简化应用开发人员的工作&#xff0c;减…...

NFT Insider #87:The Sandbox 收购游戏开发工作室 Sviper,GHST 大迁徙即将拉开帷幕

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members(https://twitter.com/WHALEMembers)、BeepCrypto&#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周…...

html部分codewhy网课学习笔记

day1 网页显示的过程和服务器 浏览器内核,也称为渲染引擎 head标签描述网页的原数据&#xff0c;如title shifttab是向前缩进 div>ul>li可以快速生成 <div> <ul> <li></li> </ul> </div> 在早期,单标签如<input>也可写为&l…...

电脑出问题了怎么重装系统修好

电脑在使用过程中经常会出现各种各样的问题&#xff0c;如系统崩溃、蓝屏、病毒感染等。这些问题如果不能及时得到解决&#xff0c;将会给用户带来很多麻烦和损失。小白一键重装系统是一个功能强大的工具&#xff0c;可以帮助用户快速解决电脑常见问题。下面我们就来详细介绍如…...

Nginx国密支持问题记录

文章目录添加国密支持可能出现的问题国密不生效&#xff0c;查看 Nginx 可执行文件路径是否正确证书无法解析Nginx无法启动添加国密支持 NGINX添加国密支持 添加国密支持可以直接按照官网的操作顺序操作即可 参考网址&#xff1a;https://www.gmssl.cn/gmssl/index.jsp 可能出…...

基于ensp的小型局域网网络搭建及需求分析

一 需求分析本实验的目的在于建立小型局域网。由于公司由财政部、人事部、科技部三个部门组成&#xff0c;分布在同一个交换机下。设计以下网络&#xff1a;三个个部门使用两台交换机连接&#xff0c;然后连接到汇聚交换机&#xff0c;再通过路由器与外网以及其他部门网络相连。…...

Kubernetes学习(二)Pod

创建Pod kubectl创建nginx pod 编写 nginx pod的yaml文件 apiVersion: v1 kind: Pod metadata:name: my-nginxlabels:name: my-nginx spec:containers:- image: nginxname: my-nginxresources:limits:memory: "128Mi"cpu: "500m"ports:- name: nginx-po…...

【Docker】docker | 迁移docker目录

一、场景说明1、物理机磁盘空间不够用了2、docker的镜像、容器、卷等资料的默认路径为&#xff1a; /var/lib/docker3、增加了数据盘挂在&#xff0c;需要将docker的全部资料更换个目录二、操作确认是否满足切换条件1&#xff09;服务是否能够暂停&#xff0c;如果可以就OK2&am…...

day24_多线程进阶

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、线程安全的集合 三、死锁 四、线程通信 五、生产者消费者 六、线程池 零、 复习昨日 创建线程的几种方式 1) 继承 2) 实现Runnable 3) calla…...

Qt实现系统桌面目录下文件搜索的GUI:功能一:文件查找与现实

⭐️我叫恒心&#xff0c;一名喜欢书写博客的研究生在读生。 原创不易~转载麻烦注明出处&#xff0c;并告知作者&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 这是一篇近期会不断更新的博客欧~~~ 有什么问题的小伙伴 欢迎留言提问欧。 功能点一&#xff1a;文件查找与…...

有关数据库的一级、二级、三级封锁协议

一级封锁协议 一级封锁协议是指&#xff0c;事务T在修改数据R之前必须先对其加X锁&#xff0c;直到事务结束才释放。事务结束包括正常结束&#xff08;COMMIT&#xff09;和非正常结束&#xff08;ROLLBACK).一级封锁协议可防止丢失修改&#xff0c;并保证事务T是可恢复的。在…...

【Android Studio】【学习笔记】【2023春】

文章目录零、常用一、界面布局疑问&报错零、常用 一、界面布局 Android——六大基本布局总结/CSDN小马 同学 【Android】线性布局&#xff08;LinearLayout&#xff09;最全解析/CSDNTeacher.Hu 一个不错的计算器界面&#x1f447; Android Studio App LinearLayout多层…...

window.open()下载文件重命名/js下载文件重命名/js跨域下载文件重命名

普通文件下载 // 1 var fileUrl https://xxxx.docx; window.open(fileUrl"?attname文档.docx");// 2 var a document.createElement(a); a.href https://xxxx.docx; a.download 文档.docx; a.target "_blank"; a.click();以上方式 attname 和 a.down…...

zookeeper:简介及常用命令

目录 一、Zookeeper简介 二、Zookeeper服务端常用命令 1、启动ZooKeeper服务 2、查看ZooKeeper服务状态 3、停止ZooKeeper服务 4、重启ZooKeeper服务 三、Zookeeper客户端常用命令 1、连接ZooKeeper服务端 2、断开连接&#xff1a;quit 3、查看命令帮助&#xff1a;help…...

与流程挖掘布道者熵评科技孙一鸣博士共话流程挖掘市场的起源与前景 | 爱分析访谈

调研&#xff1a;李进宝 陈元新 撰写&#xff1a;李进宝 陈元新 随着数字化转型持续深入&#xff0c;国内企业流程挖掘需求初露端倪。流程挖掘是指通过采集和分析企业数据&#xff0c;以可视化流程图还原企业实际发生的业务流程&#xff0c;进而评估流程运行状况、诊断流程运…...

第十一届蓝桥杯省赛——2解密

题目&#xff1a;【问题描述】小明设计了一种文章加密的方法&#xff1a;对于每个字母 c&#xff0c;将它变成某个另外的字符 Tc。下表给出了字符变换的规则&#xff1a;字母cTc字母cTc字母cTc字母cTcaynlAYNLbxogBXOGcmpoCMPOddquDDQUearfEARFfcssFCSSgitzGITZhkupHKUPinvwINV…...

ChatGPT解答:PYQT5 美化各种控件的方案和实例

ChatGPT解答&#xff1a;PYQT5 美化各种控件的方案和实例 修改按钮样式 button QPushButton(按钮, self) button.setStyleSheet(QPushButton{background-color: red; border-radius: 5px;})修改标签样式 label QLabel(标签, self) label.setStyleSheet(QLabel{color: blue; …...

js实现翻盘抽奖

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>礼物编辑</title><style>* {margin: 0;padding: 0;box-sizing: border-box;list-style-type: none;text-decoration: none;}.container {d…...

Qt QtCreator 安卓开发环境搭建

踩坑 我的qt是使用在线安装工具安装的&#xff0c;Qt版本使用的是5.15.2&#xff0c;QtCreator版本9.0.2 在网上很多教程都是如下步骤 1.安装qt 2.安装jdk 3.安装android-sdk 4.安装android-ndk 5.配置android设置 例如&#xff1a; https://blog.csdn.net/weixin_51363326/…...

Flutter知识点(二)处理Json

flutter不支持反射&#xff0c;所以本来很简单的事情&#xff0c;一下子变复杂了。当然官方也提供了一些工具来方便开发者。 由于Dart的map和array的数据结构和json一样&#xff0c;所以在flutter中&#xff0c;变成了json string与Map&#xff0c;array之间的砖换。 &#x…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...