MySQL存储过程里动态SQL的使用

MySQL的存储过程不好用,一般在应用开发过程中不建议使用。但有时候在数 据迁移等环境中,特别涉及到复杂点的逻辑处理,就需要存储过程的配合了,当 然,用其他语言写程序实现也是可以的,不过效率估计没有直接在数据库中操作 高。

有时候数据所在的表是不确定的,需要根据实际情况临时决定表名, 这时候就是动态SQL的用武之地了,以下示例展示了在一次数据导出的过程中使用 动态SQL的存储过程例子:

delimiter //
CREATE PROCEDURE `proc_rt_imp_group`()
BEGIN
DECLARE done INT DEFAULT FALSE;
declare v_tid,v_ptable int;
declare v_tablename VARCHAR(32);
DECLARE cur_t CURSOR FOR select t.tid,t.ptable from pw_threads_rt t;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur_t;
read_loop: LOOP
FETCH cur_t INTO v_tid,v_ptable;
IF done THEN
LEAVE read_loop;
END IF;
if v_ptable=0 then
set v_tablename = 'pw_posts';
else
set v_tablename = concat('pw_posts',v_ptable);
end if;
set @updatesql =CONCAT('insert into pw_posts_rt select * from 

',v_tablename,' where tid= ',v_tid);
PREPARE sqltext from @updatesql;
execute sqltext;
END LOOP;
CLOSE cur_t;
END//
delimiter ;

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索存储过程
, 动态
, delimiter
, updatesql操作
, updatesql
declare
mysql存储过程动态sql、mysql存储过程 动态表、mysql存储过程拼接sql、mysql存储过程执行sql、mysql存储过程中拼sql,以便于您获取更多的相关知识。

时间: 2024-11-03 04:46:33

MySQL存储过程里动态SQL的使用的相关文章

mysql存储过程执行动态sql的问题

问题描述 我现在想通过mysql的存储过程执行动态SQL,传递一个表名查询,根据表名查询表中的第一个列.根据第一列获取其列中的最大值,下面是我写的存储过程.但始终获取不到最大值的结果,请帮忙看一下 是什么原因?DELIMITER $$CREATE PROCEDURE genBillsNoProc(IN tableName VARCHAR(30),OUT data_t VARCHAR(100))BEGINDECLARE sql_1 VARCHAR(1000);DECLARE sql_2 VARCH

mysql存储过程 在动态SQL内获取返回值的方法详解_Mysql

MySql通用分页存储过程过程参数 复制代码 代码如下: p_cloumns varchar(500),p_tables varchar(100),p_where varchar(4000),p_order varchar(100),p_pageindex int,p_pagesize int,out p_recordcount int,out p_pagecount int  $:begin    declare v_sqlcounts varchar(4000);    declare v_

mysql存储过程-MySql存储过程里 如何接收返回的多个结果

问题描述 MySql存储过程里 如何接收返回的多个结果 BEGIN DECLARE userNames varchar(500) DEFAULT ''; ##用户名字 DECLARE sums int DEFAULT 0; DECLARE namess varchar(500) DEFAULT ''; DECLARE i int; set i = 0; select count(*) into sums from book where price = 123; ##select name int

mysql存储过程中动态表名的使用

问题描述 mysql存储过程中动态表名的使用 BEGIN if tablename is not null then declare v_sql varchar(500); set v_sql = concat('select WXPayBillID,WXPayMoney FROM ',tablename); select v_sql; set @v_sql=v_sql;///这里写的有问题? prepare stmt from @v_sql; EXECUTE stmt; deallocate

MySQL基础:动态SQL语句

在存储过程中,动态拼接一个字符串,然后执行之. Sql代码 DROP PROCEDURE IF EXISTS demoSp; CREATE PROCEDURE demoSp() BEGIN set @sqlstr=concat("select count(*) from ", "dual"); prepare stmt from @sqlstr; EXECUTE stmt; deallocate prepare stmt; END; 查看本栏目更多精彩内容:http

mysql存储过程写法-动态参数运用

--删除drop procedure if exists up_common_select --创建CREATE PROCEDURE `up_common_select` ( in t_name varchar(50) ) begin declare v_sql varchar(500); set v_sql= concat('select * from ',t_name); select v_sql; --注意:prepare(预处理)execute stmt using @var,只能跟@v

Oracle 的存储过程里面的SQL 语句(|| “!”)看不懂,望大家给个答案

问题描述 create or replace package body pck_imp_puryewu is procedure searchList( i_FLDPURCONTRACTNO in varchar2, i_JK_DDH in varchar2, i_FLDCREATEDATE in varchar2, i_VERIFY in varchar2, i_userId in varchar2, o_retCode out varchar2, o_tableHead out varcha

在存储过程中执行动态sql语句,能否提高性能

问题描述 原本在后台写的sql语句很复杂,属于多表连接操作,现在把它放在了存储过程里用动态sqlexec执行,能否提高性能呢 解决方案 解决方案二:1.可以减轻程序负担,把这些工作都交给DBMS2.程序维护起来更加简单3.仅是个人观点解决方案三:存储过程执行动态sql语句时结尾exec(@sql)和execsp_executesql@sql有何区别解决方案四:差不多的,要提高用存储过程好了解决方案五:但是参数是要动态的,必须用动态SQL

MySQL存储过程中的事务管理实例说明

mysql存储过程中事务SQL代码  delimiter $$  use test$$  create procedure t_insert_table()  begin      /** 标记是否出错 */      declare t_error int default 0;      /** 如果出现sql异常,则将t_error设置为1后继续执行后面的操作 */      declare continue handler for sqlexception set t_error=1; -