在调用存储过程期间,MySQL中的date_added,date_modified列警告1265

时间:2014-10-13 14:07:58

标签: mysql

我有桌子

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有关的数据超出限制的解决方案。请帮助!!

1 个答案:

答案 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 ;