AnalyticDB PostgreSQL版存储过程是为了完成特定功能的 SQL 语句集,一次编译后永久有效。

用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。当前支持多种存储过程语言,如:

  • PL/pgSQL - SQL 过程语言
  • PL/Python - Python 过程语言
  • PL/Java - Java 过程语言

用户可以根据情况灵活选择合适的过程语言创建相应的存储过程。

PL/pgSQL - SQL 过程语言

PL/pgSQL 是AnalyticDB PostgreSQL版数据库系统的一个默认安装的过程语言,易于使用。PL/pgSQL 的设计目标是创建一种可加载的过程语言,可以:

  • 用于创建函数和触发器过程;
  • 为 SQL 语言增加控制结构;
  • 执行复杂的计算;
  • 继承所有用户定义类型、函数、操作符;
  • 定义为被服务器信任的语言。

PL/pgSQL 创建的函数和内置函数的使用情景相同。 比如,可以创建复杂的条件计算函数,并随后将之用于定义操作符或者用于函数索引中。

PL/Python - Python 过程语言

PL/Python 过程语言允许用 Python语言编写AnalyticDB PostgreSQL版过程函数。要在特定数据库中安装 PL/Python,使用CREATE EXTENSION plpythonu或者在命令行使用createlang plpythonu dbname

说明 如果一门语言安装到了template1 database 里面,那么随后创建的数据库都将会自动安装该语言。

PL/Python是一种“不可信”语言,它没有提供任何限制用户可为与不可为的手段。函数的编写人员使用该函数时须注意约束条件。

PL/Java - Java 过程语言

使用AnalyticDB PostgreSQL版数据库的 PL/Java 扩展,用户可以使用自己喜欢的Java IDE编写Java方法,并将包含这些方法的JAR文件安装到AnalyticDB PostgreSQL版数据库中。

AnalyticDB PostgreSQL版数据库的PL/Java包基于开源PL/Java 1.4.0,提供以下功能:

  • 能够使用Java 8或Java 1执行PL/Java函数。
  • 参数和结果的标准化映射。支持复杂类型集。
  • 使用AnalyticDB PostgreSQL版数据库内部SPI接口的嵌入式、高性能JDBC驱动程序。
  • 支持JDBC驱动程序的元数据,包括DatabaseMetaData和ResultSetMetaData。
  • 能够从查询中返回的结果集中逐行返回结果。
  • 完全支持保留点和异常处理。
  • 能够使用IN,INPUT和OUT参数。
  • 当一个事务或者保留点提交或者回滚时,事务和保留点监听器能够被编译执行。

SQL中的一个函数对应Java类中指定一个静态方法。为了使函数能够执行,所指定的类必须能够通过AnalyticDB PostgreSQL版数据库服务器上的 pljava_classpath 配置参数来指定类路径。

同时,AnalyticDB PostgreSQL版支持通过CREATE LIBRARY语法,将用户编写的JAR文件安装到数据库中,无须额外设置 pljava_classpath 路径。