跟我学MySQL存储过程

ROS2+PX4无人机编队仿真环境搭建核心原理与避坑指南 ROS2与PX4联合仿真是多智能体协同控制的关键技术路径,其本质是跨栈系统工程:底层依赖Linux实时调度能力,中间层依托DDS中间件实现确定性通信,上层需飞控固件与ROS桥接模块的精确版本对齐,外层则受物理引擎建模精度制约。技术价值在于支撑高可靠、低抖动、可复现的编队算法验证,广泛应用于集群路径规划、分布式状态估计和抗扰协同控制等场景。本文聚焦ROS2 Jazzy与PX4 v1.14.1组合下的环境构建逻辑,深入解析Cyclone DDS替代Fast DDS的确定性增益、Gazebo Sim v6对DAR 阅读详情

1.1         CREATE  PROCEDURE  (创建)

CREATE PROCEDURE存储过程名 (参数列表)
   BEGIN
         SQL语句代码块
END
注意:
由括号包围的参数列必须总是存在。如果没有参数,也该使用一个空参数列()。每个参数默认都是一个IN参数。要指定为其它参数,可在参数名之前使用关键词 OUT或INOUT
mysql客户端定义存储过程的时候使用delimiter命令来把语句定界符从;变为//。
当使用delimiter命令时,你应该避免使用反斜杠(‘"’)字符,因为那是MySQL的转义字符。
如:
mysql> delimiter //
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO param1 FROM t;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)

1.2         ALTER  PROCEDURE (修改)

ALTER PROCEDURE 存储过程名SQL语句代码块
这个语句可以被用来改变一个存储程序的特征。

1.3         DROP  PROCEDURE (删除)

DROP PROCEDURE  IF  EXISTS存储过程名

eg:DROP PROCEDURE IF EXISTS proc_employee (proc_employee 存储过程名)

这个语句被用来移除一个存储程序。不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

1.4         SHOW  CREATE  PROCEDURE(类似于SHOW CREATE TABLE,查看一个已存在的存储过程)

SHOW CREATE PROCEDURE 存储过程名

1.5         SHOW  PROCEDURE  STATUS (列出所有的存储过程)

SHOW  PROCEDURE  STATUS

1.6         CALL语句(存储过程的调用)

CALL 存储过程名(参数列表)

CALL语句调用一个先前用CREATE PROCEDURE创建的程序。
CALL语句可以用声明为OUT或的INOUT参数的参数给它的调用者传回值。
存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

1.7         BEGIN ... END(复合语句)

[begin_label:] 
BEGIN
    [statement_list]
END 
[end_label]

存储子程序可以使用BEGIN ... END复合语句来包含多个语句。

statement_list 代表一个或多个语句的列表。statement_list之内每个语句都必须用分号(;)来结尾。

复合语句可以被标记。除非begin_label存在,否则end_label不能被给出,并且如果二者都存在,他们必须是同样的。

1.8         DECLARE语句(用来声明局部变量)

DECLARE语句被用来把不同项目局域到一个子程序:局部变量

DECLARE仅被用在BEGIN ... END复合语句里,并且必须在复合语句的开头,在任何其它语句之前。

1.9         存储程序中的变量

1.1             DECLARE局部变量

DECLARE var_name[,...] type [DEFAULT value]
这个语句被用来声明局部变量。
要给变量提供一个默认值,请包含一个DEFAULT子句。
值可以被指定为一个表达式,不需要为一个常数。
如果没有DEFAULT子句,初始值为NULL。
局部变量的作用范围在它被声明的BEGIN ... END块内。
它可以被用在嵌套的块中,除了那些用相同名字声明变量的块。

1.2             变量SET语句

SET var_name = expr [, var_name = expr] 
在存储程序中的SET语句是一般SET语句的扩展版本。
被参考变量可能是子程序内声明的变量,或者是全局服务器变量。
在存储程序中的SET语句作为预先存在的SET语法的一部分来实现。这允许SET a=x, b=y, ...这样的扩展语法。
其中不同的变量类型(局域声明变量及全局和集体变量)可以被混合起来。
这也允许把局部变量和一些只对系统变量有意义的选项合并起来。

