如何在<STRING> BQ 存储过程中插入数组列



我正在尝试创建以ARRAY为参数并插入到表中的BQ例程。

filename也可以为NULL。

CREATE OR REPLACE PROCEDURE `##.history`( Job_ID STRING, filename ARRAY<STRING> , Status STRING )
BEGIN


EXECUTE IMMEDIATE format 
("""
INSERT INTO  
`##.tablename`
( JOB_ID,
FILENAME,
STATUS,
)
values
(GENERATE_UUID(),
'"""||Job_ID||"""',
'"""||filename|| """',
'"""||Status||"""'
)
""");

当我调用过程时,它给出了错误:

调用###.history('ext1',['f1.txt','f2.txt'],'start'(;

参数类型的运算符||没有匹配的签名:STRING、ARRAY。支持的签名:STRING||STRING;字节||字节;数组| |数组

您的错误来自format语句,并试图连接数组,而连接只是一个字符串函数。正如Max Zolotenko所指出的,在您提供的示例中,您可能不需要EXECUTE IMMEDIATE,您可以继续执行以下操作:

CREATE OR REPLACE PROCEDURE `so_test.history`( Job_ID STRING, filename ARRAY<STRING> , Status STRING )
BEGIN


INSERT INTO so_test.struct_insert (job_id, filename, status)
VALUES
(
Job_ID,
filename,
Status
);
END;

然而,我想指出的是,在您的示例中,您也在尝试插入GENERATE_UUID(),但是您的值列表只包含3列。你也需要调整一下。

最新更新