3.6 存储过程支持方式

3.6.1 Syntax

Create procedure

/Hint/ CREATE [DEFINER = { user | CURRENT_USER }]

PROCEDURE sp_name ([proc_parameter[,...]])

[characteristic ...] routine_body

/Hint/ CREATE

[DEFINER = { user | CURRENT_USER }]

FUNCTION sp_name ([func_parameter[,...]])

RETURNS type [characteristic ...] routine_body

drop procedure

/Hint/ DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

call procedure

[/Hint/] CALL sp_name([parameter[,...]])

[/Hint/] CALL sp_name[()]

3.6.2 举例

删除存储过程:
/*!dble:sql=select 1 from account */drop procedure if exists proc_arc;
创建存储过程:
/*!dble:sql=select 1 from account */create procedure proc_arc(userid1 int)
begin
  insert into account_arc select * from account where userid=userid1;
  update account set arc_flag=true,arc_time=now() where userid=userid1;
end;
调用存储过程:
/*!dble:sql=select 1 from account */call proc_arc(1);

3.6.3 限制

  • dble支持存储过程和自定义函数的透传,存储过程的开发完全使用MySQL的语法,开发、调试与部署的方法同单机MySQL相同。存储过程和自定义函数需要在所有节点上创建,节点扩容的时候也需要考虑存储过程和自定义函数的迁移。
  • 存储过程和自定义函数是直接发送到节点上执行,中间件不参与运算,因此要慎重使用,需要保证过程的内部不出现跨节点运算。
  • 存储过程调用时,要在调用语句之前增加注解,系统根据注解透传到节点运行,存储过程的执行路径以及执行结果的正确性由开发者保证。对于只是写入数据,不返回结果的存储过程,需要注意避免重复写入数据。对于返回结果的存储过程,需要特别注意返回结果的正确性。dble不会对存储过程的结果进行汇聚运算,只能由应用端自行完成。

results matching ""

    No results matching ""