如何将参数作为输入发送到mysql程序?

时间:2015-10-06 10:22:21

标签: mysql stored-procedures functional-programming

我有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,po​​sition_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
你能帮帮我吗?我可以用函数而不是程序解决问题吗?非常感谢!

2 个答案:

答案 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。该值仅使用一次。