2012-05-07 31 views
0

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

值得注意的关系sales_cost有2名成员模型(主键)VARCHAR(45)和价格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)。我所做的是创建了一个函数,它接受模型名称,然后通过执行相同的查询返回成本。但是,如果任何人都可以举一个例子来说明如何设置一个变量等于一个查询的结果与一个在哪里工作,我真的很感激。我想,那一定是我的一个语法错误,但我真的不知道有足够的了解触发器冒险去猜测这个问题

+0

不,我不认为它是它的价值仍然为空后我尝试和设置成本(我尝试使用它时出现错误)。我的意思是我可以使用来自CL的相同查询并获得结果,所以我知道表中有与查询相对应的内容,但由于某些原因无法在触发器中设置变量 – cpowel2

+0

确定查询返回只有一个结果?并请发布您收到的错误消息。 – beck03076

+0

我得到的错误是试图在表中插入值为空的值,因为它从来没有设置它说错误列'价格'不能为空。此外,它只返回1结果我是积极的我通过CL和工作台测试它 – cpowel2

回答

0

还有另一种方式来设置多变量,像这样

DECLARE var1 INT DEFAULT 0; 
DECLARE var2 DATE; 
BEGIN 
Select id,date From table_name Where id=Id 
INTO var1,var2; 
END; 
选择查询