1.3             SELECT ... INTO语句

SELECT col_name[,...] INTO var_name[,...] table_expr
这个SELECT语法把选定的列直接存储到变量。
因此,只有单一的行可以被取回。
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
注意,用户变量名在MySQL 5.1中是对大小写不敏感的。

重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。

1.10     MySQL 存储过程参数类型(in、out、inout)

此小节内容来自:

参见地址:http://www.blogjava.net/nonels/archive/2009/04/22/233324.html

MySQL 存储过程参数(in)

MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。

MySQL 存储过程参数(out)

MySQL 存储过程 “out” 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值

MySQL 存储过程参数(inout)

MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。

总结

如果仅仅想把数据传给 MySQL 存储过程,那就使用“in” 类型参数;如果仅仅从 MySQL 存储过程返回值,那就使用“out” 类型参数;如果需要把数据传给 MySQL 存储过程,还要经过一些计算后再传回给我们,此时,要使用“inout” 类型参数。

1.11     例子:

1.1            创建存储过程

带(输出参数)返回值的存储过程:

--删除存储过程

DROP PROCEDURE IF EXISTS proc_employee_getCount

--创建存储过程

CREATE PROCEDURE proc_employee_getCount(out n int)

BEGIN

     SELECT COUNT(*) FROM employee ;

END

--MYSQL调用存储过程

CALL proc_employee_getCount(@n);

带输入参数的存储过程:

--删除存储过程

DROP PROCEDURE IF EXISTS proc_employee_findById;

--创建存储过程

CREATE PROCEDURE proc_employee_findById(in n int)

BEGIN

     SELECT * FROM employee where id=n;

END

--定义变量

SET @n=1;

--调用存储过程

CALL proc_employee_findById(@n);

操作存储过程时应注意:

1.          删除存储过程时只需要指定存储过程名即可,不带括号;

2.          创建存储过程时,不管该存储过程有无参数,都需要带括号;

3.          在使用SET定义变量时应遵循SET的语法规则;

SET @变量名=初始值;

4.          在定义存储过程参数列表时,应注意参数名与数据库中字段名区别开来,否则将出现无法预期的结果

1.12     Java代码调用存储过程(JDBC)

相关API:java.sql.CallableStatement

使用到java.sql.CallableStatement接口,该接口专门用来调用存储过程;

该对象的获得依赖于java.sql.Connection;

通过Connection实例的prepareCall()方法返回CallableStatement对象

prepareCall()内部为一固定写法{call 存储过程名(参数列表1,参数列表2)}可用?占位

eg: connection.prepareCall("{call proc_employee(?)}");

存储过程中参数处理:

输入参数:通过java.sql.CallableStatement实例的setXXX()方法赋值,用法等同于java.sql.PreparedStatement

输出参数:通过java.sql.CallableStatement实例的registerOutParameter(参数位置, 参数类型)方法赋值,其中参数类型主要使用java.sql.Types中定义的类型

Java代码调用带输入参数的存储过程 (根据输入ID查询雇员信息)

