Mysql 存储过程 UPDATE语句 字段=传递过来的参数字符串参数

game28表:idkjkjNo1000009990099811|3|5|799712|12|8|1存储过程:CREATEDEFINER=`root`@`localhos... game28表:
id kj kjNo
1000 0 0
999 0 0
998 1 1|3|5|7
997 1 2|12|8|1

存储过程:
CREATE DEFINER=`root`@`localhost` PROCEDURE `web_kj_game28`(
p_No INT,
p_gfNo VARCHAR(500) CHARACTER SET gbk
)
SQL SECURITY INVOKER
BEGIN
...... 这里省略和下句没关系的代码
UPDATE game28 SET kj = 1,kgNo = p_gfNo WHERE id = p_No;
...... 这里省略和上句没关系的代码
END

现在执行存储过程,输入p_No,p_gfNo参数之后,game28表中kgNo字段与输入的参数(字符串)不符合,且是在执行commit之后才会存进数据库,否则报错并且不入数据库。
UPDATE game28 SET kj = 1,kgNo = p_gfNo WHERE id = p_No;
这句中 kgNo = p_gfNo , p_gfNo 为字符串,是否需要加单或者双引号,在原生sql语句中,应该是kgNo = '$p_gfNo' ,存储过程中是不是要用其它语法加还是另有蹊跷?
展开
 我来答
藤原子大雄
2018-01-09 · TA获得超过7197个赞
知道大有可为答主
回答量:6977
采纳率:82%
帮助的人:1758万
展开全部
mysql存储过程支持用表作为参数。
这个问题在MySQL 5.0以前非常麻烦,但是在MySQL 5.0.13版之后,由于引入了PREPARE语句,一切变得简单了。
例子如下(已验证):
DROP PROCEDURE IF EXISTS `newtable`;
CREATE PROCEDURE `newtable`(IN tname varchar(64))
BEGIN
SET @sqlcmd = CONCAT('CREATE TABLE ', tname, ' (id int NOT NULL AUTO_INCREMENT, name varchar(64) DEFAULT NULL, PRIMARY KEY (`id`))');
PREPARE stmt FROM @sqlcmd;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;
call newtable('abc');
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式