RETURN 语句

RETURN 语句用于从例程返回值。 对于 SQL 函数或方法,它返回函数或方法的结果。 对于 SQL 过程,它可以选择返回一个整数状态值。

调用

此语句可以嵌入在 SQL 函数、SQL 方法或 SQL 过程中。 它不是可执行语句,并且不能动态准备。

权限

无需任何权限即可调用 RETURN 语句。 但是,该语句的授权标识必须有权调用已嵌入在 RETURN 语句中的任何表达式或全查询。

语法

Read syntax diagramSkip visual syntax diagramRETURN expressionNULLWITH,common-table-expressionfullselect

描述

expression
指定从例程返回的值:
  • 如果例程是编译型表函数以外的函数或方法,那么必须指定 expression、NULL 或 fullselect 之一 (SQLSTATE 42631),并且结果的数据类型必须可分配给例程的 RETURNS 类型 (SQLSTATE 42866)。
  • 如果例程是内联表函数,那么不能指定标量表达式(标量全查询除外)(SQLSTATE 428F1)。 如果例程是编译型表函数,那么不能指定表达式。
  • 如果例程是过程,那么 expression 的数据类型必须是 INTEGER (SQLSTATE 428F2)。 过程不能返回 NULL 或 fullselect
NULL
指定该函数或方法返回 RETURNS 子句中定义的数据类型的空值。 在表函数、行函数或过程中,不能针对 RETURN 指定 NULL。
WITH common-table-expression
定义可与 fullselect 配合使用的公共表表达式。
fullselect
指定要针对该函数返回的行。 fullselect 中的列数必须与函数结果中的列数匹配 (SQLSTATE 42811)。 此外,fullselect 的静态列类型必须可通过列分配规则分配到函数结果的已声明列类型 (SQLSTATE 42866)。

在过程或编译型表函数中,不能对 RETURN 指定 fullselect

如果例程是标量函数或方法,那么 fullselect 必须返回一列 (SQLSTATE 42823),并且最多返回一行 (SQLSTATE 21000)。

如果例程是行函数,那么它必须最多返回一行 (SQLSTATE 21505)。 但是,可以返回一列或多列。

如果例程是内联表函数,那么它可以返回零行或更多行以及一列或多列。 如果全查询具有零个结果行,那么 RETURN 语句不会将任何行返回到结果表。

规则

  • SQL 函数或方法的执行必须以 RETURN 语句结束 (SQLSTATE 42632)。
  • 在使用复合 SQL(编译型)语句的 SQL 表函数中,不能指定 expression、NULL 或 fullselect。 在函数中使用 PIPE 语句返回了一些行,并且需要 RETURN 语句作为在函数退出时执行的最后一条语句 (SQLSTATE 2F005)。
  • 在使用复合 SQL(内联)语句的 SQL 表或行函数中,唯一允许的 RETURN 语句是复合语句末尾的语句。 (SQLSTATE 429BD)。

注意

  • 从过程返回值时,调用者可以访问该值:
    • 从另一个 SQL 过程中调用 SQL 过程时,使用 GET DIAGNOSTICS 语句检索 DB2_RETURN_STATUS
    • 在转义子句 CALL 语法中使用返回值参数标记的参数界限 (? = CALL ...) 在 CLI 应用程序中
    • 在处理 SQL 过程的 CALL 之后,直接从 SQLCA 的 sqlerrd[0] 字段。 此字段仅在 SQLCODE 为零或正数时有效(否则使用值 -1)。

示例

如果成功,那么将使用 RETURN 语句从 SQL 过程返回状态值 0,否则返回 -200。
   BEGIN
   ...
     GOTO FAIL;
   ...
     SUCCESS: RETURN 0;
     FAIL: RETURN -200;
   END