所以我有三张桌子,我得做一张这样的商店手续
CREATE DEFINER=`brambang`@`%` PROCEDURE `create_discount_campaign2`(
IN discount_campaign_discount_type_id CHAR(22),
IN discount_campaign_product_id varchar(100),
IN discount_campaign_marketing_target_id INT,
IN discount_campaign_max_use_per_user INT,
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,
IN discount_campaign_min_order_price decimal(10,0),
IN discount_campaign_discount_quota INT,
IN discount_campaign_min_product_varian INT,
IN discount_campaign_apply_all_product INT,
IN discount_campaign_product_product_id INT,
IN discount_campaign_product_createdby INT,
IN discount_campaign_product_updatedby INT,
IN discount_campaign_product_category_id VARCHAR(100),
IN discount_campaign_advanced_discount_advanced_rules_id INT,
IN discount_campaign_advanced_value varchar(255),
IN discount_campaign_advanced_status TINYINT
)
MODIFIES SQL DATA
BEGIN
DECLARE last_id BIGINT;
INSERT INTO discount_campaigns
SET
discount_type_id = discount_campaign_discount_type_id,
product_id = discount_campaign_product_id,
marketing_target_id = discount_campaign_marketing_target_id,
max_use_per_user = discount_campaign_max_use_per_user,
discount_code = discount_campaign_discount_code,
discount_amount = discout_campaign_discount_amount,
start_date = discount_campaign_start_date,
end_date = discount_campaign_end_date,
min_order_quantity = discount_campaign_min_order_quantity,
min_order_price = discount_campaign_min_order_price,
discount_quota = discount_campaign_discount_quota,
min_product_variant = discount_campaign_min_product_varian,
apply_all_products = discount_campaign_apply_all_product,
createdAt = NOW(),
updatedAt = NOW();
IF (discount_campaign_apply_all_product = 0) THEN
SET last_id = LAST_INSERT_ID();
INSERT INTO discount_campaign_product (discount_campaign_id,
product_id, active, createdby, updatedby, createdAt, updatedAt)
SELECT last_id, c.product_id, case when
find_in_set (c.product_id, discount_campaign_product_product_id) then 0 else 1 end
discount_campaign_product_createdby, NULL, NOW(), NULL
FROM product_categories AS c
WHERE FIND_IN_SET(c.category_id, discount_campaign_product_category_id)
AND c.status=1;
END IF;
SET
discount_advanced_rules_id = discount_campaign_advanced_discount_advanced_rules_id,
value = discount_campaign_advanced_value,
status = discount_campaign_advanced_status;
IF (discount_campaign_advanced_discount_advanced_rules_id = 0) THEN
INSERT INTO discount_campaign_advanced
SET
discount_campaign_id = last_id,
discount_advance_rules_id = discount_campaign_advanced_discount_advanced_rules_id,
value = discount_campaign_advanced_value,
createdAt = NOW(),
status = discount_campaign_advanced_status;
END IF;
END
问题在本部分的最后一部分。
SET
discount_advanced_rules_id = discount_campaign_advanced_discount_advanced_rules_id,
value = discount_campaign_advanced_value,
status = discount_campaign_advanced_status;
IF (discount_campaign_advanced_discount_advanced_rules_id = 0) THEN
INSERT INTO discount_campaign_advanced
SET
discount_campaign_id = last_id,
discount_advance_rules_id = discount_campaign_advanced_discount_advanced_rules_id,
value = discount_campaign_advanced_value,
createdAt = NOW(),
status = discount_campaign_advanced_status;
END IF;
END
当我运行它,它似乎是Error 1193: Unknown system variable 'discount_advanced_rules_id' SQL statement
,我错过了什么部分?
这个存储过程包含三个已经连接的表,但是在最后一部分,逻辑是这样的,如果discount_advanced_rules_id
是0,那么数据必须插入到discount_campaign_advanced
表中,否则,如果没有,那么就不插入到该表。
发布于 2020-10-12 07:44:06
discount_advanced_rules_id
不在您的代码中声明。
您可以在开始之后声明它:
SET @discount_advanced_rules_id = 0;
然后你可以用它:
SET
@discount_advanced_rules_id = discount_campaign_advanced_discount_advanced_rules_id,
value = discount_campaign_advanced_value,
status = discount_campaign_advanced_status;
对于不从输入开始的每个变量也是一样的。
您需要在变量的名称之前使用@。
https://stackoverflow.com/questions/64311896
复制相似问题