背景信息
PL 是一种过程化程序语言(Procedural Language,PL)。是对 SQL 的扩展,在普通 SQL 语句的基础上增加了编程语言的特点,将数据操作和查询语句组织在 PL 代码的过程化代码中,通过逻辑判断、循环等操作实现复杂的功能。
使用 PL 可以编写具有高级功能的程序,能够将业务逻辑封装在数据库内部,提供更好的抽象性和安全性,同时减少了网络的交互,调用速度更快,从而提升整体性能。
PL 程序的开发工作是数据库服务开发人员重要的日常工作,与 SQL 语句的支持模块类似,PL 的调试模块同样为非常重要的功能。因此,在编程过程中,开发人员需要一个PL 开发区域和调试功能。
PL 语句可用于编写函数、存储过程、程序包和触发器等数据库对象。
ODC V2.2.0 及之后版本支持 PL 对象和匿名块的创建、编译、运行和调试等功能。用户可在匿名块窗口的编辑区域中编译 PL 语句,同时可对已创建的 PL 对象进行编辑和调试等操作。建议使用 ODC 最新版本以获得更好的体验。
本文档以创建 OceanBase Oracle 类型的存储过程为例,在数据库 GSH 中创建存储过程 PROC_VARCHAR2。
文中所使用的均为示例数据,您可根据实际情况对数据进行替换。
前提条件
ODC PL 支持现状
功能 | 支持的对象 | 支持的数据源 | 支持版本 |
编译 | 函数/存储过程/程序包 | OceanBase Oracle、OB Cloud Oracle | V2.2.7x、V3.0.0 及之后版本。 |
调试 | 函数/存储过程/匿名块 | OceanBase Oracle | V3.2.3 及之后版本。 |
运行 | 函数/存储过程 | OceanBase Oracle、OB Cloud Oracle、OceanBase MySQL、OB Cloud、MySQL | V2.0.x 及之后版本。 |
函数/存储过程 | MySQL | V5.7 | |
运行 | 程序包/匿名块 | OceanBase Oracle、OB Cloud Oracle | V2.0.x 及之后版本。 |
同时需要注意:
若数据源为 OceanBase,有且仅能通过 OBProxy 连接,该实例将不支持调试。
匿名块窗口仅在 OceanBase Oracle/OB Cloud Oracle 数据源提供。
ODC V3.2.3 之前版本不支持在 arm 架构下进行调试。
PL 编译
在 SQL 窗口中创建存储过程。
CREATE OR REPLACE PROCEDURE PROC_VARCHAR2(p1 in VARCHAR2, p2 out VARCHAR2, p3 in out VARCHAR2) as v1 varchar2(64) := 'hello,oceanbase'; begin dbms_output.put_line(p1); dbms_output.put_line(p3); p2 := 'hello,odc'; end;
在 SQL 开发窗口的左侧导航栏 > 存储过程列表中,选择 编译 存储过程 PROC_VARCHAR2。
编译 PL 语句并查看编译结果。
PL 调试
在 SQL 开发窗口的左侧导航栏 > 存储过程列表中,选择调试存储过程 PROC_VARCHAR2,进入调试模式。
设置参数值后,单击 确定。
重要OceanBase V4.0.0 及之后的版本,调试前需要获取调试权限。示例:
GRANT DEBUG CONNECT SESSION TO GSH; GRANT DEBUG ANY PROCEDURE TO GSH;
进入调试页面,单击批量执行,运行 PL 语句。