CALL 语句

您可使用 CALL 语句,从 SPL 例程调用 SPL 例程或外部例程。CALL 可执行过程,也可执行函数。如果您使用 CALL 来执行函数,则请添加 RETURNING 子句和将要接收该函数返回的值的 SPL 变量的名称。

例如,假设您想要 scale_rectangles 函数调用计算矩形面积的外部函数,然后返回带有矩形描述的面积,如下图所示。

图: 调用外部函数。

CREATE FUNCTION scale_rectangles( rectid INTEGER,
            scale REAL )
            RETURNING rectangle_t, REAL;
            
            DEFINE rectv rectangle_t;
            DEFINE a REAL;
            SELECT rect INTO rectv
            FROM rectangles WHERE id = rectid;
            IF ( rectv IS NULL ) THEN
            LET rectv.start = (0.0,0.0);
            LET rectv.length = 1.0;
            LET rectv.width = 1.0;
            LET a = 1.0;
            RETURN rectv, a;
            ELSE
            LET rectv.length = scale * rectv.length;
            LET rectv.width = scale * rectv.width;
            CALL area(rectv.length, rectv.width) RETURNING a;
            RETURN rectv, a;
            END IF;
            
            END FUNCTION;

该 SPL 函数使用执行外部函数 area() 的 CALL 语句。返回的值 area() 保存在 a 中,并通过 RETURN 语句返回到调用例程。

在此示例中,area() 是外部函数,但您可以同样的方式将 CALL 用于 SPL 函数。