精华内容
下载资源
问答
  • MySQL创建存储过程

    万次阅读 2019-03-27 17:08:44
    Navicat for MySQL创建存储过程及MyBatis调用存储过程 问题描述 一条语句实现向两个表中添加数据 前段时间遇到需求,向一个表中添加数据,获取新增主键值。再向另一个表添加数据,其中一个字段为前一个表的主键值。...

    Navicat for MySQL创建存储过程及MyBatis调用存储过程


    问题描述

    一条语句实现向两个表中添加数据

    前段时间遇到需求,向一个表中添加数据,获取新增主键值。再向另一个表添加数据,其中一个字段为前一个表的主键值。并返回第二次添加的表的自增主键值。上网查到的一个方法为使用存储过程,便按照这个思路试着实现一下,现将过程回忆记录下来。

    项目环境

    SSM框架项目+Navicat管理MySQL数据库

    解决问题

    一、Navicat for MySQL创建存储过程

    1.新建函数→选择“过程”
    在这里插入图片描述
    2.添加参数

    模式:
    IN:输入参数
    OUT:输出参数
    INOUT:既作为输入参数,也作为输出参数

    在这里插入图片描述
    3.写存储过程里面要执行的内容

    CREATE DEFINER=`root`@`%` PROCEDURE `InsertNewConsultation`(IN `user_id` int,IN `doc_id` int,IN `now_time` datetime,IN `disease_id` int,IN `patient_id` int,IN `patient_speak_text` text,OUT `patient_speak_id` int)
    BEGIN
    --声明变量
    DECLARE consultation_id INT;
    	insert into 
    	consultation_basic
    		(user_id,last_reply_text,last_reply_time,consultation_status,doctor_unread_number,disease_id,patient_unread_number,patient_id,doc_id)
    	values
    		(user_id,patient_speak_text,now_time,1,1,disease_id,0,patient_id,doc_id);
    	
    	SET consultation_id = @@identity;
    	
    	insert into 
    	patient_speak
    		(patient_speak_text,patient_user_id,patient_speak_time,isread,consultation_id)
    	values
    		(patient_speak_text,user_id,now_time,0,consultation_id);
    	
    	SET patient_speak_id = @@identity;
    
    END
    

    4.保存即可

    二、MyBatis调用存储过程

    <select id="insertConsultationBasic"  parameterType="com.xxx.platform.entity.NewConsultationCustom" 
     	resultType="com.xxx.platform.entity.NewConsultationCustom" statementType="CALLABLE">
    	{
    		CALL InsertNewConsultation(
    			#{user_id,jdbcType=INTEGER,mode=IN},
    			#{doc_id,jdbcType=INTEGER,mode=IN},
    			#{last_reply_time,jdbcType=TIMESTAMP,mode=IN},
    			#{disease_type_id,jdbcType=INTEGER,mode=IN},
    			#{patient_id,jdbcType=INTEGER,mode=IN},
    			#{patient_speak_text,jdbcType=VARCHAR,mode=IN},
    			#{patient_speak_id,jdbcType=INTEGER,mode=OUT}
    		)
    	}
    </select>
    

    注:调用存储过程时,注意参数顺序不能错。

    展开全文
  • MySql创建存储过程

    2020-11-03 11:22:34
    mysql 创建存储过程 一、存储过程的创建和调用 存储过程就是具有名字的一段代码,用来完成一个特定的功能。 创建的存储过程保存在数据库的数据字典中。 1.创建 – create procedure 存储过程名(参数1,参数2,··...

    mysql 创建存储过程
    一、存储过程的创建和调用

    存储过程就是具有名字的一段代码,用来完成一个特定的功能。
    创建的存储过程保存在数据库的数据字典中。
    1.创建
    

    – create procedure 存储过程名(参数1,参数2,·····)
    –存储过程开始和结束符号:BEGIN … END
    CREATE PROCEDURE add_matches(IN matcheNo INTEGER,IN teamNo INTEGER,IN playerNo INTEGER,IN won INTEGER,IN lost INTEGER)
    BEGIN
    insert into matches values(matcheNo,teamNo,playerNo,won,lost);
    END
    2.调用存储过程
    –变量赋值:SET @matcheNo =1 ;用@符声明变量
    SET @matcheNo=4;
    SET @teamNo=4;
    SET @playerNo=4;
    SET @won=4;
    SET @lost=4;
    call add_matches(@matcheNo,@teamNo,@playerNo,@won,@lost);

    3.查询存储过程
    1)查询全部存储过程:SHOW PROCEDURE STATUS;
    2)查询单个存储过程:SHOW PROCEDURE STATUS LIKE ‘add_matches’;

    4.删除存储过程
    DROP PROCEDURE add_matches;

    二.存储过程的参数
    MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:

    CREATE PROCEDURE 存储过程名([[IN |OUT |INOUT ] 参数名 数据类形…])

    IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
    OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
    INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
    

    三、MySQL存储过程的控制语句
    1) if-then-else 语句:
    CREATE PROCEDURE add_matches(IN type INTEGER,IN matcheNo INTEGER)
    BEGIN
    if type =0 then
    delete from matches where matcheno=matcheNo ;
    else
    select * from matches where matcheno=matcheNo;
    END
    2)case语句:
    CREATE PROCEDURE add_matches(IN type INTEGER,IN matcheNo INTEGER)
    BEGIN
    set var=type;
    case var
    when 0 then
    delete from matches where matcheno=matcheNo ;
    when 1 then
    select * from matches where matcheno=matcheNo;
    else
    select * from matches where matcheno=matcheNo;
    end case;
    END

    展开全文
  • mysql创建存储过程

    2018-06-14 17:11:19
    坑一:MySQL创建存储过程中,存储过程的输入参数变量命名不应该与字段名相同。如果相同,导致的结果就是参数的值将不会是你传入的值,而是变成每条记录的那个字段的值。如果在删除操作时,将会删除整张表的记录,是...

    坑一:

    MySQL创建存储过程中,存储过程的输入参数变量命名不应该与字段名相同。如果相同,导致的结果就是参数的值将不会是你传入的值,而是变成每条记录的那个字段的值。如果在删除操作时,将会删除整张表的记录,是非常危险的。

    #删除存储过程
    drop procedure if exists pro_test;
    #创建存储过程
    DELIMITER //
    create procedure pro_test(IN c_age INTEGER)
    begin
    select * FROM ur_test_z WHERE age = c_age;
    end//

    DELIMITER ;

    注:如果该存储过程定义如下:

    #删除存储过程
    drop procedure if exists pro_test;
    #创建存储过程
    DELIMITER //
    create procedure pro_test(IN age INTEGER)
    begin
    select * FROM ur_test_z WHERE age = age;
    end//

    DELIMITER ;

    查询结果为整张表的记录。

    即使写成这样也不行,查询结果仍会是整张表的记录

    #删除存储过程
    drop procedure if exists pro_test;
    #创建存储过程
    DELIMITER //
    create procedure pro_test(IN age INTEGER)
    begin
    DECLARE var_age INT;
    SET var_age = age;
    select * FROM ur_test_z WHERE age = var_age;
    end//
    DELIMITER ;


    展开全文
  • Mysql创建存储过程

    2021-03-17 09:26:10
    创建无参的存储过程 mysql> DELIMITER // mysql> CREATE PROCEDURE ShowStuScore() -> BEGIN -> SELECT * FROM t_user ; -> END // 通过CALL语句调用该存储过程的SQL语句和执行结果 delimiter ; ...

    创建无参的存储过程

    mysql> DELIMITER //
    mysql> CREATE PROCEDURE ShowStuScore()
        -> BEGIN
        -> SELECT * FROM t_user ;
        -> END //
    

    通过CALL语句调用该存储过程的SQL语句和执行结果

    delimiter ;
    call ShowSstuScore();
    

    创建带参数的存储过程

    mysql> DELIMITER //
    mysql> create procedure GetScoreBystu
        -> (IN name varchar(30))
        -> BEGIN
        -> select Job from t_user
        -> where name=uname ;
        -> end //
    

    通过 CALL 语句调用该存储过程的 SQL 语句和执行结果

    mysql> DELIMITER ;
    mysql> CALL GetScoreBystu('李奥归')
        -> ;
    
    展开全文
  • MySQL 创建存储过程

    2020-03-14 09:35:14
    MySQL 存储过程是一些 SQL 语句的集合,有的时候我们可能需要一大串的 ...可以使用 CREATE PROCEDURE 语句创建存储过程。 语法格式如下: CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体> [...
  • MySql 创建存储过程

    2019-09-02 19:12:57
    DELIMITER $$ #以delimiter来标记用$表示存储过程结束 CREATE PROCEDURE ownerapartment() ##创建pre()存储方法 BEGIN DECLARE i INT; #定义i变量 SET i=1; WHILE i<35 DO #对i的值配置 INSERT INTO owner_...
  • ## mysql创建存储过程失败1307错误解决本人在创建存储过程的时候出现"错误码: 1307 Failed to CREATE PROCEDUREmysql创建存储过程失败"错误,经查资料实践后整理得出是mysql本身的问题,解决办法:先将phpmyadmin中的...
  • mysql 创建存储过程

    千次阅读 2018-10-19 15:35:04
    注意 delimiter的意思是将分割号改为// 最后又改为; 所以delimiter与后面的符号要空一格 注意// ;... create procedure wap(in vdate varchar(10) ) ## 创建存储过程 begin declare v_d...
  • mysql创建存储过程失败1307错误解决本人在创建存储过程的时候出现"错误码: 1307 Failed to CREATE PROCEDUREmysql创建存储过程失败"错误,经查资料实践后整理得出是mysql本身的问题,解决办法:先将phpmyadmin中的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,775
精华内容 4,310
关键字:

mysql创建存储过程

mysql 订阅