2012-05-07 33 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; 
選擇查詢