SYSPROCEDURES

sysprocedures 系统目录表列出了数据库中注册的每个函数和过程的特征。它对每个例程包含一行。

sysprocedures 中的每个函数具有唯一值 procid,称为例程标识符。在整个系统目录中,函数由其例程标识符而不是其名称标识。

sysprocedures 表具有以下列。
表 1. SYSPROCEDURES 表列描述
类型 解释
procname VARCHAR(128) 例程的名称
owner VARCHAR(32) 所有者的名称
procid SERIAL 例程的唯一标识代码
mode CHAR(1) 方式类型:
  • D d = DBA
  • O o = 所有者
  • P p = 受保护
  • R r = 受限制
  • T t = 触发器
retsize INTEGER 返回值的已编译大小(以字节计)
symsize INTEGER 符号表的已编译大小(以字节计)
datasize INTEGER 常量数据的已编译大小(以字节计)
codesize INTEGER 例程代码的已编译大小(以字节计)
numargs INTEGER 例程的自变量数
isproc CHAR(1) 指定例程是过程还是函数:
  • t = 过程
  • f = 函数
specificname VARCHAR(128) 指定例程的名称
externalname VARCHAR(255) 外部例程的位置。此项在内容和格式上都是特定于语言的。
paramstyle CHAR(1) 参数样式:I = GBase 8s
langid INTEGER 语言代码(在 sysroutinelangs 表中)
paramtypes RTNPARAMTYPES 描述例程参数的信息
variant BOOLEAN 例程是否是 VARIANT:
  • t = 是 VARIANT
  • f = 不是 VARIANT
client BOOLEAN 保留供将来使用
handlesnulls BOOLEAN NULL 处理指示符:
  • t = 处理 NULL
  • f = 不处理 NULL
percallcost INTEGER 每个调用的 CPU 量

执行 UDR 的整数成本:成本 / 调用 - 0 -(2^31-1)

commutator VARCHAR(128) 换向函数的名称
negator VARCHAR(128) 否定函数的名称
selfunc VARCHAR(128) 用于估计 UDR 的选择性的函数的名称
internal BOOLEAN 指定是否可以从 SQL 调用例程:
  • t = 例程是内部的,不能从 SQL 调用
  • f = 例程是外部的,可以从 SQL 调用
class CHAR(18) 执行例程应依据的 CPU 类
stack INTEGER 每个调用所需的堆栈大小(以字节计)
parallelizable BOOLEAN UDR 的并行化指示符:
  • t = 可并行化
  • f = 不可并行化
costfunc VARCHAR(128) UDR 的成本函数的名称
selconst SMALLFLOAT UDR 的选择性常量
flags INTEGER 仅供内部使用

mode 列中,R 方式是 O 方式的特殊情况。如果例程是以不同于例程创建者的指定所有者创建的,那么例程处于受限 (R) 方式。如果执行了涉及远程数据库的例程语句,那么数据库服务器使用执行例程的用户的访问特权而不是例程所有者的特权。在所有其他情况下,R 方式例程与 O 方式例程行为相同。

数据库服务器可以创建受保护的例程供内部使用。sysprocedures 表在 mode 列中用字母 Pp 标识这些受保护的例程,其中 p 指示 SPL 例程。受保护例程具有以下限制:
  • 您无法使用 ALTER FUNCTION、ALTER PROCEDURE 或 ALTER ROUTINE 语句修改受保护的例程。
  • 您无法使用 DROP FUNCTION、DROP PROCEDURE 或 DROP ROUTINE 语句注销受保护的例程。
  • 您无法使用 dbschema 实用程序显示受保护的例程。
在较早的版本中,受保护的 SPL 例程用小写 p 指示。从 V9.0 开始,受保护的 SPL 例程将被视为 DBA 例程,而不能是所有者例程。因此,DO 表示 DBA 例程和所有者例程,而 do 表示受保护的 DBA 例程和受保护的所有者例程。
触发器方式指定用户定义的 SPL 例程,只能从触发操作的 FOR EACH ROW 部分调用该例程。
重要: 在发出 SET SESSION AUTHORIZATION 语句后,数据库服务器为所有使用新标识时创建的所有者例程指定限制方式。

唯一索引定义于 procid 列。procnameisprocnumargsowner 列的组合索引允许重复值,specificnameowner 列的组合索引也允许重复值。