2014-11-16 38 views
0

我想爲我的Opencart商店創建MySQL存儲過程。爲了使產品是可見的,它必須在3個表MySQL從選擇聲明的參數存儲過程

  1. oc_product
  2. oc_product_description
  3. oc_product_to_store

所以我插入第一個表,收集ID & INSERT INTO帶有該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') 

回答

0

be ca與變量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 ; 
0

您可以使用的下面

SET vProductID = (SELECT `product_id` 
FROM `oc_product` 
WHERE UPC='1234567890' 
ORDER BY `product_id` DESC LIMIT 1) 

SELECT `product_id` into vProductID 
FROM `oc_product` 
WHERE UPC='1234567890' 
ORDER BY `product_id` DESC LIMIT 1