美文网首页MySQL
存储过程中的 prepare语句(存储过程中动态增减表字段)

存储过程中的 prepare语句(存储过程中动态增减表字段)

作者: 这真的是一个帅气的名字 | 来源:发表于2019-08-18 22:51 被阅读0次

    干嘛的

    如果需要在存储过程中创建一张临时表,然后在动态增减临时表的字段,那就可以用mysql的prepare预编译语句了。

    有什么用

    • 他还可以在存储过程中动态的拼接表名,字段名,来达到动态查询的效果
    • sql语句中还可以用?来代表参数,这样可以有效的防止sql注入

    语法

    PREPARE stmt from '你的sql语句';  
    EXECUTE stmt (如果sql有参数的话, USING xxx,xxx); // 这里USING的只能是会话变量
    DEALLOCATE PREPARE stmt; 
    

    例子

    delimiter //
    create procedure myTest()
    begin
    set @_sql = 'select ? + ?';
    set @a = 5;
    set @b = 6;
    PREPARE stmt from @_sql; // 预定义sql  stmt是可变的
    EXECUTE stmt USING @a,@b;// 传入两个会话变量来填充sql中的 ?
    DEALLOCATE PREPARE stmt; // 释放连接
    end //
    
    delimiter //
    create procedure myTest(in columnName varchar(32)) // 传入一个字符串
    BEGIN
    drop table if exists tmpTable; // 如果临时表存在先删除掉
    set @_sql = concat('create temporary table if not exists tmpTable( ', columnName, ' varchar(32), id int(11), _name varchar(32));'); // 创建临时表的语法,我们把传入的参数拼接进来
    PREPARE stmt from @_sql;    
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;  // 执行
    desc tmpTable;
    end //
    

    相关文章

      网友评论

        本文标题:存储过程中的 prepare语句(存储过程中动态增减表字段)

        本文链接:https://www.haomeiwen.com/subject/ykzdsctx.html