暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

OceanBase系统架构PL子程序

2024-01-18
149

子程序是包含很多 SQL 和 PL 语句的 PL 单元,以解决特定的问题或者进行一组相关的任务。 子程序可以包含参数,具体值由调用者传入。子程序可以是一个存储过程或者函数。典型的用法是使用存储过程执行一个操作,使用函数计算并返回一个值。

存储程序是存储在数据库内部的子程序,为很多不同数据库应用子程序实现复杂的逻辑运算。MySQL 模式的子程序只有独立的程序,即在 Schema 内创建的程序。MySQL 模式的子程序遵循 SQL 标准中存储程序的标准。

子程序结构

子程序结构跟 PL 块结构一致,包括:

  • 声明部分(可选)

    声明部分包括类型、常量、变量、异常、显式游标和嵌套程序的声明。这些项对于子程序都是本地的,当子程序执行结束时就都不存在了。

  • 执行部分(必选)

    执行部分包括赋值语句、控制执行语句和数据操作语句。

  • 异常处理部分(可选)

    异常处理部分包括处理异常(运行时错误)的代码。

在子程序中添加注释会增加程序的可读性,注释可以出现在子程序的任意位置,编译器会忽略注释。单行注释是以双横线(--)开头的,注释范围到行尾截止。多行注释可以以斜杠和星号(/*)开头,以星号和斜杠(*/)结尾。

一个存储过程的结构如下:

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

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

characteristic: {
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
}

routine_body:
    Valid SQL routine statement

一个函数的结构如下,与存储过程相比,多了 RETURNS 子句:

FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic: {
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
}

routine_body:
    Valid SQL routine statement

子程序优点

相比于客户端程序,子程序有如下优点:

  • 提高性能

    减少网络传输带来的代价;可以提前编译,甚至使用 Cache 机制缓存,减少执行时期的性能消耗。

  • 减少内存消耗

    数据库的共享内存机制会在多个用户执行同一个存储过程时减少内存的消耗。

  • 提高生产力

    存储过程可以为用户减少代码逻辑,提高用户的生产力。

  • 提高安全性

    通过指定存储过程的权限信息,提高安全性。

  • 具有可继承性

    用户可以通过获取权限来访问其他用户定义好的存储过程。

子程序的执行

可以通过以下三种方式执行子程序:

  • 使用 MySQL 工具

  • 通过数据库应用程序调用

  • 通过另一个存储过程或者触发器调用

子程序的元数据

可以通过以下方法获取子程序相关的元数据:

  • 查询 INFORMATION_SCHEMA 的 ROUTINES 视图,可以获取所有的子程序。

  • 通过 SHOW CREATE PROCEDURE 可以查看某个存储过程的定义

  • 通过 SHOW CREATE FUNCTION 可以查看某个函数的定义

  • 通过 SHOW CREATE TRIGGER 可以查看某个触发器的定义

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论