首先,我们需要在BigQuery中创建储存过程。例如,下面的示例创建了一个简单的储存过程,它返回一个固定值。
CREATE PROCEDURE myProcedure()
BEGIN
SELECT "Hello world!" AS greeting;
END;
我们可以通过以下方式调用储存过程:
CALL myProcedure();
但是,当我们尝试在储存过程中使用变量时,会出现问题。例如,下面的示例创建了一个带有参数的储存过程:
CREATE PROCEDURE myProcedureWithParam(name STRING)
BEGIN
SELECT CONCAT("Hello, ", name) AS greeting;
END;
当我们尝试调用该储存过程时,会收到以下错误消息:
Error: Argument type mismatch in function IF: 'myProcedureWithParam' is not a valid argument type.
为了解决这个问题,我们需要为储存过程中使用的每个参数指定类型。例如,以下示例创建了带有指定参数类型的储存过程:
CREATE PROCEDURE myProcedureWithParamTyped(name STRING)
BEGIN
DECLARE greeting STRING;
SET greeting = CONCAT("Hello, ", name);
SELECT greeting;
END;
我们可以通过以下方式调用该储存过程:
CALL myProcedureWithParamTyped("John");
这样就可以成功调用储存过程了。因此,我们需要注意在BigQuery中创建储存过程时,为所有参数指定类型。