请问GreatDB数据库支持存储过程吗?相关人员解答一下

GreatDB数据库支持存储过程,但是使用上有一些限制,截止到目前,GreatDB 对存储过程有如下限制。
-
存储过程内执行程序的语句块需要包含在复合结构 BEGIN … END 之间,语句如:
CREATE PROCEDURE proc1() SELECT 1;
将不能正确解析,而
CREATE PROCEDURE proc1() BEGIN SELECT 1; END
能够正确解析。这个限制不适用于 DECLARE HANDLER 语句块。 -
当存储过程中任意位置涉及到表达式计算时,表达式计算必须含有计算操作符,例如语句块
if(@var)
是错误的,而
if(@var=1)
是正确的。 -
在 CREATE PROCEDURE 的参数列表内不能有函数调用。
-
dbscale_reserved 是 GreatDB 在处理存储过程的名称时的保留字,在 CREATE PROCEDURE 时,请不要建立含有 dbscale_reserved 字样的存储过程名字。
-
创建存储过程时,请确保存储过程中定义的相关参数或内部使用的参数名与现有 session 中的用户变量不重名,否则可能引起 session 中用户变量异常或存储过程执行结果错误。
-
GreatDB 存储过程暂不支持对 DEFINER 所指定的用户做权限检查。
-
GreatDB 存储过程暂不支持 SIGNAL 和 RESIGNAL 功能。同时 SQLWARNING,NOT FOUND,SQLEXCEPTION 等 Handler 将不捕获 SIGNAL 和 RESIGNAL 定义的信号。
-
GreatDB 存储过程暂不支持定义和处理 SQLWARNING 条件。
-
DROP PROCEDURE 仅对当前 Session 有效,即在 DROP 某一存储过程后,其他 Session,若已经执行过该存储过程 CALL 语句的,还可以继续调用该存储过程。
-
如果存储过程含有传入或传出参数,在执行对应 CALL 语句时,不能将 CALL 语句中的参数名与创建存储过程时的参数同名,否则不保证执行结果正确性。例如语句 CREATE PROCEDURE p1(IN a INT, OUT b INT, INOUT c INT)…
当执行 CALL p1(@a, @b, @d); 时,不保证执行结果正确性。 -
目前 CALL 语句的参数只能是常量或用户变量,不支持函数和表达式计算。
-
创建或者删除存储过程时,如果该存储过程内含有对其他存储过程的调用,那么被调用的存储过程必须已经通过 GreatDB 创建且存在。
-
事务内的 CALL 语句中不能含有指针(CURSOR)。


