我有atable叫map_edge,在map-edge表中有以下记录:
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,position_id = 2,child_id = 2;
然后calculateID(100,2,3) = 107
calculateID(100,3,3)= 109 and so on
使用此过程,我想将map_edge表修改为:
childID parentID
3 21
107 24
109 26
111 27
113 30
你能帮帮我吗?我可以用函数而不是程序解决问题吗?非常感谢!
答案 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;
答案 1 :(得分:0)
在存储过程中声明变量时,需要注意避免与列名冲突。一种方法是使用诸如" p _"之类的前缀。 (用于参数)," v _" (对于变量),或者"在_" (用于参数)。
将代码编写为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
。该值仅使用一次。