暂无图片
请问GreatDB数据库支持存储过程吗?
我来答
分享
李嫄
2020-07-29
请问GreatDB数据库支持存储过程吗?

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

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
万里数据库

GreatDB数据库支持存储过程,但是使用上有一些限制,截止到目前,GreatDB 对存储过程有如下限制。

  1. 存储过程内执行程序的语句块需要包含在复合结构 BEGIN … END 之间,语句如:
    CREATE PROCEDURE proc1() SELECT 1;
    将不能正确解析,而
    CREATE PROCEDURE proc1() BEGIN SELECT 1; END
    能够正确解析。这个限制不适用于 DECLARE HANDLER 语句块。

  2. 当存储过程中任意位置涉及到表达式计算时,表达式计算必须含有计算操作符,例如语句块
    if(@var)
    是错误的,而
    if(@var=1)
    是正确的。

  3. 在 CREATE PROCEDURE 的参数列表内不能有函数调用。

  4. dbscale_reserved 是 GreatDB 在处理存储过程的名称时的保留字,在 CREATE PROCEDURE 时,请不要建立含有 dbscale_reserved 字样的存储过程名字。

  5. 创建存储过程时,请确保存储过程中定义的相关参数或内部使用的参数名与现有 session 中的用户变量不重名,否则可能引起 session 中用户变量异常或存储过程执行结果错误。

  6. GreatDB 存储过程暂不支持对 DEFINER 所指定的用户做权限检查。

  7. GreatDB 存储过程暂不支持 SIGNAL 和 RESIGNAL 功能。同时 SQLWARNING,NOT FOUND,SQLEXCEPTION 等 Handler 将不捕获 SIGNAL 和 RESIGNAL 定义的信号。

  8. GreatDB 存储过程暂不支持定义和处理 SQLWARNING 条件。

  9. DROP PROCEDURE 仅对当前 Session 有效,即在 DROP 某一存储过程后,其他 Session,若已经执行过该存储过程 CALL 语句的,还可以继续调用该存储过程。

  10. 如果存储过程含有传入或传出参数,在执行对应 CALL 语句时,不能将 CALL 语句中的参数名与创建存储过程时的参数同名,否则不保证执行结果正确性。例如语句 CREATE PROCEDURE p1(IN a INT, OUT b INT, INOUT c INT)…
    当执行 CALL p1(@a, @b, @d); 时,不保证执行结果正确性。

  11. 目前 CALL 语句的参数只能是常量或用户变量,不支持函数和表达式计算。

  12. 创建或者删除存储过程时,如果该存储过程内含有对其他存储过程的调用,那么被调用的存储过程必须已经通过 GreatDB 创建且存在。

  13. 事务内的 CALL 语句中不能含有指针(CURSOR)。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