0

我在使用触发器从其他表中提取信息以便在我为特定关系执行插入时插入它们时遇到问题。这基本上是为了让我不必在我的关系所需的其他表中查找信息。问题是我在设置一个等于查询结果的变量然后使用该变量中的值来设置我的表中的一列时遇到问题。代码看起来像这样。问题是我的变量永远不会被设置它总是为空,但我可以从命令行执行查询并获得结果,所以我不确定问题是什么,有人可以指出我做错了什么。

值得注意的是关系 sales_cost 有 2 个成员 model(primary key) VARCHAR(45) 和 price FLOAT

DELIMITER $$

USE `mydb`$$

CREATE
DEFINER=`local`@`localhost`
TRIGGER `mydb`.`sales_contract_before`
BEFORE INSERT ON `mydb`.`sales_contract`
FOR EACH ROW
BEGIN

/*variables*/
declare cost float;

/*
SELECT car.model INTO model FROM car where car.id = NEW.car_id;
set NEW.model = model;*/

 set cost = (select price from sales_cost where model = NEW.model);  //cost never gets set its always null


set new.price = cost;

END$$

更新:我似乎已经弄清楚问题出在哪里,但仍然想要一些见解(如果有人知道如何做到这一点),如果我在任何集合中使用 WHERE 查询,出于某种原因,问题在于使用 WHERE 限定符无论我从中选择什么表,它都不会返回(或返回 NULL)。我所做的是创建了一个函数,该函数接受模型名称,然后通过执行相同的查询返回成本。但是,如果有人可以举例说明如何将变量设置为等于查询结果的查询结果,我将不胜感激。我认为这一定是我的语法错误,但我对触发器的了解还不够,无法冒险猜测这个问题

4

1 回答 1

0

还有另一种方法可以像这样使用选择查询设置多变量

DECLARE var1 INT DEFAULT 0;
DECLARE var2 DATE;
BEGIN
Select id,date From table_name Where id=Id
INTO var1,var2;
END;
于 2015-10-11T06:51:37.783 回答