我正在创建一个BQ存储过程来截断数据集中的所有表。我有一个两步的过程。步骤1识别所有匹配的表。第2步需要遍历每个表并截断。
我有以下代码来实现这一点:
for record in
( select TABLE_NAME
from <staging_dataset>.INFORMATION_SCHEMA.TABLES
)
DO
execute immediate
"truncate table @tab" using record.TABLE_NAME as tab;
END FOR;
我遇到的错误在立即执行部分中。
Invalid EXECUTE IMMEDIATE sql string `truncate table @tab`, Syntax error: Unexpected "@" at [8:3]
我尝试将@选项卡替换为?占位符,并看到类似的错误。我做错了什么?有没有其他方法可以达到同样的结果?
奇怪;DML似乎不适用于CCD_ 1。查询工作正常。
尝试使用CONCAT
构建动态查询字符串:
CONCAT("truncate table ", record.TABLE_NAME);