【发布时间】:2020-10-10 04:01:49
【问题描述】:
我有一个关于 2 个这样的表的存储过程:
CREATE DEFINER=`brambang`@`%` PROCEDURE `create_discount_campaign`(
IN discount_campaign_discount_type_id CHAR(22),
IN discount_campaign_product_id INT(10),
IN discount_campaign_marketing_target_id INT(10),
IN discount_campaign_max_use_per_user int(11),
IN discount_campaign_discount_code varchar(100),
IN discout_campaign_discount_amount decimal(10,0),
IN discount_campaign_start_date datetime,
IN discount_campaign_end_date datetime,
IN discount_campaign_min_order_quantity INT(11),
IN discount_campaign_min_order_price decimal(10,0),
IN discount_campaign_discount_quota INT(11),
IN discount_campaign_min_product_varian INT(11),
IN discount_campaign_apply_all_product INT(10),
IN discount_campaign_product_product_id int(10) unsigned,
IN discount_campaign_product_active tinyint(1),
IN discount_campaign_product_createdby int(11),
IN discount_campaign_product_updatedby int(11),
IN discount_campaign_product_category_id VARCHAR(100),
IN discount_campaign_advanced_discount_advanced_rules_id int(50),
IN discount_campaign_advanced_value varchar(255),
IN discount_campaign_advanced_status tinyint(4)
)
proc:
BEGIN
DECLARE is_dc_discount_type_id INT(10);
DECLARE is_dc_product_id INT(10);
DECLARE is_dc_marketing_target_id INT(10);
DECLARE is_dc_max_use_per_user INT(11);
DECLARE is_dc_discount_code varchar(100);
DECLARE is_dc_discount_amount decimal(10,0);
DECLARE is_dc_start_date datetime;
DECLARE is_dc_end_date datetime;
DECLARE is_dc_min_order_quantity INT(11);
DECLARE is_dc_min_order_price decimal(10,0);
DECLARE is_dc_discount_quota INT(11);
DECLARE is_dc_min_product_variant INT(11);
DECLARE is_dc_apply_all_product INT(10);
DECLARE is_dcp_product_id INT(10);
DECLARE is_dcp_active tinyint(1);
DECLARE is_dcp_createdby int(11);
DECLARE is_dcp_updatedby int(11);
DECLARE is_dca_discount_advanced_rules_id int(50);
DECLARE is_dca_value varchar(255);
DECLARE is_dca_status tinyint(4);
DECLARE LAST_INSERT_ID int(11);
DECLARE discount_campaign_product_category_id varchar(100);
SET @querie = NULL;
SET @querie2 = NULL;
SET @querie3 = NULL;
SET lc_time_names = "id_ID";
SET @is_dc_discount_type_id = NULL;
SET @is_dc_product_id = NULL;
SET @is_dc_marketing_target_id = NULL;
SET @is_dc_max_use_per_user = NULL;
SET @is_dc_discount_code = NULL;
SET @is_dc_discount_amount = NULL;
SET @is_dc_start_date = NULL;
SET @is_dc_end_date = NULL;
SET @is_dc_min_order_quantity = NULL;
SET @is_dc_min_order_price = NULL;
SET @is_dc_discount_quota = NULL;
SET @is_dc_min_product_variant = NULL;
SET @is_dc_apply_all_product = NULL;
SET @is_dcp_product_id = NULL;
SET @is_dcp_active = NULL;
SET @is_dcp_createdby = NULL;
SET @is_dcp_updatedby = NULL;
SET @is_dca_discount_advanced_rules_id = NULL;
SET @is_dca_value = NULL;
SET @is_dca_status = NULL;
SET @LAST_INSERT_ID = NULL;
SET @discount_campaign_product_category_id = NULL;
SET @is_dc_discount_type_id = discount_campaign_discount_type_id;
SET @is_dc_product_id = discount_campaign_product_id;
SET @is_dc_marketing_target_id = discount_campaign_marketing_target_id;
SET @is_dc_max_use_per_user = discount_campaign_max_use_per_user;
SET @is_dc_discount_code = discount_campaign_discount_code;
SET @is_dc_discount_amount = discout_campaign_discount_amount;
SET @is_dc_start_date = discount_campaign_start_date;
SET @is_dc_end_date = discount_campaign_end_date;
SET @is_dc_min_order_quantity = discount_campaign_min_order_quantity;
SET @is_dc_min_order_price = discount_campaign_min_order_price;
SET @is_dc_discount_quota = discount_campaign_discount_quota;
SET @is_dc_min_product_variant = discount_campaign_min_product_varian;
SET @is_dc_apply_all_product = discount_campaign_apply_all_product;
SET @discount_campaign_product_category_id = discount_campaign_product_category_id;
SET @querie = CONCAT("
INSERT INTO discount_campaigns (
discount_type_id,
product_id,
marketing_target_id,
max_use_per_user,
discount_code,
discount_amount,
start_date,
end_date,
min_order_quantity,
min_order_price,
discount_quota,
min_product_variant,
apply_all_products,
createdAt,
updatedAt
) VALUES (
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
NOW(),
NOW()
);
");
PREPARE stmt FROM @querie;
EXECUTE stmt
USING
@is_dc_discount_type_id,
@is_dc_product_id,
@is_dc_marketing_target_id,
@is_dc_max_use_per_user,
@is_dc_discount_code,
@is_dc_discount_amount,
@is_dc_start_date,
@is_dc_end_date,
@is_dc_min_order_quantity,
@is_dc_min_order_price,
@is_dc_discount_quota,
@is_dc_min_product_variant,
@is_dc_apply_all_product;
DEALLOCATE PREPARE stmt;
SET @is_dcp_product_id = discount_campaign_product_product_id;
SET @is_dcp_active = discount_campaign_product_active;
SET @is_dcp_createdby = discount_campaign_product_createdby;
SET @is_dcp_updatedby = discount_campaign_product_updatedby;
SET @LAST_INSERT_ID = LAST_INSERT_ID();
IF (discount_campaign_apply_all_product = 0) THEN
SET @querie2 = CONCAT("INSERT INTO discount_campaign_product (discount_campaign_id,
product_id,
active,
createdby,
updatedby,
createdAt,
updatedAt
) SELECT ?,product_id,?,?,NULL,NOW(),NULL
FROM product_categories WHERE category_id IN
(?) AND status=1");
PREPARE stmt_2 FROM @querie2;
EXECUTE stmt_2
USING
@LAST_INSERT_ID,
@is_dcp_active,
@is_dcp_createdby,
@discount_campaign_product_category_id;
DEALLOCATE PREPARE stmt_2;
END IF;
END
基本上我有 2 个表 discount_campaign(任何具有别名 dc 的变量都是此表)和 discount_campaign_product(任何具有别名的变量 dcp 是这个表)。该存储过程具有将数据插入到表 discount_campaign 的功能,该参数使用已制作的参数。在 discount_campaign 表中有列即 apply_all_product。如果 apply_all_product 在参数中填充了 "0",那么另一个参数(别名为 dcp)将在 discount_campaign_product 表中插入一些数据。但是当我使用 apply_all_product = 0 申请时,此存储过程仅在 discount_campaign 表中插入数据,不在 discount_campaign_product 表中。
我在这个存储过程中的错误在哪里?
【问题讨论】:
-
请添加表定义和调用语句。
标签: mysql stored-procedures sql-insert