我的表結構是:MySQL的 - 存儲過程OUT變量返回NULL
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);
一個存儲過程,但當我嘗試使用選擇的話,我去獲取輸出變量但是,所有INSERT語句都正常工作,並將記錄添加到數據庫表中。
SELECT @parentid;
我在這裏失蹤了什麼?
你可以提供你的** **父表結構 – Chella
由於字數限制,爲什麼我問的是我不能粘貼SQL查詢這些表 – neeraj
的結構..?該父表不能有任何其他字段爲非空,以便**插入查詢**成功。只要檢查插入查詢是否被成功插入。如果是這樣,last_record將存儲該值。另外還有一點,它不會存儲明確插入的值。 – Chella