方法调用
使用双点运算符调用系统生成的观察器和增变器方法以及用户定义的方法。
- 主题表达式
- 具有用户定义的结构化类型的静态结果类型的表达式。 方法名
- 方法的非限定名。 subject-expression 的静态类型或其超类型之一必须包含具有指定名称的方法。 (expression, ...)
- method-name 的自变量在括号中指定。 可以使用空括号来指示没有自变量。 method-name 和指定自变量表达式的数据类型用于根据 subject-expression的静态类型解析为特定方法。
用于方法调用的双点运算符是高度优先的从左到右 infix 运算符。 例如,以下两个表达式等效:
a..b..c + x..y..z和 ((a..b)..c) + ((x..y)..z)如果方法没有除其主题以外的参数,那么可以使用或不使用括号来调用该方法。 例如,以下两个表达式等效:
point1..x
point1..x()方法调用中的空主题按如下所示进行处理:
- 如果使用空主题调用系统生成的 mutator 方法,那么会产生错误 (SQLSTATE 2202D)
- 如果使用空主体集调用除系统生成的增变器以外的任何方法,那么不会执行该方法,并且其结果为空。 此规则包含带有 SELF AS RESULT 的用户定义方法。
创建数据库对象 (例如,包,视图或触发器) 时,将找到针对其每个方法调用存在的最佳拟合方法。
注: 也可以使用常规函数表示法来调用定义为 WITH FUNCTION ACCESS 的类型的方法。 函数解析将所有函数以及具有函数访问权的方法视为候选函数。 但是,无法使用方法调用来调用函数。 方法解析会考虑所有方法,而不会将函数视为候选方法。 未能解析到相应的函数或方法将导致错误 (SQLSTATE 42884)。
示例
- 使用双点运算符来调用名为 AREA 的方法。 假设存在一个名为 Rstrings 的表,其中包含结构化类型为 CIRCLE_COL 的列 CIRCLE_COL。 此外,假设已为CIRCLE类型定义了名为AREA的方法,
AREA() RETURNS DOUBLE其定义如下:SELECT CIRCLE_COL..AREA() FROM RINGS
