2015-10-06 78 views
0

我已經atable稱爲map_edge,在地圖邊緣表具有以下記錄:如何將參數作爲輸入發送到mysql程序中?

childID parentID 
     3  21 
     3  24 
     3  26 
     3  27 
     3  30 

我已經創建了下面的過程在MySQL:

CREATE PROCEDURE calculateID (fix_val integer,position_id integer,child_id integer) 
BEGIN 
DECLARE calID integer; 
set calID = fix_val + (position_id * 2) + child_id; 
select calID; 
END; 

採取的第二行的例子,我想要作爲輸入發送到procudure:fix_val = 100,po​​sition_id = 2,child_id = 2; 然後calculateID(100,2,3) = 107calculateID(100,3,3)= 109 and so on

這個程序,我想修改map_edge表:

childID parentID 
     3  21 
     107  24 
     109  26 
     111  27 
     113  30 

你能幫助我嗎?我可以用函數而不是程序來解決問題嗎?非常感謝提前!

回答

0

在存儲過程中聲明變量時,需要小心避免與列的名稱發生衝突。一種方法是使用諸如「p_」(用於參數),「v_」(用於變量)或「in_」(用於參數中)的前綴。

要編寫代碼爲update

CREATE PROCEDURE calculateID (
    in_fixval integer, 
    in_positionid integer, 
    in_childid integer, 
    in_parentid integer) 
BEGIN 
    update map_edge 
     set child_id = in_fix_val + (in_position_id * 2) + in_child_id 
     where parent_id = in_parentid and child_id = in_childid; 
END; 

我不認爲有必要在代碼中聲明calID。該值只能使用一次。

+0

非常感謝!現在它工作正常。 –

0

是的,只在程序中包含UPDATE語句(OR)使用用戶定義的標量函數並在UPDATE語句中使用相同的語句。

CREATE PROCEDURE calculateID (fix_val integer,position_id integer,child_id integer, parentid integer) 
BEGIN 
DECLARE calID integer; 
set calID = fix_val + (position_id * 2) + child_id; 
update map_edge set child_id = calID 
where parent_id = parentid and child_id = child_id; 
END; 
相關問題