【发布时间】:2012-11-29 19:20:08
【问题描述】:
我的表结构是:
DROP TABLE IF EXISTS `child`;
CREATE TABLE `child` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `map_parent_child`;
CREATE TABLE `map_parent_child` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) NOT NULL,
`child_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique_parent_child` (`parent_id`,`child_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `parent`;
CREATE TABLE `parent` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我已经创建了一个像
这样的存储过程DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`sp_parent`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_parent`(
IN parent_name VARCHAR(255),
IN child_name VARCHAR(255),
OUT parent_id INT(11))
BEGIN
DECLARE parent_id INT DEFAULT 0;
DECLARE child_id INT DEFAULT 0;
START TRANSACTION;
INSERT INTO `parent` (`name`) VALUES(parent_name);
SET parent_id = LAST_INSERT_ID();
INSERT INTO `child` (`name`) VALUES(child_name);
SET child_id = LAST_INSERT_ID();
INSERT INTO `map_parent_child` (`parent_id`,`child_id`) VALUES(parent_id,child_id);
commit;
END$$
DELIMITER ;
CALL sp_parent("test", "test", @parentid);
但是当我尝试使用 select 获取输出变量时,我得到 NULL 但是所有 INSERT 语句都可以正常工作并将记录添加到数据库表中。
SELECT @parentid;
我在这里缺少什么?
【问题讨论】:
-
你能提供你的父表结构
-
由于字数限制,我无法为这些表的结构粘贴 sql 查询
-
为什么我要问的是..?该父表不能有任何其他字段不为空,以便**插入查询**成功。只需检查插入查询是否成功插入。如果是这样,last_record 将存储该值。请记住另一件事,它不会存储明确插入的值
-
父子表只有两个字段(id和name),其中id是自动递增的。
-
我已经在问题本身中添加了表格结构。
标签: mysql variables stored-procedures null out