Mysql利⽤存储过程动态拼接sql查询数据
代码如下:
// 这个是满⾜条件需要调⽤的存储过程可以看下上篇存储过程迁移数据篇
drop PROCEDURE if EXISTS test_dept;
CREATE PROCEDURE test_dept ()
golang map底层实现BEGIN
DECLARE d_id INT (11) DEFAULT 0;
DECLARE d_name VARCHAR (64) DEFAULT NULL;
DECLARE d_level VARCHAR (64) DEFAULT NULL;
DECLARE flag INT default false;
DECLARE cur_test CURSOR FOR SELECT id,dept_name,dept_level FROM dept;
DECLARE CONTINUE HANDLER FOR NOT found SET flag = TRUE;
OPEN cur_test;
read_loop : LOOP
FETCH cur_test INTO d_id,d_name,d_level;
IF
flag THEN
LEAVE read_loop;
END IF;
INSERT IGNORE INTO dept_copy2 ( id, dept_name, dept_level )
VALUESlinux工作常用命令脚本
( d_id, d_name, d_level );
END LOOP;
sqlserver购买授权CLOSE cur_test;
END;
call test_dept();
// 这⾥是我单独写的测试判断是否存在该库该表
select count(*) from information_schema.tables where table_schema='test_kettle' and table_name ='dept';
// 动态测试sql
// 判断存储过程是否存在进⾏删除操作不明⽩可以查看存储过程的创建
drop PROCEDURE if EXISTS table_index_test;
// 创建存储过程 database_name 库名 table_name表名
create PROCEDURE table_index_test(IN database_name varchar(128),IN table_name varchar(128))
// 存储⾥⾯每⼀步要有分好结尾否则会报错
begin
// 定义使⽤的局部变量
DECLARE table_index int(11)default0;
DECLARE table_str varchar(64)default null;
DECLARE SqlStr varchar(500)default null;
set @tableIndex=table_index;
set @p=database_name;
set @p2=table_name;
// 写死的⽅式
// select count(*) INTO table_index from information_schema.tables where table_schema='test_kettle' and table_name ='dept_copy2'; // 这⾥最好这样写如果使⽤@sqlstr直接复制不知道为什么会报错
// ⾥⾯的参数使⽤全局参数不然会报错 @tableIndex
// set @sqlstr='select count(*) INTO @tableIndex from information_schema.tables where table_schema=? and table_name=?'; //会出错set SqlStr='select count(*) INTO @tableIndex from information_schema.tables where table_schema=? and table_name=?';
如何理解ioc容器set @sqlstr=SqlStr;
mysql查看所有存储过程PREPARE stm from @sqlStr;// 预编译
EXECUTE stm USING @p,@p2;// 执⾏sql
DEALLOCATE PREPARE stm;// 释放prepare
set table_index=@tableIndex;// 赋值给定义的局部变量
set table_index=@tableIndex;// 赋值给定义的局部变量
if table_index <>0 then
-- call test_dept();
set table_str='存在';
end if;
SELECT @p;// 查看结果
SELECT @p2;
SELECT table_index;
鸡米花炸几分钟SELECT table_str;
end;
call table_index_test('test_kettle1','dept_copy2');
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论