您可使用 EXECUTE PROCEDURE 或 EXECUTE FUNCTION 来执行 SPL 例程或外部 例程。通常,最好将 EXECUTE PROCEDURE 用于过程,将 EXECUTE FUNCTION 用于 函数。
提示: 为了向后兼容, EXECUTE PROCEDURE 语句允许您使用 SPL 函数名称和 INTO 子 句来返回值。然而,推荐您仅将 EXECUTE PROCEDURE 用于过程,仅将 EXECUTE FUNCTION 用于函数。
您可从 DB-Access 或从 SPL 例程或外部例程内,发出 EXECUTE PROCEDURE 和 EXECUTE FUNCTION 语句作为独立的语句。如果在数据库内该例程名称是唯一的,且如 果它不需要参数,则您可通过在 EXECUTE PROCEDURE 之后只输入它的名称和圆括号来 执行它,如下图所示。
图: 执行过程。
EXECUTE PROCEDURE update_orders();
由于过程不返回任何值,因此,当您以 EXECUTE 语句调用过程时,从不出现 INTO 子 句。 如果例程期望参数,则您必须在圆括号内输入参数值,如下图所示。
图: 执行带有参数的过程。
EXECUTE FUNCTION scale_rectangles(107, 1.9)
INTO new;
该语句执行函数。由于函数返回值,因此,EXECUTE FUNCTION 使用 INTO 子句,指定 存储返回值的变量。当您使用 EXECUTE 语句来执行函数时,始终出现 INTO 子句。
如果数据库有多个同名的过程或函数,则 GBase 8s 基于参数的数据类型来定位到正确的函 数。例如,前图中的语句提供 INTEGER 和 REAL 值作为参数,因此,如果您的数据库 包含名为 scale_rectangles() 的多个例程,在数据库服务器仅执行接受 INTEGER 和 REAL 数据类型的scale_rectangles() 函数。
SPL 例程的参数列表始终有参数名称及数据类型。当您执行例程时,参数名称是可选的。 然而,如果您通过名称(而不是只通过值)来将参数传到 EXECUTE PROCEDURE 或 EXECUTE FUNCTION,如下图所示,则 GBase 8s 仅逐个例程地解析名称和参数,该过程 称为部分的例程解析。
图: 执行通过名称传递参数的例程。
EXECUTE FUNCTION scale_rectangles( rectid = 107,
scale = 1.9 ) INTO new_rectangle;
您还可通过将限定的例程名称添加到语句来执行存储在另一数据库服务器上的 SPL 例程; 即,database@dbserver:owner_name.routine_name 形式的名称,如下图所示。
图: 执行存储在另一数据库服务器上的 SPL 例程。
EXECUTE PROCEDURE gbasedbt@davinci:bsmith.update_orders();
当您远程地执行例程时,限定的例程名称中的 owner_name 是可选的。