如何按命名参数调用BigQuery存储过程?
BigQuery存储过程命名参数调用解决方案
问题说明
你定义了如下BigQuery存储过程:
CREATE OR REPLACE PROCEDURE proc_name( param_1 INT64, param_2 INT64, param_3 DATE ) BEGIN // CODE END
按顺序传参调用(如CALL proc_name(1,1,'2022-11-23'))正常,但尝试按命名参数调用时报错Query error: Unrecognized name: param_2 at [2:3],报错的调用语句为:
CALL proc_name( param_2 = 10 param_3 = '2022-11-23' param_1 = 5 )
可行方案
BigQuery支持命名参数调用存储过程,你只需修正语法即可,另外也可以通过STRUCT参数实现更灵活的参数传递:
方案1:使用官方支持的命名参数语法
BigQuery要求命名参数使用参数名 => 参数值的格式,且参数之间必须用逗号分隔——你的错误是误用了=而非=>,同时缺少参数分隔的逗号。
正确调用示例:
CALL proc_name( param_2 => 10, param_3 => '2022-11-23', param_1 => 5 );
该方式无需修改原有存储过程定义,直接按任意顺序传递命名参数即可。
方案2:使用STRUCT类型统一传递参数
如果需要更清晰的参数分组或更灵活的可选参数控制,可以重新定义存储过程,将参数封装为STRUCT类型:
重新定义存储过程:
CREATE OR REPLACE PROCEDURE proc_name( params STRUCT<param_1 INT64, param_2 INT64, param_3 DATE> ) BEGIN -- 内部使用参数时通过 params.param_1、params.param_2 访问 -- 示例逻辑: SELECT params.param_1, params.param_2, params.param_3; END;
调用时按名称指定STRUCT的字段,顺序可任意:
CALL proc_name( STRUCT(10 AS param_2, '2022-11-23' AS param_3, 5 AS param_1) );
内容的提问来源于stack exchange,提问作者nimgwfc
相关产品推荐
相关产品推荐

