我正在学习mysql认证和我学习的方式是通过做,我之前通过一个问题失败了,如果我更加关注存储过程我会得到它。任何我正在制作一些我实际会使用的时髦场景,所以这里是我难以接受的。
/*TABLE STRUCTURE */
CREATE TABLE `members` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`name` varchar(255) default NULL,
`email` varchar(255) default NULL,
PRIMARY KEY (`id`)
);
/* PROCEDURE STRUCTURE */
USE WOL_STATISTICS;
DELIMITER $$
CREATE PROCEDURE `select_user`
(
IN `idnum` INT(11),
OUT `name` VARCHAR(255),
OUT `email` VARCHAR(255)
)
SQL SECURITY DEFINER
LANGUAGE SQL
NOT DETERMINISTIC
BEGIN
SELECT `name`, `email` FROM `members` WHERE `id` = `idnum`;
END $$
DELIMITER ;
/* CALL STATEMENT */
CALL select_user(20, @name, @email);
SELECT @name, @email;
我一直回到空值,任何人都可以告诉我为什么?
答案 0 :(得分:1)
首先,您确定您的表定义是否正确?您似乎需要在表格中使用名为id
的列。
第二:您正在从表格中选择name
和email
列,但您没有将值分配给out参数name
和email
(也许您应该将参数重命名为其他内容以避免此类混淆,例如outname
和outemail
)。这不是自动完成的。告诉SELECT
语句明确指出要选择哪些列并将结果分配给变量之间存在巨大差异。
因此,当存储过程实际返回结果集时,除非您为它们指定值,否则两个输出参数将始终为null
。
答案 1 :(得分:0)
改变你的意见:
选择name
,email
FROM members
WHERE id
= idnum
;
至
选择name
,email
INTO PARAMETER_NAME,PARAMETER_EMAIL来自members
WHERE id
= idnum
;
尝试使用其他参数名称,如P_NAME,P_EMAIL e设置如下:
SELECT name
,email
INTO P_NAME,P_EMAIL FROM members
WHERE id
= P_IDNUM;