2021-05-06

最近学习使用MySQL数据库对一些数据进行处理,用到了存储过程。我把使用过程中遇到的一些问题写下来,方便以后再次使用时少进一些坑。

原始表

一、无参数存储过程test1

#定义分割符为双斜杠
DELIMITER //   
use cai//    --  打开数据库,这是存放存储过程的数据库。
drop procedure if EXISTS test1 //    --  删除已存在的存储过程。
CREATE PROCEDURE test1()            -- 开始定义无参存储过程。
    BEGIN
    select * from cp_table;            -- 要执行的内容
    END //
DELIMITER ;    

CALL test1();   -- 调用定义的存储过程。

注意:DELIMITER定义分割符后面不人有注解,不然当你执行时会没有一点反应。

二、有参数存储过程test1(IN tableName_source varchar(50),IN columnName varchar(50))

正确写法

#重定义分割符为双斜杠
DELIMITER //   
use cai//    --  打开数据库,这是存放存储过程的数据库。
drop procedure if EXISTS test1 //    --  删除已存在的存储过程。
CREATE PROCEDURE test1(IN tableName_source varchar(50),IN columnName varchar(50))			    -- 开始定义无参存储过程。
	BEGIN
		-- 要执行的内容
	DECLARE temp_user_sql VARCHAR(500);															  -- 声明一个变量
	SET temp_user_sql =CONCAT('SELECT * FROM ',tableName_source,' order by issue2,',columnName);  -- 把参数与sql语句段拼成一条完整的sql语句,并存到变量中
	set @temp_works_sql=temp_user_sql;    														  -- 将连成成的字符串赋值给一个变量(可以之前没有定义,但要以@开头)
	prepare stmt from @temp_works_sql;    													      -- 预处理需要执行的动态SQL,其中stmt是一个变量 
	EXECUTE stmt;    																			  -- 执行上面拼成的sql语句
	deallocate prepare stmt; 																	  --  放掉预处理段 
	END //
#重定义分割符为分号
DELIMITER ;    

CALL test1('cp_table','number1');   -- 调用定义的存储过程。

错误写法

#重定义分割符为双斜杠
DELIMITER //   
use cai//    --  打开数据库,这是存放存储过程的数据库。
drop procedure if EXISTS test1 //    --  删除已存在的存储过程。
CREATE PROCEDURE test1(IN tableName_source varchar(50),IN columnName varchar(50))			    -- 开始定义无参存储过程。
	BEGIN
		-- 要执行的内容
	SELECT * FROM tableName_source order by issue2,columnName; 
	END //
#重定义分割符为分号
DELIMITER ;    

CALL test1('cp_table','number1');   -- 调用定义的存储过程。

报错:11:47:15    CALL test1('cp_table','number1')    Error Code: 1146. Table 'cai.tablename_source' doesn't exist    0.000 sec

 

在网上参考了:

zuihongyan518的文章《MySQL 存储过程 CONCAT 字符串拼接》

https://blog.csdn.net/zuihongyan518/article/details/80620669?utm_source=blogxgwz6&utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-2.nonecase

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值