BigQuery:使用变量为存储过程添加描述失败的问题排查
问题原因与解决方案
这是因为BigQuery对函数和存储过程的语法解析规则存在差异:函数的CREATE语句允许在OPTIONS中直接引用会话级的DECLARE变量,但存储过程的CREATE语句不支持这种写法,静态解析时会把OPTIONS里的doc当成未定义的标识符,所以报错"Unrecognized name: doc"。
解决方法是用动态SQL生成存储过程的创建语句,通过EXECUTE IMMEDIATE执行,把变量值直接嵌入到语句中:
DECLARE doc STRING DEFAULT FORMAT("""Doc"""); -- 原函数写法保留,不受影响 CREATE OR REPLACE FUNCTION `my_dataset.my_fun`() OPTIONS(description=(doc)) AS ((SELECT 1)); -- 改用动态SQL创建存储过程 EXECUTE IMMEDIATE FORMAT(""" CREATE OR REPLACE PROCEDURE `my_dataset.my_proc`() OPTIONS(description="%s") BEGIN END; """, doc);
原理是FORMAT函数会把doc的实际值替换到%s占位符的位置,生成完整的、不含变量的CREATE PROCEDURE语句,再通过EXECUTE IMMEDIATE执行,就能正常设置存储过程的描述了。
内容的提问来源于stack exchange,提问作者p13rr0m
相关产品推荐
相关产品推荐