publicvoid executeProcedure()

    {

        try {

            /**

             *callableStatementjava.sql.CallableStatement

             *connectionjava.sql.Connection

             *jdbc调用存储过程原型

             *{call存储过程名(参数列表1,参数列表2)}可用?代替

             */

            callableStatement=connection.prepareCall("{call proc_employee_findById(?)}");

            callableStatement.setInt(1, 1); //设置输入参数

            resultSet=callableStatement.executeQuery();//执行存储过程

            if(resultSet.next())

            {

                System.out.println(resultSet.getInt(1)+""t"+resultSet.getString(2));

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }  

Java代码调用带输出参数的存储过程 (返回数据库中的记录数)

publicvoid executeProcedure()

    {

        try {

            /**

             *callableStatementjava.sql.CallableStatement

             *connectionjava.sql.Connection

             *jdbc调用存储过程原型

             *{call存储过程名(参数列表1,参数列表2)}可用?代替

             */

            callableStatement=connection.prepareCall("{call proc_employee_getCount(?)}");

            //设置输出参数

            callableStatement.registerOutParameter(1, Types.INTEGER);

            //执行存储过程

            resultSet=callableStatement.executeQuery();

            if(resultSet.next())

            {

                System.out.println(resultSet.getInt(1));

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

1.13       声明:

此文档中除MySQL 存储过程参数类型(inoutinout小节来自网上,其余均为本人原创,欢迎大家转载,如有不足,请指教。

旋翼无人机仿真实战:Gazebo、RViz与PX4工具链搭建与算法验证 机器人仿真技术是机器人研发与算法验证的核心基础设施,它通过构建高保真的虚拟环境,为算法迭代提供了安全、可控且可重复的测试平台。其基本原理是通过物理引擎模拟真实世界的动力学与传感器特性,并与机器人操作系统(ROS)等中间件集成,实现传感器数据流与控制指令的闭环。这项技术的核心价值在于极大降低了研发成本与风险,并加速了从算法设计到工程部署的进程。在无人机、自动驾驶、工业自动化等应用场景中,仿真已成为算法开发、系统集成和人员培训不可或缺的环节。本文聚焦于旋翼无人机领域,深入解析由Gazebo、RViz和PX4构成 阅读详情

相关推荐

从MIL到HIL:在环仿真技术全解析与PX4无人机实战指南

在环仿真(X-in-the-Loop, XiL)是一种通过数学模型或模拟器替代部分真实系统,在实验室环境下进行测试与验证的核心技术。其基本原理是构建一个包含控制器与被控对象的闭环系统,通过软件或硬件模拟来评估系统性能。这项技术的核心价值在于能够大幅降低开发成本、提高效率,并将风险识别与解决前置到早期阶段。它广泛应用于机器人、自动驾驶、航空航天、电力电子及工业控制等多个领域,是进行算法验证、代码测试和系统集成不可或缺的手段。例如,在无人机开发中,通过硬件在环仿真,可以在不进行真实飞行的前提下,对飞控系统进行全

weixin_33743703的博客 502

MYSQL -存储过程

转自:https://www.cnblogs.com/geaozhang/p/6803423.html ####存储过程结构 create or replace procedure proc1( para1 varchar2, para2 out varchar2, para3 in out varchar2 ) as v_name varchar2(20); begin v_name :='...

宝贝散养地 2467

使用MySQL存储过程:创建或替换

MySQL中,我们可以使用"CREATE PROCEDURE"语句来创建存储过程。语句,我们可以创建或替换存储过程,而无需手动删除和重新创建。首先,让我们定义一个示例存储过程,它接受一个输入参数并返回一个结果。在上述代码中,我们使用相同的调用代码来调用修改后的存储过程。当我们运行这段代码时,存储过程将返回两个数字的和加上10的结果。下面,我将为您展示如何使用MySQL创建或替换存储过程,并提供相应的源代码示例。在这个示例中,我们对存储过程进行了修改,将两个数字的和增加了10。在上述代码中,我们使用了。

ZaxfSass的博客 1017

MySQL进阶】存储过程存储函数

MySQL高级进阶

Chovy_pyc的博客 1226

数据库笔记六——存储过程

一、创建 1、简单创建 语法: creat procedure procedure_name[;number] [{@parameter data_type} [varying][=default][output] ][,...n] [with {recompile|encryption|recompile,encryption}] [

张晓 1268

Mysql 无障碍轻松学习(三)DataGrip 连接Mysql 与创建数据库

Mysql无障碍轻松学习系列启航,提供简单实用,少一点概念多一点操作的学习系列。在零基础的第一步通过工具来熟悉来使用数据库达成我们所求的目的,无障碍学习的目的也就在此,让所有程序都变得简单透明。

猫轻王的博客 1万+

Monokode云端开发环境:用Git管理可复现的终端级开发环境

开发环境本质上是软件工程中的‘基础设施即代码’(IaC)问题——它应具备可定义、可版本化、可验证、可协作等工程属性。传统本地配置依赖隐式状态、不可追溯的PATH修改和碎片化工具链,导致环境不一致成为交付瓶颈。Monokode通过Dockerfile + devcontainer.json声明式定义环境,结合容器镜像分层缓存与WebAssembly终端,在浏览器中交付字节级一致、毫秒级启动、权限可控的终端级开发环境。其技术价值在于将环境从物理机器抽象为Git可管理的资源实体,天然支持快照、共享、CI集成与教学

z466459262的专栏 419

MonkeyCode:用声明式YAML实现可复现、可审计的开发环境交付

开发环境配置是软件工程中长期被忽视的‘非功能性需求’,其核心矛盾在于缺乏可复现性与可审计性。传统方案依赖文档、手动安装和经验传承,导致PX4开发环境搭建、VSCode配置STM32、Git安装及配置教程等高频搜索场景反复陷入版本混乱、平台不一致与协作断层。MonkeyCode以‘环境即代码’为设计原点,将开发环境抽象为Git托管的声明式YAML配置,通过轻量容器化+本地工具链融合架构,在保障VSCode编辑体验与Git原生工作流的前提下,实现环境定义、构建、快照、回滚的全生命周期治理。它不是替代Git或VS

dianchaozong3657的博客 449

基于开源飞控pix的无人机装调与测试

适用人群:希望进一步掌握无人机装调的飞手从零搭建无人机硬件平台的学生/教师无人机爱好者,开发者其他尚未入门开源PX4固件调试的学习者直播回放无人机装调与测试(一):无人机基本常识/预备知识固件是是烧录在飞控硬件中的软件,pixhawk飞控支持PX4和ArduPilot两种版本的固件。本次课程重点以PX4固件为基础进行讲解PX4 1.10以上固件QGC固件版本1.11一、将要观察的数据声明成uORB消息,并发布。我这里随便添加了一个。

超维空间科技的博客 2万+

SQL Server存储过程详细介绍

(点击上方公众号,可快速关注我们哦~)存储过程其实就是已预编译为可执行过程的一个或多个SQL语句。 通过调用和传递参数即可完成该存储过程的功能。前面有介绍过存储过程的一些...

SQL数据库开发 667

CREATE OR REPLACE PROCEDUREMySQL/Oracle对比】

CREATE OR REPLACE PROCEDURE

qq_15508743的博客 646

使用DataGrip创建数据库并读取sql文件

DataGrip是由 JetBrains 公司生产的又一个强大且优秀的数据库管理工具。它支持几乎所有的主流的关系数据库产品。对于一些习惯使用Navicat来说,使用DataGrip不太习惯。下面我通过DataGrip 2023.1创建数据库并读取sql文件,其实这个过程是很简单的。

qq_41872824的博客 1万+

Oracle (PLSQL) + MySQL [存储过程和函数]

学习笔记

m0_65651209的博客 1155

DataGrip / PL SQL Developer调试过程

DataGrip/ PLSQL Developer 调试存储过程

qdragonballs的博客 6089

mysql存储过程基本语法_Oracle存储过程基本语法

存储过程 1CREATEORREPLACEPROCEDURE存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATEORREPLACEPROCEDURE是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程,如果存在就覆盖它; 行2: IS关键词表明后面将跟随一个PL/SQL体。 行3: BEGIN关键词存储过程1 CREATE OR REP...

weixin_30877741的博客 906

mysql新版替代_MySQL中是否有“创建或替换过程”的替代方法?

是否有MySQL版本的“创建或替换过程”?我似乎无法执行此操作或脚本删除过程,如果在重新编译之前存在,而不会收到存储过程存在的错误消息.DELIMITER $$-- would love to be able to drop procedure if exists db.sp_tmp_90days;-- or use "create or replace"create procedure db.s...

weixin_32760485的博客 1036

oracle,mysql存储过程代码模板大全

oracle,mysql存储过程代码模板大全

makewuyi的专栏 834
上一篇: Python字典的应用详解
下一篇: sublime text
thunten
博客等级 码龄16年 0粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值