我有桌子
DROP TABLE IF EXISTS `product_universal_description`;
CREATE TABLE `product_universal_description` (
`pud_id` INT(11) NOT NULL AUTO_INCREMENT,
`upc_id` VARCHAR(32) NOT NULL,
`product_id` INT(11) NOT NULL,
`supplier_id` INT(11) NOT NULL,
`location_id` VARCHAR(32) NOT NULL,
`warehouse_id` INT(11) NOT NULL,
`model_no` VARCHAR(64) NOT NULL,
`order_id` INT(11),
`return_id` INT(11),
`damage_id` INT(11),
`condition_id` tinyint(1) NOT NULL DEFAULT '1',
`status_id` INT(11) NOT NULL DEFAULT '1',
`added_by` INT(11) NOT NULL,
`updated_by` INT NOT NULL,
`date_added` DATETIME NOT NULL,
`date_modified` DATETIME NOT NULL,
PRIMARY KEY(`pud_id`)
);
ALTER TABLE product_universal_description ADD UNIQUE INDEX (`upc_id`),ADD INDEX (`product_id`),ADD INDEX (`supplier_id`),ADD INDEX (`warehouse_id`),ADD INDEX (`order_id`),ADD INDEX (`return_id`),ADD INDEX (`damage_id`);
FOR我已经制作了一个添加记录的程序。
DROP PROCEDURE IF EXISTS addRecordOnPUD;
CREATE PROCEDURE addRecordOnPUD
(
IN qty int(4),
IN upc varchar(32),
IN product_id int(11),
IN supplier_id int(11),
IN location_id varchar(32),
IN model_no varchar(64),
IN warehouse_id int(11),
IN user_id int(11),
IN date_added datetime,
IN date_modified datetime,
OUT message VARCHAR(64)
)
BEGIN
DECLARE temp_upc VARCHAR(32);
DECLARE i INT;
DECLARE CONTINUE HANDLER FOR 1062
SET message = CONCAT('DUPLICATE KEYS ',upc,' FOUND');
SET i = 1;
WHILE qty > 0 DO
SET temp_upc = CONCAT(upc,'-',i);
INSERT INTO product_universal_description
(
`upc_id`,
`product_id`,
`supplier_id`,
`location_id`,
`model_no`,
`warehouse_id`,
`added_by`,
`updated_by`,
`date_added`,
`date_modified`
) VALUES (
temp_upc,
product_id,
supplier_id,
location_id,
model_no,
warehouse_id,
user_id,
user_id,
date_added,
date_modified
);
SET i=i+1;
SET qty=qty-1;
END WHILE;
IF message IS NULL THEN
SET message = 'successfully added';
END IF;
END;
调用程序时
CALL addRecordOnPUD(8, 'po', 44, '44', 44, 'cfb', 44, 44,NOW(),NOW(),@message);
我正在接受
1265: Data truncated for column 'date_added' at row 1
1265: Data truncated for column 'date_modified' at row 1
什么是适当的解决方案?我搜索但是我得到了与INT有关的数据超出限制的解决方案。请帮助!!
答案 0 :(得分:0)
我强烈建议您在参数名前加上一致的前缀,以区别于列名。否则,当您引用类似date_added
的名称时,无论您是引用列名还是参数名,都是不明确的。
以下是修改过程以使用p_
前缀作为参数名称的示例。试一试,看看这是否能解决您的问题:
DELIMITER $$
DROP PROCEDURE IF EXISTS addRecordOnPUD $$
CREATE PROCEDURE addRecordOnPUD
(
IN p_qty int(4),
IN p_upc varchar(32),
IN p_product_id int(11),
IN p_supplier_id int(11),
IN p_location_id varchar(32),
IN p_model_no varchar(64),
IN p_warehouse_id int(11),
IN p_user_id int(11),
IN p_date_added datetime,
IN p_date_modified datetime,
OUT p_message VARCHAR(64)
)
BEGIN
DECLARE v_temp_upc VARCHAR(32);
DECLARE i INT;
DECLARE CONTINUE HANDLER FOR 1062
SET p_message = CONCAT('DUPLICATE KEYS ',p_upc,' FOUND');
SET i = 1;
WHILE p_qty > 0 DO
SET v_temp_upc = CONCAT(p_upc,'-',i);
INSERT INTO product_universal_description
(
`upc_id`,
`product_id`,
`supplier_id`,
`location_id`,
`model_no`,
`warehouse_id`,
`added_by`,
`updated_by`,
`date_added`,
`date_modified`
) VALUES (
v_temp_upc,
p_product_id,
p_supplier_id,
p_location_id,
p_model_no,
p_warehouse_id,
p_user_id,
p_user_id,
p_date_added,
p_date_modified
);
SET i=i+1;
SET p_qty=p_qty-1;
END WHILE;
IF p_message IS NULL THEN
SET p_message = 'successfully added';
END IF;
END $$
DELIMITER ;