CALL 语句

CALL 语句调用例程。

语法

使用 CALL 语句

CALL 语句调用例程。例程是用户定义的函数或过程,已通过下列某个语句对其进行了定义:
  • CREATE FUNCTION 语句
  • CREATE PROCEDURE 语句
注: 与标准的用户定义函数和过程一样,您也可以使用 CALL 调用内置(代理提供的)函数和用户定义的 SQL 函数。不过,调用这些类型函数的常用方法很简单,只需将它们的名称包含在表达式中即可。

调用的例程必须以匹配其定义的方式进行调用。例如,如果例程是用三个参数定义的,前两个是整数型,第三个是字符型,CALL 语句就必须向该例程传递三个变量,每个变量的数据类型应与例程定义的参数类型匹配。这称为精确特征符匹配,意味着 CALL 语句提供的特征符必须与例程定义提供的特征符匹配。

精确特征符匹配也适用于例程的返回值。如果在 CREATE FUNCTION 语句中指定了 RETURNS 子句,或者例程是内置函数,则必须在 CALL 语句中指定 INTO 子句。例程的返回值不可忽略。反之,如果 CREATE FUNCTION 语句中未指定 RETURNS 子句,由于例程没有返回值,因此不可指定 INTO 子句。

您可以使用 CALL 语句调用通过以下某种方法实现的例程:
  • ESQL。
  • Java。
  • 作为数据库中的存储过程。
  • 作为内置(代理提供的)函数。(但请参阅上述有关调用内置函数的注意事项。)

这种实现方式的多样性意味着 CALL 语法图中的某些子句并非适用于(或允许用于)所有类型的例程。同时还允许 CALL 语句调用任何类型的例程,而不管此例程是如何定义的。

未指定可选的 BrokerSchemaName 参数时,代理的 SQL 解析器使用 PATH 语句(请参阅 BROKER SCHEMA 语句的 PATH 子句)中描述的算法搜索指定的过程。

指定了 BrokerSchemaName 参数时,代理的 SQL 解析器在指定的模式中调用指定的过程,不必首先搜索该路径。但是,如果过程引用不明确(即,两个过程在不同的代理模式中有相同的名称),并且未用可选的 BrokerSchemaName 限定引用, Eclipse 工具集将生成“任务查看错误”,您必须更正此错误才能部署不明确的代码。

代理提供的内置函数自动放在名为 SQL 的预定义代理模式中。SQL 模式始终搜索尚未匹配用户定义例程的例程。因此,用户定义的模块优先于同名的内置例程。

每个代理模式为例程提供唯一的符号或名称空间,因此当例程受限于所在模式的名称时,例程名是唯一的。

INTO 子句用于存储由 RETURNS 子句定义的例程返回值,或存储内置函数的返回值。target 可以是与 RETURNS 子句中的数据类型匹配的 ESQL 变量,也可以是以点号分隔的消息引用。例如,以下两个 ESQL 语句均有效:
        CALL myProc1() INTO cursor;
        CALL myProc1() INTO OutputRoot.XML.TestValue1;

CALL 语句按给定的顺序将参数传递给过程。在执行 CALL 语句之前,会对例程定义中定义为 IN 或 INOUT 的参数求值,但定义为 OUT 的参数始终作为正确类型的 NULL 参数传递。过程完成时,将更新所有声明为 OUT 或 INOUT 的参数以反映过程执行期间对它们进行的任何更改。过程执行期间从不更改定义为 IN 的参数。

不支持例程重载。这表示无法在同一个代理模式中创建两个同名的例程。如果代理检测到例程已超负荷,则会报告异常。同样,您也无法调用重载的数据库存储过程。如果同一个数据库模式中存在两个同名过程,则数据库存储过程被视为重载。但是您可以调用重载 Java 方法,只要为每个要调用的重载方法创建单独的 ESQL 定义,并向每个 ESQL 定义赋予一个唯一的例程名即可。

相关概念
ESQL 概述
相关任务
正在开发 ESQL
调用存储过程
相关参考
语法图:可用类型
ESQL 语句
CREATE PROCEDURE 语句
BROKER SCHEMA 语句
PATH 子句
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ak04920_