带有从 Select 声明的参数的 MySQL 存储过程

标签 mysql opencart

我正在尝试为我的 Opencart 商店创建 MySQL 存储过程。为了使产品可见,它必须位于 3 个表中

  1. oc_产品
  2. oc_product_description
  3. oc_product_to_store

因此,我插入到第一个表中,收集 ID 并使用该 ID 插入到以下表中。

如果我要在存储过程之外执行此操作,则所有单独的步骤都可以工作。但是,一旦我将它们全部放在一起(如下),我就会收到此错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @vProductID = (SELECT `product_id` FROM `oc_product` WHERE UPC='1234567890' ' at line 9

我的存储过程如下所示:

CREATE DEFINER=`myname`@`localhost` PROCEDURE `uspAddNewProduct`(IN `vModel` VARCHAR(500), IN `vSKU` VARCHAR(500), IN `vUPC` VARCHAR(500), IN `vMPN` VARCHAR(500), IN `vQTY` INT(10), IN `vPrice` DECIMAL(18,2), IN `vProductID` INT, IN `vProductName` VARCHAR(500), IN `vProductDescription` VARCHAR(500), IN `vMetaTitle` VARCHAR(500))


-- INSERTS THE BULK OF THE DATA INTO THE MAIN PRODUCT TABLE
INSERT INTO `oc_product` (`model`, `sku`, `upc`, `mpn`, `location`, `quantity`, `stock_status_id`, `image`, `shipping`, `price`, `tax_class_id`,`date_available`, `minimum`, `status`, `date_added`, `date_modified`, `weight_class_id`)
VALUES (vModel,vSKU,vUPC,vMPN,'NYC',vQTY,'5','catalog/product/' + vUPC + '.jpg','1',vPrice,'9',NOW(),'1','1',NOW(),NOW(),'1')

-- SELECTS THE RECENTLY CREATED PRODUCT ID
SET @vProductID = (SELECT `product_id` FROM `oc_product` WHERE UPC='1234567890' ORDER BY   `product_id` DESC LIMIT 1)

-- INSERTS INTO A DESCRIPTION TABLE (BASED ON THE PID ABOVE)
INSERT INTO `oc_product_description` (`product_id`, `language_id`, `name`, `description`, `meta_title`)
VALUES (vProductID, '1', vProductName, vProductDescription, vMetaTitle)

-- ASSOCIATES THE PRODUCT WITH THE MAIN STORE (BASED ON THE PID ABOVE)
INSERT INTO  `oc_product_to_store` (`product_id`, `store_id`) VALUES (vProductID, '1')

最佳答案

请小心变量vProductID,它是一个存储过程参数,但随后在SET 中重新定义。请记住,vProductID@vProductID 是不同的变量。

尝试:

DELIMITER //

CREATE DEFINER=`myname`@`localhost` PROCEDURE `uspAddNewProduct`(
  IN `vModel` VARCHAR(500),
  IN `vSKU` VARCHAR(500),
  IN `vUPC` VARCHAR(500),
  IN `vMPN` VARCHAR(500),
  IN `vQTY` INT(10),
  IN `vPrice` DECIMAL(18,2),
  IN `vProductID` INT,
  IN `vProductName` VARCHAR(500),
  IN `vProductDescription` VARCHAR(500),
  IN `vMetaTitle` VARCHAR(500)
)
BEGIN
  -- INSERTS THE BULK OF THE DATA INTO THE MAIN PRODUCT TABLE
  INSERT INTO `oc_product` (
    `model`,
    `sku`,
    `upc`,
    `mpn`,
    `location`,
    `quantity`,
    `stock_status_id`,
    `image`,
    `shipping`,
    `price`,
    `tax_class_id`,
    `date_available`,
    `minimum`,
    `status`,
    `date_added`,
    `date_modified`,
    `weight_class_id`
  ) VALUES (
    `vModel`,
    `vSKU`,
    `vUPC`,
    `vMPN`,
    'NYC',
    `vQTY`,
    '5',
    CONCAT('catalog/product/', `vUPC`, '.jpg'),
    '1',
    `vPrice`,
    '9',
    NOW(),
    '1',
    '1',
    NOW(),
    NOW(),
    '1'
  );

  -- SELECTS THE RECENTLY CREATED PRODUCT ID
  -- SET @vProductID = (SELECT `product_id` FROM `oc_product` WHERE UPC='1234567890' ORDER BY   `product_id` DESC LIMIT 1)
  SET `vProductID` := (
              SELECT `product_id`
              FROM `oc_product`
              WHERE `UPC` = '1234567890'
              ORDER BY `product_id` DESC LIMIT 1
  );

  -- INSERTS INTO A DESCRIPTION TABLE (BASED ON THE PID ABOVE)
  INSERT INTO `oc_product_description` (
    `product_id`,
    `language_id`,
    `name`, `description`,
    `meta_title`
  ) VALUES (
    `vProductID`,
    '1',
    `vProductName`,
    `vProductDescription`,
    `vMetaTitle`
  );

  -- ASSOCIATES THE PRODUCT WITH THE MAIN STORE (BASED ON THE PID ABOVE)
  INSERT INTO `oc_product_to_store` (
    `product_id`,
    `store_id`
  ) VALUES (
    `vProductID`,
    '1'
  );
END//

DELIMITER ;

关于带有从 Select 声明的参数的 MySQL 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26960820/

相关文章:

c# - 为什么日期字段存储的值与 null 不同

java - 将 UTC JodaTime.DateTime 对象转换为另一个时区的时间戳

php - 获取每个用户特定时间段的事件持续时间

mysql - 应该使用替代 PK 加唯一列还是使用唯一列的自然 PK?

php - OpenCart 3. 修复 fatal error : Uncaught Error: Class 'Controllerextensionpaymentgcash' not found in storage\modification\system\engine\action. php:71

php - 在 opencart 产品页面中没有得到正确的输出

php - 这个 MySQL 查询有问题吗?

php - Opencart 1.5.5.1 : Remove Hidden Products from Featured Module

mysql - LOAD DATA LOCAL INFILE 在内部连接更新的情况下生成 null

javascript - +/- 数量 带 child 的盒子